技術的成長曲線

發表於2017-04-10

小李畢業後在一家公司做軟體工程師,轉眼間一年多的時間已經過去了。

回想剛畢業那會,他是懷著無比忐忑的心情進入了這家公司的技術部門。各種新奇的開發工具,叫不上名字的眾多軟體框架,龐大的程式碼庫,井然有序的工作流程,都是小李以前在學校裡不曾遇到過的,這讓他感到了前所未有的壓力。於是,在開始的那半年,小李就像一株久旱的禾苗遇到了雨水,拼命地吸收著工作中遇到的每一點知識。他學習新的程式語言,學習新的開發工具,學習除錯和解bug的技巧,也學習處理各種棘手的業務邏輯。雖然每天工作很累,但每天都是滿滿的收穫。

而現如今,小李儼然是一名很有經驗的老手了。對於工作中一般的問題,他都能遊刃有餘地加以解決,無非是把現有的一些內部介面重新組合利用,或者按照原有的套路重新設計改進一番。應付工作既然比以前輕鬆了許多,工作的壓力也就顯得沒有那麼大了。於是小李平常也能抽出時間來上上網,看看美劇,或者打打遊戲,有時候也帶著女友去看場電影或者球賽。

然而時間長了,小李心裡卻隱隱多了一絲不安。他再也找不到開始那種突飛猛進的爽快了,而且當對工作越來越熟悉之後,工作本身開始變得枯燥、沒意思。他決定花更多精力在自己的技術提高上,但卻感覺無從下手,很難突破。每次完成一個新的開發需求,也只是不斷重複舊有的東西而已。

成長曲線和四大階段

小李的情況其實非常典型。很多技術人員在工作一兩年之後,對工作周圍的事情都駕輕就熟了,就可能會陷入第一個瓶頸期,再難突破。

為了能更清晰地分析技術成長過程中出現的各種情況,我們來對技術的成長曲線做一個總結。如下圖:

技術的成長曲線

技術的成長過程並非勻速線性的,而是分階段的。每個高速增長的突破期後面,都跟著一個平緩的增長期,可以稱為舒適期,也可以稱為瓶頸期。舒適期是針對過去而言的,而瓶頸期的說法則更著眼於未來。

一般來說,突破的過程,絕非輕而易舉,而且有可能伴隨著陣痛。它需要我們付出十分的心力,甚至承擔一定的風險,做成一些原本超出自己能力極限的事情。而一旦過了突破期,各種技能在這個層次上融會貫通,就會給我們帶來極大的自信和成就感。這個時候,處理同一層面的問題,逐漸變得輕車熟路,於是進入了舒適期。

舒適期對人有一種天然的吸引力,我們只要待在這個階段,就能獲得最大的安全感,儘量少地遭受不確定性的折磨。很多人會選擇待在這個區間,不再走出一步。而另一些人則會對這一階段的緩慢增長產生焦慮,於是舒適期變成了瓶頸期,從而引發下一輪的突破。

以每一次大的突破為分界,我們可以將技術人員的成長粗略劃分為四大階段:新手、熟手、專家、宗師(開創者)。

新手經過半年到一年的工作經驗,如果能成功適應這份工作,基本就能有所突破,變成一個熟手。熟手的特點是,能對現成的工具充分利用,勝任大部分日常工作。在技術水平的表現上,他了解大部分的技術概念,但不一定理解真正的含義;在他的眼中,技術還無法自成體系,能理解到的知識架構還有所殘缺。他解決問題所依靠的,更多是經驗而非縝密的邏輯。前面提到的小李,就處於這個階段。

熟手再向上突破一層,則成為技術專家。專家,在某個領域擁有足夠全面、系統而深入的知識儲備,對於技術上的疑難雜症,有能力深入到足夠的層次,指出問題的癥結所在;另一方面,專家還應該能夠完成對具體問題的抽象,擁有“造輪子”的能力。在專家的眼中,技術的黑盒子被開啟,知識點也不再是孤立存在的,而是相互枝連,構成一個完整的邏輯系統。

而真正達到宗師這一級別的,整個世上也寥寥無幾。他們是真正的開創者,能夠引領一個技術時代。什麼樣的人才配得上“宗師”這個稱呼呢?比如Dennis M. Ritchie(C語言和Unix之父),再比如Linus(Linux核心的發明人)。

但就像前面的技術成長曲線圖所描繪的,技術的成長階段並沒有一個上限。無論你處在哪個階段,前面仍然存在無限的上升空間。

郭靖的進階之路

近日細讀金庸老爺子的《射鵰英雄傳》,忽然意識到,郭靖乃是金庸武俠中天資最為魯鈍的一位主人公。然而,郭靖從一個普通少年,終成長為一代大俠,這一過程,正好暗合了前面講到的技術成長曲線。

郭靖從六歲開始,在蒙古大漠接受江南六怪傳授武功,花了整整十年。後又得全真教掌教馬鈺傳授內功一年有餘,武功初入門徑,獲得了武學上第一個突破(熟手期)。處於這個階段的郭靖,在武功上與同齡的楊康不相上下。

郭靖在武學上的第二個突破,起因於兩個事件:一個是“北丐”洪七公傳授他降龍十八掌,另一個是老頑童騙他背誦《九陰真經》。經過一番歷練,在華山頂上,他已經擁有了分別與“東邪”和“北丐”過手三百招而保持不敗的戰績。此時的郭靖,已經是高手中的高手了(專家)。這第二次突破,他只用了兩年有餘。

而郭靖的第三個突破,已經是在《射鵰》之後了,終於成長為一代武學宗師。

為什麼天資並不出眾的郭靖,卻能夠接連取得突破呢?至少兩個原因不容忽視。一個是勤奮,“人家練一朝,我就練十天”,所以根基打得好;另一個原因是他恰好學對了東西,降龍十八掌和《九陰真經》都是正宗武學,有幸學到自然是突飛猛進。

突破的要領

技術成長的關鍵在於突破。

然而,在技術成長的路上,越到後面,突破的難度就越大。大部分新手,只要保持足夠的勤奮,總能達到熟手的程度。但很多人卻止步於此,他們或流連於舒適期的誘惑不肯走出來,或長期卡在瓶頸期卻找不到突破的出口。能夠突破達到專家這一階段的技術人員,已經足夠成為各大公司技術部門的翹楚了。而要達到宗師的級別,則不光靠個人的努力,還需要時代的機遇才有可能。

那麼,為了達到真正的突破,有哪些因素是我們需要重視的呢?

第一,根基。

在接觸一門新技術或者一個新的技術領域時,良好的基礎有利於我們快速突破,抵達下一個階段。不同技術之間,基礎卻是相通的。比如,對於計算機軟體學科的基礎知識——資料結構和演算法,處於熟手期的程式設計師可能多半會認為它們在工作中根本沒有用。這是因為這個階段的技術人員主要靠孤立的經驗解決問題,一些基礎的知識自然就用不上。但對於技術專家層次的人來說,資料結構和演算法卻是在系統設計的很多方面潛移默化地發揮作用。對於其它計算機基礎學科,這個道理也同樣適用。

再比如,現在人工智慧和機器學習技術比較火,似乎全民都在學習。但要想學好這些技術,至少應該對於微積分、線性代數、概率論、統計學等數學知識有比較紮實的基礎,才能走得更遠。

第二,外因,一個不疾不徐的環境。

過於寬鬆的環境自然不利於人的進步,而盲目的緊張也不利於人的成長。

突破的過程需要付出巨大的精力,所以需要投入足夠的時間去從容地完成。我們大概都經歷過這樣一種場景:新產品上線在即,但還有很多問題需要解決。如果距離預定上線時間還有數天,那麼我們可以相對從容地用比較優雅的方式來解決這些問題,並做一些長遠的打算;但如果我們碰到的情況是,兩個小時以後就要上線了,那麼我們多半會想一些歪點子來規避這些問題。

產品開發和技術優化,有時相輔相成,有時又互相矛盾。如果你所處的工作崗位,只是要求你不停地修改業務流程,盲目地試錯,那麼,可能公司根本沒有給你留出技術突破的空間。試想,一個主旨不清,功能點做了新的就扔了舊的,而沒有長遠的目標,也不去持續優化體驗,這樣的一個產品,又怎能有持續的生命力呢?

第三,正確(正宗)的學習資料。

新手剛開始工作的時候,通常只要看一些入門教程(Tutorial),跑幾個Demo,掃除了表面上的技術疑問點,再針對業務程式碼向老員工請教一番,基本就能開始工作了。然後一邊編碼,一邊查閱所需要的API Reference,時間長了,經驗和技巧足夠多了,就自然變成熟手了。

而從熟手向專家的突破,則需要系統地去補習知識架構。技巧應該建立在對於普遍規則的理解之上。這裡不得不提及Spec,它是涉及某項技術的完備的、系統的描述,包含該項技術涉及到的方方面面(具體參見我的另一篇文章《技術的正宗與野路子》)。在奔向技術專家的路上,閱讀Spec,是不可逾越的一道功課。《射鵰》中郭靖的武功突破,很大程度上就是因為他閱讀了《九陰真經》這份大大的Spec。當然,除此之外,你可能還需要通讀重要部分的API Reference以及Source Code。

技術專家必然將原始文獻(官網Spec、論文等)作為知識的第一來源。相反,跟著某人的部落格去系統地學習某方面的技術,是要冒有很大風險的,還需慎重選擇。

最後,要想成為技術上的一代宗師,則需要更高的抽象,做出完全創造性的工作。這份工作不僅僅是閱讀Spec,解決具體的問題了,而是創作Spec,開創全新的天地。

第四,獨立思考,不要自我設限。

現在,很多人喜歡把技術好的人喊作“大神”。這自然是代表一種尊重,很多聽的人也很受用。

但是,“神”的稱呼暗含了一層意思:神是無法超越的,是普通人學不來的。這是人們在潛意識裡劃出的一道鴻溝。所以,我就不太喜歡類似這種稱呼。

很多人碰到問題就喜歡找身邊“大神”去問,但殊不知問再多問題,你仍然無法真正地有所提高。普通人和“大神”之間真正的鴻溝在於,能否獨立思考和解決問題。


在追求技術成長的路上,不可能總是一帆風順。我們不免有時沮喪,有時欣喜。

人生苦短,有人窮其一生,就是想要達到理想中的那個狀態。但不管結果如何,當我們青春不再的時候,只求問心無愧。

(完)

相關文章