出處:極客時間《數據結構與算法之美》
很多技術人都很迷茫,覺得自己做的項目沒有技術含量,成天就是賣苦力。技術的東西,日新月異,有些人總在忙于追求熱點新技術,東學學、西學學,平時泛泛地看技術書籍、技術文章,但始終根本抓不住技術的本質,干了三五年之后,感覺并沒有積累到什么東西,跟剛畢業的大學生能力差不多,因此深深的感到焦慮。
實際上,本質的原因,還是我們沒有掌握到,做為程序員,我們該積累什么東西?是各種知識、技術本身嗎?我覺得不是,我覺得最應該積累的是“能力”。
能力就像是內功,而知識就像是招式。知識會過時,而能力永遠都不會過時。初級程序員才比招式,高級程序員只看內功。
對于一個程序員來說,如何修煉內功呢?首要是打好基本功,比如掌握操作系統、編譯原理、數據庫理論等,但最基礎的應該就是扎實的掌握數據結構和算法了。
不過,雖然道理都懂,但你可能還是會有很多困惑,比如下面這些:
- 總感覺數據結構和算法是“屠龍技”、“虛招式”,除了面試,工作中根本用不著;
- 不懂算法,只要編程語言API、開發框架用得熟練,代碼照樣寫得“飛”起來。
實際上,如果你做的只是簡單的業務邏輯翻譯工作,開發的系統沒有性能壓力,那你確實只需要掌握API、框架用法就足夠,但是,你真的就甘心做一個天花板很低的CRUD碼農嗎?
如果你開發的業務比較復雜,你就需要設計復雜的架構來應對,進而就要用到各種復雜的技術、中間件、框架。要想更好地用好這些東西,你就需要了解它們的底層原理。而為了保證性能、擴展性等,它們底層使用了大量的數據結構和算法,比如我們常用Redis的有序集合來實現排行榜功能,但你知道它底層是依賴什么數據結構和算法嗎?為什么要用跳表和散列表兩種數據結構來構建索引呢?扎實的數據結構和算法功底,可以幫助你快速的讀懂源碼,更加從本質上理解它的設計原理。
如果你開發系統有很高的性能壓力,那一個簡單的數據存儲結構的選擇問題(比如是用數組來還是鏈表),就可能會產生成千上萬倍的性能差別。這個時候,數據結構和算法的價值就完全凸顯出來了。而且,即便你是用編程語言提供的現成的類來開發,但如果你不知道這些類庫背后的原理,不懂得時間、空間復雜度分析,那你又如何有信心能用好、用對它們?你又該如何評估代碼的性能和資源的消耗?
不過,你可能會說,我是一個有追求的程序員,我知道數據結構和算法很重要,但是,國外有這么多經典的數據結構和算法書籍、視頻、動畫,為啥要花錢來學習這個專欄呢?
盡管有很多書籍講的通俗易懂,也有很多書籍全面、經典,但是大部分都偏理論,書中的例子也大多脫離真實的軟件開發。看完書之后,很多人只是死記硬背了一些知識點而已。這樣填鴨式的學習,對于鍛煉思維、開拓眼界并沒有太多作用。而且,從基礎理論到應用實踐,有一個非常大的鴻溝要跨越,這是大學教育的普遍不足之處,這也是為什么我們常常覺得大學里學過的很多知識都沒用。
所以,我并非只是單純地把某個知識點講清楚,而是結合我的理解、實踐和經驗來講解,力爭成為一個跟所有國內、國外經典書籍都不一樣的專欄,一個可以長期影響一些人的專欄。
我的專欄最大特色就是,列舉大量實際軟件開發中的場景,給你展示如何利用數據結構和算法解決真實的問題。我掰著指頭數了下,整個專欄會涵蓋100多個算法真實項目場景案例。我還手繪了一些清晰易懂的詳解圖(總共有300多張),讓晦澀難懂的算法變得輕松有趣。
現在,專欄已經更新完畢,72篇文章,27萬字,這期間也陸陸續續有 48000+ 程序員加入學習,是極客時間訂閱量最好、好評最多的專欄之一。很多讀者對我評價都很高,覺得我真的不只是技術好、邏輯性強,還很會講,能夠點出技術的本質、算法的本質,娓娓道來,聽得十分過癮。很多學員都跟追劇一樣,每天早上第一件事就是看我的更新。說實話,我自己都沒想到會這么受歡迎。
留言區贊美的話太多了,現在我截取很少的一部分,展示給你。如果你感興趣,可以試讀一下專欄中“結束語 | 送君千里,終須一別”那篇文章,里面的留言足以看出讀者對我的無比認可!
我是誰?
王爭,前Google工程師,之前從事谷歌翻譯相關的開發工作。在業余時間,持續研究數據結構和算法,幾乎讀過所有的數據結構和算法書籍,切過上千道算法題目。除此之外,我一直沒有脫離一線編程工作,所以有大量的數據結構和算法的實戰經驗,希望我的專欄能開啟你算法學習之門。
你能獲得什么?
1.掌握常用的數據結構與算法的由來、原理、實現、特點
不僅讓你搞懂每種數據結構和算法的原理和實現,還讓你知道,他們的歷史背景和由來。真正弄明白我們為什么需要這個數據結構和算法,它是為了解決什么樣的問題才被創造出來的。掌握每個數據結構和算法的本質,也就能掌握創新的源頭。
2.鍛煉邏輯思維、算法思維,提高編碼質量、編程能力
邏輯思維,對于一個程序員來說是非常重要的,而算法思維,對于寫出高性能的代碼也是非常關鍵的。專欄不僅僅是數據結構和算法知識的一種填鴨式的灌輸,更加側重于對你邏輯思維、算法思維的訓練。通過72篇文章,跟隨著我的邏輯講解,潛移默化地提高你的邏輯思維、算法思維。
3.教會你如何將算法應用于實戰,如何在實戰中應用算法
我在講解每種數據結構和算法的時候,都會配合一到兩個真實軟件開發中的問題來講解,同時還會配合一到兩個非常考驗你思維的課后思考題,加深你的理解。除此之外,我還通過幾個大的實戰項目,完整的給你展示了,在一個大項目中,如何利用數據結構和算法,來解決問題,提升性能。
可以點擊《數據結構與算法之美》試看專欄內容,下面是專欄目錄:
戳我試讀或訂閱