面試過999個程序員,很多人都缺乏數據結構和算法知識

語言只是工具,而算法纔是程序的靈魂。這句話,我估計你在編程之路上,已經聽到過無數次。但具體到工作裏,你是不是還會有下面這樣的困惑?

  • 數據結構和算法,跟操作系統、計算機網絡一樣,是脫離實際工作的知識。除了面試,我可能這輩子也用不着。
  • 就算不懂這塊知識,只要Java API、開發框架用得熟練,我照樣可以把代碼寫得“飛”起來。

那今天我就來詳細聊一聊,爲什麼要學習數據結構和算法。首先我先問你個問題,作爲一名開發工程師,你真的願意做一輩子的CRUD boy嗎?

我知道,大部分的程序員整天做的事情就是增刪改查,在所謂的“業務開發”工作裏,更多的是利用已經封裝好的現成的接口、類庫來堆砌或者翻譯業務邏輯,這其中很少需要數據結構或者算法之類的知識。

但是,不需要自己實現,並不代表什麼都不需要了解。

舉個例子,如果你不知道這些類庫背後的原理,不懂得時間、空間複雜度分析,那你又如何有信心能用好、用對它們?存儲某個業務數據的時候,你如何知道應該用ArrayList,還是LinkedList呢?調用了某個函數之後,你又該如何評估代碼的性能和資源的消耗?

初級程序員才比招式,高級程序員只看內功。

一個簡單的ArrayList、Linked List的選擇問題,就可能會產生成千上萬倍的性能差別。這個時候,數據結構和算法的價值就完全凸顯出來了。如果你理解他們背後對應的數據結構,那就可以迅速看到這些類背後的本質區別,那個時候,你根本不用死記硬背,自然理解什麼樣的場景裏該選擇什麼。



在西安交大讀研究生的時候,一個師兄給了我一本《算法導論》,從此我便一頭扎進算法世界,到現在也十多年了。這期間,我研究過數十本數據結構與算法的書籍,並對它們進行了仔細地對比、分析。

我發現,像《算法導論》這些經典書籍,雖然很全面,但是過於缺乏重點。很多人學起來都非常困難。而市面很多在線課程或者線下課程,大多是爲了“應試”,只講一些看似通用,實則脫離真實開發場景的內容。費勁學完感覺根本用不上,過不了幾天就忘了。



相關文章