程序員必問的一道題:數(shù)學(xué)沒學(xué)好,到底能不能學(xué)好算法?
我覺得我很理解你的這個想法。但我想給你澆一盆冷水。根據(jù)我的經(jīng)驗,這樣做,大概率會效率很低,最終不會得到你想要的東西。
我還是更建議你能仔細(xì)想明白,自己到底想要學(xué)什么,然后直接去學(xué)。
除非你真的想要學(xué)的是數(shù)學(xué),否則的話,我不建議“從頭學(xué)數(shù)學(xué)”。

為什么?
一方面,數(shù)學(xué)是一個無底洞,可以無限拓展,其實很難真正地“掌握”;
另一方面,數(shù)學(xué)也是一個太過抽象的籠統(tǒng)的概念。
這點,其實和計算機(jī)是一樣。前端是計算機(jī);后端是計算機(jī);移動開發(fā)是計算機(jī);網(wǎng)頁開發(fā)也是計算機(jī)。人工智能是計算機(jī);虛擬現(xiàn)實是計算機(jī);編譯器是計算機(jī);數(shù)據(jù)庫是計算機(jī);網(wǎng)絡(luò)安全是計算;大數(shù)據(jù)分析還是計算機(jī);圖形學(xué),圖像學(xué),語音識別,推薦系統(tǒng),人臉識別,語義分析,搜索引擎,知識圖譜,統(tǒng)統(tǒng)都是計算機(jī)。在計算機(jī)的世界里,隔行如隔山。
數(shù)學(xué)的世界,也是如此!高數(shù),線數(shù),概率,統(tǒng)計,解析幾何,計算幾何,圖論,數(shù)論,群論,數(shù)理邏輯,組合數(shù)學(xué),博弈論,拓?fù)鋽?shù)學(xué),這些統(tǒng)統(tǒng)都是數(shù)學(xué)!
但具體到某一個方向,實話實說,并非所有這些數(shù)學(xué)都是有用的。

成人之后的學(xué)習(xí),我還是更推崇有針對性的學(xué)習(xí)。想“系統(tǒng)地學(xué)習(xí)”并沒有錯,但是我認(rèn)為不應(yīng)該是“系統(tǒng)地學(xué)習(xí)高中數(shù)學(xué)或者大學(xué)數(shù)學(xué)”,而應(yīng)該聚焦在“系統(tǒng)地學(xué)習(xí)某一個門類的數(shù)學(xué)”。這樣效率更高,也容易達(dá)成自己的目標(biāo),成就感強(qiáng),有正反饋,也就更有進(jìn)一步的學(xué)習(xí)動力。
你說“明顯的感覺到技術(shù)上的很多東西學(xué)起來都力不從心”。我的建議是:仔細(xì)總結(jié),到底是學(xué)習(xí)哪些技術(shù)時,感覺力不從心?感覺力不從心的關(guān)鍵,到底是什么?真的是自己的數(shù)學(xué)基礎(chǔ)問題嗎?還是其實這個領(lǐng)域本身就沒有系統(tǒng)接觸過?如果真的是數(shù)學(xué)基礎(chǔ)問題,到底是哪一個領(lǐng)域的數(shù)學(xué)問題?
把問題不斷地問下去,找到屬于自己的核心瓶頸,而不是簡單地把一切歸結(jié)于一句“自己的基礎(chǔ)不好”。因為這一定程度上,其實是“逃避”了可能隱含的核心問題。就算你開始很努力地“補(bǔ)基礎(chǔ)”,但很有可能花了很長時間以后,發(fā)現(xiàn)離自己想要達(dá)到的目標(biāo),依舊很遠(yuǎn)。其實在我看來,這也是掉入了完美主義的陷阱。
另外,有一些領(lǐng)域,學(xué)習(xí)曲線就是陡峭的,其實和所謂的基礎(chǔ)關(guān)系不大。就算基礎(chǔ)再好,也改變不了這個學(xué)科或者領(lǐng)域本身學(xué)習(xí)曲線陡峭的事實;學(xué)再多基礎(chǔ),也無法避免初學(xué)時碰壁。

