學習編程有必要學演算法導論嗎?
01-06
感覺實驗室的研究生們做東西都用不到啥演算法啊,為什麼都說演算法重要?
1.校園招聘正在進行,你可以去看看那些月薪一萬以上的編程崗位,他們的面試題是什麼,筆試題是什麼。。。然後你再問自己演算法重要不重要。。。2.樓主的設定是學習編程,編程有什麼領域?設計模式,演算法,操作系統,編譯器,架構。。如果你跟那些工作兩三年的人比代碼量,比設計模式,比架構能比得過嗎??要知道,隨隨便便8000月薪就能夠找到一個代碼量20萬行以上的,工作兩三年的,有過幾個較大實際項目開發經驗的人。他們可能只是一個大專學歷。。那些公司憑什麼要給個校園出來的愣頭青的人開更高的工資,你出去是能夠比他們更加熟練的寫代碼?還是你比那些老員工更懂系統結構?還是能夠給出更好的架構方案?3.去看一下,年薪30萬以上的技術崗位(社招上面的),哪一個裡面沒有「演算法」兩個字。。4.其次,為什麼是演算法,比如操作系統,編譯器不行嗎?當然可以。。。但是編譯器,操作系統的實用性沒有演算法高,而且演算法能夠短時間內直接測出水平。。操作系統要想20分鐘面試的時間探出個水平還挺難的。。
5.TAOCP那本書,部門除了我沒人聽過,但是CLRS卻都知道,雖然他們不敢讀。TAOCP太過理論化。。。
6.演算法不意味著非要看《演算法導論》,很多面試題庫裡面都有各種常見演算法題,自己拿來做一做,背一背就可以了。。話說我《演算法導論》看了半年(600小時)才看完的,而且我本身是有一定的演算法基礎的情況,特別耗時間那本書。。。如果只為速成,建議直接做題背題。。。7.演算法只有那些大牛才會去寫,才能去寫。。但是大牛的工資高啊,人家重要啊,稀缺啊。。。如果只考慮技術因素,演算法很重要。。8.人工智慧,大數據等熱門領域都需要大量演算法人才。。。如果你演算法根基不紮實,那最多只能學個皮毛而已。9.我去年被面試時,人家根本就瞧不起我簡歷上面的那些CRM系統,java框架,因為學校里的這些太廉價了。。。到最後,面試官給我出了演算法導論,第4章的第一個例題,我勉強答上來並優化成功後,他才給我offer。。。今年10月的一次嘗試面試,我在資料庫,網路協議,編程語言語法,全面潰敗的情況下(都是懂一點,但不精通),他問了演算法導論第5章第三小節的一個例題,我勉強答上來,而後又在另一個簡易的動態規劃演算法上,給出完整解答。。。我才剛面試離開,HR就開始給我打電話聊薪水。10.演算法導論,工作中很難用到,我讀完了,確實能用的地方不多,但是因為這個東西,我這個剛畢業的本科生能夠在部門裡面很有存在感。。。---------------------------------------------------補充分割線-----------------------------------------------------------------------抱歉,我又經歷了一些事,補充一下,《演算法導論》說到底也只不過是麻省理工那邊的一本本科教材,如果你是一個研究生,有一個比較高端的研究項目,那麼是否要考慮學這本是一個疑問。。。就好比讀大學了回來看高中的書一樣。這個優先順序還是應該自己把握清楚。我也理解一些數學專業的碩士看輕這本書的態度。如果不考慮演算法導論後面的那些高大上的論文引用資料,本身它的推導和題目雖然精彩,但是說到底還是比較初級的。所以真正遇到高手(那些行業頂尖的演算法工程師)的時候還是不太夠用。。。現在數據挖掘,人工智慧非常熱門,本身演算法導論沒有在這個層次上做討論,即使學了演算法導論,如果要做數據挖掘之類的基本還是算重頭學起,雖然可能理解更快一些更好一些。包括微積分,變分,一些更加厲害的數學技巧將會被用到。而這部分卻又是非常重要。。。所以最終的建議是,如果你已經有一個更高級別的東西研究了,那麼,或許,這本書不是那麼重要。。。對於普通的人,這本書無論是技巧還是思維訓練上面都是相當出色的一本教材。
或許最好的情況 可能 正如它在美國的地位一樣,本科學這本打下演算法底子,研究底子,找到興趣點和學習方法,然後研究生時做更高水平更加專業化的研究和實踐(雖然這話國內聽了很扯淡)。。---------------------------------------------------補充分割線-----------------------------------------------------------------------舉個栗子:機器學習裡面有一個很重要工具 svm,其實本質是通過「二次規劃」引入核函數,避免維數爆炸。而《演算法導論》後面章節提到了線性規劃(一次的),如果能夠理解線性的證明,那些約束,以及dual(對偶)的意義,那麼,再來看svm是可以有「似曾相識」的基礎。而且二者都是應用很廣的東西,可以對照加深理解。所以本科如果學了線性規劃,到了研究生是可以比較自然地過渡到svm的。但,svm畢竟是二次的東西,雖然思想類似,但其中的技術複雜度,要難上幾個等級,如果你搞懂了svm,二次的東西,再來看線性規劃,結果就很簡單了,就好比一元一次函數與一元二次函數的關係。如果你已經走在了svm這種高級的東西上了,並且挺懂能夠跟著做出點項目,那麼,就沒有必要特意回來啃《演算法導論》了。有必要學演算法,但不一定非得看演算法導論
學演算法對於寫程序來說非常重要。如果不打算進行演算法相關的研究,你可以不學演算法的證明等等,可必需得學會演算法本身描述的操作、它的適用場景與局限、它解決的問題的抽象模型等。也就是說,你可以不知道它是咋來的,但你必需會用。
而且演算法在程序里普遍存在。除了helloworld級的玩具程序,幾乎任何稍複雜一點的程序都需要演算法。聽歌,很普遍吧,可你有沒有想過推薦歌曲是怎麼弄的呢?是演算法。上網,很普遍吧?那你知不知道你的數據包是怎麼從無數的路徑里找到最短的一條呢?還是演算法。演算法在程序里存在的太普遍了,所以學好演算法真的是太重要了。一方面,這就跟學數學一樣。
養成一種邏輯模式,通過長期的大量的演算法訓練,你可以快速的把一個現實的問題分解成計算機所能夠理解的方式來實現。
另一方面,是你們的做得實驗性項目太簡單。
如果你做的項目足夠大,足夠複雜,對性能或者安全性,並行性,協作性足夠高的時候。演算法就變得異乎尋常的重要了。
1. 學演算法重要不等同於學《演算法導論》重要。我覺得 UC 的 Algorithms 和 Princeton 的 Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne 都不錯。2. 從學術的角度來講,演算法研究主要分為演算法的設計和演算法的分析。如果你只是為了編程,那麼不要和演算法研究混在一起,重點在編寫演算法的實現、領會演算法思維上面。3. 你不能憑感覺說研究生搞搞東西和演算法無關,要看論文。4. 從找工作的角度上,leetcode 上面有幾個題和演算法無關?
未必非要讀這本書,但是演算法的知識還是希望你有的。比如我們目前的工作就涉及一些尋路演算法。之前的工作有涉及編輯距離、組合子之類的東西。等到用的時候再去學有點來不及。
感覺題主的問題可以分成兩個子問題
學習編程有必要學習演算法么?
我覺得編程可以做的東西很多。對於有些項目的確沒什麼必要,很多純工程的ERP之類的項目我真的看不出來要用到什麼樣的演算法。
即使是一個大項目,架構會有專門的神人來做,影響效率的關鍵代碼也會有牛人來寫,至於其他部分,真的不需要演算法。。。學習演算法有必要學演算法導論么?如果不是要考演算法理論研究的話,還是換一本書吧。我覺得CLRS和TAOCP一樣難讀。。。老話說得好,基礎不牢,地動山搖。
演算法是要學習的,不一定要看《演算法導論》,因為這本書算不上實用,有基礎的情況下,想再了解了解,又不願意看大部頭的,可以看看這本書。衷心的希望你以後的工作需要一些演算法知識,否則你的工作可能有點低級。。。
不找工作的話,沒必要去看。找工作的話,什麼狗屁筆試題,就是演算法導論的弱化版。
沒意義,別聽那些人瞎扯蛋
因為中國程序員多,人多。
推薦閱讀:
※從零開始學 PHP,有什麼好的教材推薦?
※udemy上有什麼值得看的視頻課程?
※一個想學習編程的門外漢最佳的入門語言工具是哪個?
※求教:排課演算法?
※葉勁峰老師最近發表的從零開始的Json庫教程適合什麼水平的編程學習者?