「大學生學編程系列」第九篇:如何學習算法

作為一個標準的程序員對於算法需要有一個基礎的掌握,而且算法幾乎滲透到編程的各個方面,具備良好的算法基礎對成為一名優秀的程序員有着非常大的好處,很多做了多年的程序員對於算法還沒有一個很好的概念,覺得自己算法基礎很一般還不是照樣做的很不錯,編程是一個種類極多,技巧非常多的,解決同樣一個問題不同的人會給出不同的解決方案,而且效果差別也會非常大。隨着人工智能的拓展算法又重新被很多企業重視起來,現在很多還沒畢業的碩士只要是算法相關專業的很多企業都能給出非常高的薪水,證明市場對於算法的需求在提升。

對於很多初級的程序員來講不會覺得算法有多重要,但在面試的時候或多或少的涉及到算法題目,越是一些大公司越是重視算法類的考查,算法屬於程序員編程技能的靈魂,同樣的解決一個問題,不同水平的人給出的結論是不一樣的,對於初級的程序員如何下手學習算法,開始編程意識比較模糊階段如何確定自己的算法學習方向,先不講複雜的算法,每個初學者都會接觸到數據結構這本書,數據結構裏面已經開始涉及到數據模型的概念,開始階段講到最基礎的數據類型,像常見的隊列,鏈表,棧,二叉樹等等概念。

作為初學者最初的接觸的是編程語言,還沒有數據結構的概念,只是接觸到編程語言的基礎語法怎麼實現一個簡單的功能,編程語言相當於是打造地基的零件,數據結構就是把這些按照某種方式組合起來,算法就是具體在組合過程中指導思想,所以普通程序員必須在掌握了一門編程語言的基礎上進行數據結構的學習,學習編程要的循序漸進,不要貪圖求快忘了學習的本質。

說到數據結構可能大家都有所留意,有C語言版本,有C++版本,也有java版本,不同的編程語言配套的數據結構有所差異,但本質指導思想是相似的,學習了一門編程語言弄明白了數據結構再去考慮學習算法,數據結構屬於算法的基礎,很多人直接在網上買本算法導論研究起來了,但關鍵是裏面語法細節並不能徹底的掌握,所以欲速則不達需要具備一定的基礎上再去考慮如何學習算法。

學習算法需要做哪些準備?

很多人覺得算法學習起來應該比較簡單,直接在網上買本書就可以開搞了,算法是編程是指導思想,具體操作哪種編程語言來實現是第一步,如果都不懂的編程語言直接上來學習算法,只是單純的理論學習意義不是很大,學好算法的關鍵是實踐落地化。

如果在懂得一門編程語言的基礎上,數據結構也能學的不錯了,就可以切入到算法的學習了,很多人覺得算法就是單純的裏面的一些技巧,算法離不開編程語言而單獨存在,單純的理論學習很難說成是真正的掌握算法。

支撐算法的還有一個非常重要的基礎,數學基礎,很多人問數學不好對於編程有多少影響,要說直接的影響就是算法,通常意義上編程不是每個地方都能用到算法,但在稍微講求效率的地方不可能把算法孤立,從一個標準程序員的角度考慮,算法是必須要掌握的基礎。

如何學習算法

任何知識點的學習都沒有固定的方法,在這只是以多年寫程序員的經驗總結這麼幾條分享給大家

1.掌握一門編程語言。不要嘗試着上來就學習算法,至於選擇哪種編程語言要根據自己的興趣愛好以及市場需求,脫離編程語言直接學習算法,屬於空中樓閣,編程語言的學習先從基礎語法開始,有多少自學編程的人在第一步就倒下了,編程行業屬於長期積累的過程,有多少人還沒等到開花結果就選擇了放棄,很多人頭腦一熱直接買了幾本書,開始看的還比較簡單覺得很有意思,後來難了就直接擱淺了,下次再次發現這本書的時候已經是幾個月甚至半年之後的事情了,學習編程沒點耐心,建議就不要重複浪費時間了。

2.學好對應語言的數據結構。其實從學習數據結構開始就已經對編程語言開始使用了,很多人直接接觸到數據結構就覺得裏面的東西太抽象了,這個階段需要突破的一個心坎,如果選擇的編程語言是C/C++會覺得裏面的數據結構裏面的串聯起來非常費勁,建議回去把指針徹底搞明白再去切入數據結構的學習,數據結構的一般開始階段都比較費力,最後越玩越有感覺的,數據結構的二叉樹,樹,等概念已經開始慢慢觸及到基本算法了,在編程語言中對這塊很多封裝成成品庫,簡單的排序算法,刪除算法等等都是在基本數據結構的基礎上進行擴展出來的,C++裏面泛型編程已經開始大量使用基本的算法了。

3.算法學習。算法學習第一個階段是要掌握基本的理論,在掌握基本的理論之後再去實踐,算法概念都不理解去實踐沒有任何意義,照着自己理解的場景利用代碼去實現,這個過程一般比較痛苦,如果數學基礎好點可能會理解的快一些,這個階段主要思考的比較多,思考認知上升之後就可以展開真正的算法實踐。

要學好算法以上三步缺一不可,成為一名優秀的程序員,算法基礎是必不可少的,算法學習的過程中可能會比較枯燥,但要想真正實現收穫,過程必然艱辛在這個過程中還能培養編程興趣,不是每個人生來就對某項事物感興趣,接觸多了自然就容易產生興趣,編程從來就是循序漸進的過程,不可能一蹴而就,如果沒有足夠的耐心不建議進入這個行業的學習中,希望能幫到你。