如何提升自己的編程能力(特指演算法等方面)?

感覺現在的自己,就像別人口中的碼農一般,在網上找找代碼,找找第三方庫,自己再寫上一些很簡單的代碼,然後一個應用就完成了。完全沒有那種自己思考的感覺,似乎就是在堆砌代碼。計算機演算法方面的能力很弱。當別人對某某數學模型、某某演算法侃侃而談的時候,我卻一頭霧水。自己想增強這方面的能力,卻不知應該從何做起。


談下我在招聘 IOS 程序員時的一些感受。

每天要看很多簡歷,很麻木了。不管是剛畢業的也好,工作一兩年的也好,簡歷里除了會寫熟悉哪些哪些大家都知道的技術,然後就是大片大片的項目經驗,做了多少多少東西,什麼什麼功能。很多甚至把 xcode 開發環境、mac型號都寫上了。這有什麼用呢?

在後面的實際面試中,發現項目不是白做的,的確知道怎麼寫代碼,怎麼做出一個界面,怎麼發起一個網路請求... 僅此而已了。不知道如何做設計,如何優化,一行代碼不知道不同的寫法有什麼不同。很多在以前我認為是程序員基本素養的東西,到了互聯網這個行業就都沒有了。

後來跟一位同事聊起這個事情,他指出了一點:沒有對技術的好奇心。我很贊同。

一個優秀的程序員,應該對每一行代碼,每一個為什麼,都知根知底。對一般人來說,這是非常枯燥的,因為需要學習大量新知識,不斷的學習,不斷的總結。而能驅使程序員樂於做這件事情的,就是好奇心。

如何提高能力?很簡單,不用你看什麼書,不用像誰請教,只要把你所能接觸的每一行代碼都徹底弄明白就好。為了做到這個目的,你可能會需要看很多數,請教很多人。。引入第三方庫感覺像壘代碼?開源項目要可控的呀?!繼續學習,繼續總結。等你看了足夠多的代碼,積累了足夠的基礎,有一天你會突然感覺頓悟了,然後是下一個頓悟,再下一個。

最後回歸本題,搞工程的沒必要羨慕搞研究的,看你的興趣了,能做好一件事已經通天了,當然也有很多人通吃的。


「演算法」是個無底洞,真的,往深了研究一輩子都研究不完。

所以我現在的策略是,學習掌握好最基本那些演算法和數據結構,後面需要使用到的時候再以之前的基礎來進行學習。

另外,不認為脫離項目單獨學習演算法然後想提高演算法能力是個好主意,因為我看了不少的開源項目,其實裡面用到的複雜演算法非常少。所以我建議,如果不是想一輩子做研究型的工作,最好還是結合實際項目學習演算法為好。

另外,工程中要解決一個實際問題,應該還是從業務出發定義出數據結構,最後相應的演算法就自然而然出來了。這不是我的觀點,很多前輩高人比如Linus都是這麼認為的。


去OJ上刷500道題吧!

我不知道別人是怎麼提高的,至少這個方法對我有效。

參見:計算機專業的學生除了ACM這條路還有什麼好路子可選擇?


看演算法導論,刷OJ。堅持到300-500道題。然後,所有的迷茫都豁然開朗了


OJ是哪裡?


推薦閱讀:

現今人工智慧,機器學習領域研究的困難主要有哪些?
怎樣求出K個斐波那契數的最小公倍數?
如何判斷一條線段和一個矩形或者圓相交?
對大整數N開平方,求其整數部分,有什麼好的演算法嗎?

TAG:演算法 | 編程 | 提升個人能力 |