當前位置:
首頁 > 科技 > 前Google工程師:如何看待程序員普遍缺乏數據結構與演算法的知識?

前Google工程師:如何看待程序員普遍缺乏數據結構與演算法的知識?

內容出自 | 極客時間《數據結構與演算法之美》

作者 | 前 Google 工程師王爭

很多技術人都很迷茫,覺得自己做的項目沒有技術含量,成天就是賣苦力。技術的東西,日新月異,有些人總在忙於追求熱點新技術,東學學、西學學,平時泛泛地看技術書籍、技術文章,但始終根本抓不住技術的本質,幹了三五年之後,感覺並沒有積累到什麼東西,跟剛畢業的大學生能力差不多,因此深深的感到焦慮。

實際上,本質的原因,還是我們沒有掌握到,做為程序員,我們該積累什麼東西?是各種知識、技術本身嗎?我覺得不是,我覺得最應該積累的是「能力」。

能力就像是內功,而知識就像是招式。知識會過時,而能力永遠都不會過時。初級程序員才比招式,高級程序員只看內功。

對於一個程序員來說,如何修鍊內功呢?首要是打好基本功,比如掌握操作系統、編譯原理、資料庫理論等,但最基礎的應該就是紮實的掌握數據結構和演算法了。

不過,雖然道理都懂,但很多人還是很多困惑,比如下面這些:

總感覺數據結構和演算法是「屠龍技」、「虛招式」,除了面試,工作中根本用不著;

不懂演算法,只要編程語言 API、開發框架用得熟練,代碼照樣寫得「飛」起來。

實際上,如果你做的只是簡單的業務邏輯翻譯工作,開發的系統沒有性能壓力,那你確實只需要掌握 API、框架用法就足夠,但是,你真的就甘心做一個天花板很低的 CRUD 碼農嗎?

如果你開發的業務比較複雜,你就需要設計複雜的架構來應對,進而就要用到各種複雜的技術、中間件、框架。要想更好地用好這些東西,你就需要了解它們的底層原理。而為了保證性能、擴展性等,它們底層使用了大量的數據結構和演算法,比如我們常用 Redis 的有序集合來實現排行榜功能,但你知道它底層是依賴什麼數據結構和演算法嗎?為什麼要用跳錶和散列表兩種數據結構來構建索引呢?紮實的數據結構和演算法功底,可以幫助你快速的讀懂源碼,更加從本質上理解它的設計原理。

如果你開發系統有很高的性能壓力,那一個簡單的數據存儲結構的選擇問題(比如是用數組來還是鏈表),就可能會產生成千上萬倍的性能差別。這個時候,數據結構和演算法的價值就完全凸顯出來了。而且,即便你是用編程語言提供的現成的類來開發,但如果你不知道這些類庫背後的原理,不懂得時間、空間複雜度分析,那你又如何有信心能用好、用對它們?你又該如何評估代碼的性能和資源的消耗?

不過,你可能會說,我是一個有追求的程序員,我知道數據結構和演算法很重要,但是,國外有這麼多經典的數據結構和演算法書籍、視頻、動畫,為啥要花錢來學習這個專欄呢?

儘管有很多書籍講的通俗易懂,也有很多書籍全面、經典,但是大部分都偏理論,書中的例子也大多脫離真實的軟體開發。看完書之後,很多人只是死記硬背了一些知識點而已。這樣填鴨式的學習,對於鍛煉思維、開拓眼界並沒有太多作用。而且,從基礎理論到應用實踐,有一個非常大的鴻溝要跨越,這是大學教育的普遍不足之處,這也是為什麼我們常常覺得大學裡學過的很多知識都沒用。

所以,我力爭並非只是單純地把某個知識點講清楚,而是結合我的理解、實踐和經驗來講解,力爭成為一個跟所有國內、國外經典書籍都不一樣的專欄,一個可以長期影響一些人的專欄。

我的專欄最大特色就是,列舉大量實際軟體開發中的場景,給你展示如何利用數據結構和演算法解決真實的問題。我掰著指頭數了下,整個專欄會涵蓋 100 多個演算法真實項目場景案例。我還手繪了一些清晰易懂的詳解圖(總共有 300 多張),讓晦澀難懂的演算法變得輕鬆有趣。

手繪圖—出自《數據結構與演算法之美》

現在,專欄已經更新完畢,72 篇文章,27 萬字,這期間也陸陸續續 50000 程序員加入學習,是極客時間訂閱量最好、好評最多的專欄之一。很多讀者對我評價都很高,覺得我真的不只是技術好、邏輯性強,還很會講,能夠點出技術的本質、演算法的本質,娓娓道來,聽得十分過癮。很多學員都跟追劇一樣,每天早上第一件事就是看我的更新。說實話,我自己都沒想到會這麼受歡迎。

留言區讚美的話太多了,現在我截取很少很少一部分,展示給你。如果你感興趣,可以試讀一下專欄中「結束語 | 送君千里,終須一別」那篇文章,裡面的留言足以看出讀者對我的無比認可!

學完後,你能收穫什麼?

1. 掌握常用的數據結構與演算法的由來、原理、實現、特點

不僅讓你搞懂每種數據結構和演算法的原理和實現,還讓你知道,他們的歷史背景和由來。真正弄明白我們為什麼需要這個數據結構和演算法,它是為了解決什麼樣的問題才被創造出來的。掌握每個數據結構和演算法的本質,也就能掌握創新的源頭。

2. 鍛煉邏輯思維、演算法思維,提高編碼質量、編程能力

邏輯思維,對於一個程序員來說是非常重要的,而演算法思維,對於寫出高性能的代碼也是非常關鍵的。專欄不僅僅是數據結構和演算法知識的一種填鴨式的灌輸,更加側重於對你邏輯思維、演算法思維的訓練。通過 72 篇文章,跟隨著作者嚴謹、邏輯性極強地講解,會潛移默化地提高你的邏輯思維、演算法思維。

3. 教會你如何將演算法應用於實戰,如何在實戰中應用演算法

我在講解每種數據結構和演算法的時候,都會配合一到兩個真實軟體開發中的問題來講解,同時還會配合一到兩個非常考驗你思維的課後思考題,加深你的理解。除此之外,專欄還通過幾個大的實戰項目,完整的給你展示了,在一個大項目中,如何利用數據結構和演算法,來解決問題,提升性能。

InfoQ 粉絲訂閱福利

原價¥99,限時¥79,立省¥20,優惠僅限今天

掃碼免費試讀


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 InfoQ 的精彩文章:

9個優秀技術人必須掌握的「獨門秘籍」
Spring Cloud完全碾壓Dubbo?架構師笑而不語

TAG:InfoQ |