比如,學(xué)習(xí)使用 Windows 的記事本是很容易的事情,但是學(xué)習(xí)使用 Vim,就是很難的。Vim 的學(xué)習(xí)曲線,就是陡峭的。
仔細(xì)想一想,提前學(xué)習(xí)什么,會使得我們可以更加平順地掌握 Vim?我確實沒有什么好的建議。我唯一能做到的就是告訴你:Vim 本身就是難學(xué)的,不要氣餒,每個人都一樣。不停地使用 Vim,不停地熟悉每一個概念和功能,慢慢你就能掌握它了。
其實,我覺得算法也是此類學(xué)習(xí)曲線相對陡峭的學(xué)科。我真心不認(rèn)為數(shù)學(xué)基礎(chǔ)好,就可以很簡單地理解紅黑樹的實現(xiàn)細(xì)節(jié),或者輕松搞明白 KMP。
我認(rèn)為和算法本身去較勁,比去學(xué)習(xí)數(shù)學(xué),更能提升算法水平。根據(jù)你的敘述,我估計,如果你去和那些斬獲大廠 offer 的人去聊,有一半人可能數(shù)學(xué)還不如你呢。

當(dāng)然,當(dāng)你要實現(xiàn)一個計數(shù)算法,突然意識到自己的排列組合不夠好;或者當(dāng)你要實現(xiàn)一個幾何算法,發(fā)現(xiàn)需要系統(tǒng)學(xué)習(xí)一下計算幾何;或者當(dāng)你學(xué)習(xí)圖形學(xué),意識到線數(shù)很重要;或者在學(xué)習(xí)機(jī)器學(xué)習(xí)的過程中,發(fā)現(xiàn)需要高數(shù)和統(tǒng)計基礎(chǔ)的時候,自然要去“死磕”相關(guān)的數(shù)學(xué)的。
指望著提高自己的基礎(chǔ),然后就能自然而然地,無障礙地,非常平順地學(xué)會這個世界上的任何知識,有些過于理想主義了。雖然大多數(shù)課程的設(shè)計者,教材的編寫者,追求的就是能讓學(xué)習(xí)者盡量平順地完成整個學(xué)習(xí)過程,但這畢竟只是一種追求,我悲觀地認(rèn)為近乎永遠(yuǎn)達(dá)不到。
更何況,這個世界上還有一些教育學(xué)家在提倡:不應(yīng)該過渡追求平緩的學(xué)習(xí)過程。學(xué)習(xí)就應(yīng)該在自己能力范圍里,去追求最陡峭的學(xué)習(xí)方案,只有這樣,才能最快速地提高和成長。
當(dāng)然,我沒有說這種觀點一定正確,我只能說它也有一定的道理。通過這些討論,我們可以看出來,學(xué)習(xí)是一件很復(fù)雜的事情。
我經(jīng)常說,學(xué)習(xí)方法沒有一定之規(guī)。與其不停地去尋找學(xué)習(xí)的路徑,學(xué)習(xí)的方法,不停地做“學(xué)習(xí)前的準(zhǔn)備”,不如直接去學(xué)。

學(xué)習(xí)的過程不僅僅是吸收知識,增長技能。每個人在學(xué)習(xí)的過程中,也是在實踐自己的學(xué)習(xí)方法,并且不斷地調(diào)整。只有在學(xué)習(xí)的過程中,每個人才能找到最適合自己的學(xué)習(xí)方法。而這,很有可能比任何實際的知識,都重要得多。
我不相信這個世界上有萬能的學(xué)習(xí)方法。我經(jīng)常用反證法說明這類問題:如果這個萬能的學(xué)習(xí)方法存在的話,那么所有人早就去使用這些方法了,所有人也都很順利地迅速掌握了自己希望自己掌握的知識了。但顯然,這個世界不是這樣子的。
最后,我要說,如果你只是單純地對數(shù)學(xué)感興趣,那么上面所有這些話都是廢話。
興趣是一件神奇的東西。我們可以不計回報地去追求自己的興趣,甚至為了興趣付出自己的所有。
擁有興趣是一件很幸運的事情,追逐興趣也是一件很幸福的事情。而且,大多數(shù)人確實更容易在自己感興趣的事情上成功;即使不成功,也無怨無悔。
大家加油!

如果你想更好的提升你的編程能力,好好學(xué)習(xí)C/C++編程知識成為高薪軟件開發(fā)工程師的話!那么你很幸運~

UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會對你有幫助的~
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
編程學(xué)習(xí)書籍:

編程學(xué)習(xí)視頻:
