数据结构与算法之美01-开篇词
開篇詞 | 從今天起,跨過“數據結構與算法”這道坎
? 作者是王爭,畢業于西安交通大學計算機專業。現在回想起來,本科畢業的時候,我的編程水平其實是很差的。直到讀研究生的時候,一個師兄給了我一本《算法導論》,說你可以看看,對你的編程會很有幫助。
? 沒想到,從此我對算法的“迷戀”便一發不可收拾。之后,我如饑似渴地把圖書館里幾乎所有數據結構和算法書籍都讀了一遍。
? 我常常邊讀邊練。沒多久,我就發現,寫代碼的時候,我會不由自主考慮很多性能方面的問題。我寫出時間復雜度高、復雜度高的垃圾代碼越來越少了,算法能力提升了很多,編程能力也有了質的飛躍。得益于此,研究生畢業后,我直接進入 Google,從事 Google 翻譯相關的開發工作。
? 這是我自己學習數據結構與算法的經歷,現在,你可以想想你的情況。
-
是不是從學校開始,你就覺得數據結構難學,然后一直沒認真學?
-
工作中,一遇到數據結構這個坑,你又發自本能地迅速避讓,因為你覺得自己不懂,所以也不想深究,反正看起來無關大局?
-
當你想換工作面試,或者研究某個開源項目源碼,亦或者和團隊討論某個非框架層面的高可用難題的時候,你又發現,自己的基礎跟不上別人的節奏?
? 如果你是這種情況,其實你并不孤獨,這不是你一個人遇到的問題。工作十年間,我見過許多程序員。他們有著各種各樣的背景,有很多既有潛力又非常努力,但始終無法在自己現有水平上更進一步。
? 在技術圈里,我們經常喜歡談論高大上的架構,比如高可用、微服務、服務治理等等。鮮有人關注代碼層面的編程能力,而愿意沉下心來,花幾個月時間啃一啃計算機基礎知識、認認真真夯實基礎的人,簡直就是鳳毛麟角。
? 我認識一位原來騰訊 T4 的技術大牛。在區塊鏈大潮之前,他在騰訊工作了 10 多年,長期負責手機 QQ 后臺整體建設。他經歷了手機 QQ 從誕生到億級用戶在線的整個過程。后來他去了微眾銀行,有一天老板讓他去做區塊鏈。**他用了不到半年時間,就把區塊鏈的整個技術脈絡摸清楚了。**現在,他是微眾銀行的區塊鏈負責人,微眾科技創新產品部的老總。你說厲害不?你可以花半年時間就能精通一個新的領域嗎?為什么他就可以做到?
? 我覺得這其中最重要的就是基礎足夠扎實。他曾經跟我說,像區塊鏈、人工智能這些看似很新的技術,其實一點兒都不“新”。最初學編程的時候,他就把那些基礎的知識都學透了。當面臨行業變動、新技術更迭的時候,他不斷發現,那些所謂的新技術,核心和本質的東西其實就是當初學的那些知識。掌握了這個“規律”之后,他學任何東西都很快,任何新技術都能快速迎頭趕上。這就是他快速學習并且獲得成功的秘訣。
? 所以說,基礎知識就像是一座大樓的地基,它決定了我們的技術高度。而要想快速做出點事情,前提條件一定是基礎能力過硬,“內功”要到位。
? 那技術人究竟都需要修煉哪些“內功”呢?我覺得,無外乎就是大學里的那些基礎課程,操作系統、計算機網絡、編譯原理等等,當然還有數據結構和算法。
? 可是,我們都知道,像《算法導論》這些經典書籍,雖然很全面,但是過于理論,學起來非常枯燥;而市面很多課程大多缺失真實的開發場景,費勁學完感覺好像還是用不上,過不了幾天就忘了。
? 所以,我嘗試做一個讓你能真正受用的數據結構與算法課程,希望給你指明一個簡潔、高效的學習路徑,教你一個學習基礎知識的通用方法 。那么,關于專欄內容,我是怎樣設計的呢?
我根據自己研讀數十本算法書籍和多年項目開發的經驗,在眾多的數據結構和算法中,精選了最實用的內容進行講解。
我不只會教你怎么用,還會告訴你,我們為什么需要這種數據結構和算法,一點點幫你捋清它們背后的設計思想,培養你舉一反三的能力。
對于每種數據結構和算法,我都會結合真實的軟件開發案例來講解,讓你知道,數據結構和算法,究竟應該如何應用到實際的編碼中。
為了由淺入深地帶你學習,我把專欄分成四個遞進的模塊。
入門篇
時間、空間復雜度分析是數據結構和算法中非常重要的知識點,貫穿整個專欄的學習過程。但同時也是比較難掌握的,所以我用了 2 節課來講這部分內容,而且還舉了大量的實例,讓你一邊學一邊練,真正能掌握復雜度分析,為后面的學習鋪路。
我希望通過這一模塊,你能掌握時間、空間復雜度的概念,大 O 表示法的由來,各種復雜度分析技巧,以及最好、最壞、平均、均攤復雜度分析方法。之后,面對任何代碼的復雜度分析,你都能游刃有余、毫不畏懼!
基礎篇
這部分是專欄中篇幅最大的內容,也是我們學習的重點,共有 26 節內容,涵蓋了最基礎、最常用的數據結構和算法。針對每種數據結構和算法,我都會結合具體的軟件開發實例,由淺入深進行講解,并適時總結一些實用“寶典”,保證你印象深刻、學有所用。
比如遞歸這一節,我會講到,為什么遞歸代碼比較難寫?如何避免堆棧溢出?如何避免遞歸冗余計算?如何將遞歸代碼轉化為非遞歸代碼?
高級篇
這部分我會講一些不是那么常用的數據結構和算法。雖然不常用,但是這些內容你也需要知道。設置這一部分的目的,是為了讓你開拓視野,強化訓練算法思維、邏輯思維。如果說學完基礎部分可以考 80 分,那掌握這一部分就能讓你成為尖子生!
實戰篇
我們整個專欄都是圍繞數據結構和算法在具體軟件實踐中的應用來講的,所以最后我會通過實戰部分串講一下前面講到的數據結構和算法。我會拿一些開源項目、框架或者系統設計問題,剖析它們背后的數據結構和算法,讓你有一個更加直觀的感受。
人生路上,我們會遇到很多的坎。跨過去,你就可以成長,跨不過去就是困難和停滯。而在后面很長的一段時間里,你都需要為這個困難買單。對于我們技術人來說,更是這樣。既然數據結構和算法這個坎,我們總歸是要跨過去,為什么不是現在呢?
我很感激師兄當年給我的那本《算法導論》,這是我人生中為數不多的轉折點之一。沒有那本書,也可能就沒有今天的我。我希望這個專欄也能成為你的一個人生轉折點。
我希望,通過這個專欄,不僅能幫你跨過數據結構與算法這個坎,還能幫你掌握一種學習知識和技能的方法,幫你度過職場甚至人生的重要時刻!一起加油吧!
王爭GitHub:
- source code : https://github.com/wangzheng0822/algo
總結
以上是生活随笔為你收集整理的数据结构与算法之美01-开篇词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员智力面试题(一)
- 下一篇: 【C语言项目】贪吃蛇游戏(上)