考試成績好的同學,我們習慣稱之為“學霸”。不過,還有一類人,他們是因為對考試技巧很有研究,而取得了高分。這類人雖然通過技巧取得了高分,但對知識缺少系統的理解和靈活的運用,只能稱得上是“學酥”。
#### 酥者,看似很硬,一碰即碎
步入社會后,你會發現人生的挑戰,遠遠不只是卷面的寫寫畫畫。要想在不同類型的挑戰、持續不斷的挑戰中獲勝,單單靠那些花里胡哨的技巧是遠遠不夠的。以前有一位老師曾跟我說過,“你取得成績的天花板,取決于你對事情的認知”。
下面我們舉個例子,一起探討一下這個話題。近年來,直播帶貨出現了紅利,我國一年因直播帶貨創造的 GMV 可達萬億元。雖然巨大的市場擺在這里,但對你我而言,很難通過開直播去養活自己。原因非常簡單,我們從未涉足過直播,對主播的工作方式、對直播行業的運轉規律并不了解。
試想一下,我們把直播行業換成互聯網公司,把主播換成程序員,反過來看看程序員的成長。很顯然,程序員必須對技術原理有充分的理解和認知。只有這樣,你才能成為程序員界的李佳琦。那么,到底該怎么做,才能對技術原理有充分的理解和認知呢?
我認為是“勤修內功”,具體而言:
* 勤,即次數多,可理解為是持續不斷的意思。
* 修,即煉,可理解為預習、學習、復習。
* 內功,即認知,是你對這項技術的理解深度。
相對而言,外功更像是一些技巧性的東西。從字面理解,勤修內功就是不斷溫習技術原理,持續加強技術認知。
#### 勤修
子曰:“學而時習之,不亦說乎。”我們需要通過不斷地復習來加深自己對所學知識的理解。第一次學習,你可能會覺得書中所述的內容很好;第二次學習,你可能又會發現有些地方作者話中有話,并沒有過度展開;第三次學習,當你的理解深度不亞于作者時,也許你還會發現,這個作者的水平一般般,很多關鍵細節的表述比較含糊。在經過了多次學習之后,你對作者的態度可能會從崇拜轉變為質疑,這個過程就是你的成長。
#### 內功
對于《重學數據結構與算法》專欄而言,重要的內功就是如何降低復雜度。我們從復雜度講起,講述了利用算法思維和設計數據結構來降低復雜度的各種方法。這些算法思維和數據結構,就是你通過這門課學會的內家功夫,也是你作為程序員的行業競爭力,更是你未來吃飯的家伙事兒。
關于程序員的行業競爭力,我們多啰唆幾句。請你思考這樣一個問題,對于兩個不同的工程師,是什么因素讓一個人收到的 offer 源源不斷、薪酬百萬,而另一個人只能忍辱負重、處處碰壁呢?
從結果來看,一定是兩個人的投入產出比不同。然而,你有沒有思考過,又是什么因素造成了兩個人投入產出比的不同呢?
其實,是能力。一個人能力的高低,決定了他獲得業績的多少。能力包含方方面面,有的能力可以快速學會,比如騎自行車,大多數人一周就能學會,因此這并不屬于競爭力。而有的能力則是慢功夫,比如你對數據結構的理解能力、你的算法能力以及技術選型的判斷力等等,這些都是經過長期積累、反復學習,才能有所收獲。
當你有了扎實的基本功之后,再面對新鮮、復雜的新知識時,會更容易理解,也就更容易快速學會。反之,則是學什么都很吃力。例如,我看到很多人在研究機器學習、AI 算法上都比較吃力,本質原因是你高等數學的基本功不過關。
因此,你的短期競爭力可能是那些花里胡哨很快就能學會的技能,而你的長期競爭力一定是來自你的內功,也就是數據結構與算法這門學科的基本功。
#### 寫在最后
不知不覺,五個模塊 21 個課時的內容已經全部更新完畢。不知你是否還記得我在開篇詞中提到的設計這門專欄課程的初衷?
我當時這樣寫道:“通過本專欄的學習,我希望幫助你擺脫盲目刷題與漫無目的地學習方式,更加高效地掌握數據結構與算法知識,真正掌握程序開發、代碼優化的方法論,完成從掌握理論知識到解決實際問題的轉變。”
在課程設計的過程中,我時刻提醒自己,要站在你們的角度做內容。用盡量少的文字,把一個問題講清楚。這段時間,我一直關注大家的留言,也在處理大家在留言中提出的問題。在這個過程中,我看到了很多真實的用戶反饋和學習體驗,這讓我收獲良多。
數據結構與算法知識雖然復雜難懂,但其實想要學好也并沒有想象的那么困難。它有通用的解題思路和宏觀層面的方法論,重點在于學以致用。因此,我在每個課時都設置了一道練習題,幫助你鞏固本課時的內容,檢測自己的學習成果。只有不斷地發現問題、提出問題、解決問題,才能真正將書本上的知識活學活用。輸出是對掌握最好的檢驗。如果你還沒有完成練習題,希望你回過頭來逐一攻破。
當然了,我更希望你通過本專欄的學習,已經具備將知識靈活運用到實際工作中的能力。如果你還有哪些地方不明白,歡迎在留言區留言提問。雖然課程完結了,但我還會持續關注大家,為你答疑解惑。希望正在讀這篇文章的你能夠學以致用、學有所成。
- 前言
- 開篇詞
- 數據結構與算法,應該這樣學!
- 模塊一:代碼效率優化方法論
- 01復雜度:如何衡量程序運行的效率?
- 02 數據結構:將“昂貴”的時間復雜度轉換成“廉價”的空間復雜度
- 模塊二:數據結構基礎
- 03 增刪查:掌握數據處理的基本操作,以不變應萬變
- 04 如何完成線性表結構下的增刪查?
- 05 棧:后進先出的線性表,如何實現增刪查?
- 06 隊列:先進先出的線性表,如何實現增刪查?
- 07 數組:如何實現基于索引的查找?
- 08 字符串:如何正確回答面試中高頻考察的字符串匹配算法?
- 09 樹和二叉樹:分支關系與層次結構下,如何有效實現增刪查?
- 10 哈希表:如何利用好高效率查找的“利器”?
- 模塊三:算法思維基礎
- 11 遞歸:如何利用遞歸求解漢諾塔問題?
- 12 分治:如何利用分治法完成數據查找?
- 13 排序:經典排序算法原理解析與優劣對比
- 14 動態規劃:如何通過最優子結構,完成復雜問題求解?
- 模塊四:面試真題 = 實踐問題的“縮影”
- 15 定位問題才能更好地解決問題:開發前的復雜度分析與技術選型
- 16 真題案例(一):算法思維訓練
- 17真題案例(二):數據結構訓練
- 18 真題案例(三):力扣真題訓練
- 19 真題案例(四):大廠真題實戰演練
- 特別放送:面試現場
- 20 代碼之外,技術面試中你應該具備哪些軟素質?
- 21 面試中如何建立全局觀,快速完成優質的手寫代碼?
- 結束語
- 結束語 勤修內功,構建你的核心競爭力