程序員心底的小聲音[1]

學識都 人氣:2.78W

編程大約有三個境界,新手,高手,和高不成低不就的中手。這三個境界,大致和王國維先生劃定的做學問的三個境界一一對應。 一般來說,如果不經過幾十萬行的代碼的錘鍊(衣帶漸寬終不悔,爲伊消得人憔悴),或者長期在一個高手團隊裏面打磨切磋,那麼無論怎麼樣的理論熟悉,打字熟練,考試全A,編程起來,都應該算是中手。一箇中手如果機緣很好,得到高人親自指點,則能很快成長爲高手,如果沒有這樣的機緣,那就要在"衆裏尋她千百度"這個層次苦苦的求索錘鍊很久,才能"驀然回首".

程序員心底的小聲音[1]

讀書是一種很好彌補沒有高手在場的方法,都說書是最好的老師嘛。可是現實是,高手寫給中手的書很少。在任何行業,適合新手的入門的書很多,適合中手的書就很少。 原因有兩個,一來高手極少願意耐心的的指點成長祕訣,就算寫了,也是蜻蜓點水,因爲這些經驗啊結論啊,都被他們本身提煉成了珠璣,他們覺得最重要的也就是這麼寥寥幾句,也沒有太多的廢話好寫。

而讀者如果沒有類似的`經歷,則看到這些珠璣,只是覺得把玩頗爲有趣而已,極少能有同感。 鮮有高手,能把技術書寫成散文集,如 Brooks 一樣,把經驗教訓和經歷背景等一一道來,並且從這些經歷中抽出一般性的知識。所以,高手的風格一般是浮光掠影概括一下大致自己領會到的幾個原則和教訓。這些寥寥數語的珠璣,對於其他高手來說一看就懂,但是對於中手來說就很難以理解。所以很多高手寫出來的給中手看的書就曲高和寡。二來,中手其實水平差異巨大,偏好也各不一樣,有的或許根本認識不到自己應該走的成長軌跡,有的認爲這些書籍是片面知識,所以把不喜歡的書都給扔垃圾堆了,光撿自己喜歡的書看;有的未必看得上高手的經驗,認爲高手說的那些自己也早就領悟到了。所以,也不喜歡購買這些書籍。這兩個原因,就造成了高手提攜中手的書在市場上很少見到。

我們前面說了,對於中手,特別是在"尋她千百度"這個層次的中手來說,或許本身已經撿到了一些珠璣,或許對於像 《Pragmatic Programmer》 裏面說的那些 Tip,有的是深有同感的。 比如 DRY (Don't Repeat Yourself 不要重複你自己), 基本上大家都知道,可是在實際中(至少我自己)還是不停的一次一次的犯錯誤,做事情不符合 DRY 原則(一次一次犯這個錯誤本身也是一個DRY錯誤,因爲DRY原則要求你對於每種錯誤你只能犯一次)。 讀到的時候深有同感,寫代碼的時候卻忘到 Java 國去了,這還真不是個案,是非常普遍的現象。

能不能讓正確的原則指揮正確的行動本身,其實就是區分是否是高手的一個顯著標志。 試想,兩個都瞭解KISS原則的程序員在一起寫代碼,高手的代碼必然是自然流露出 KISS 的優雅,而中手或許需要旁人提醒和多次重構,才能達到理想的狀態。 出現這個問題的原因很明顯–中手沒有完全內化 KISS 原則,所以尚且不能"運用自如". 內化是一個非常複雜的認知過程,本身涉及到大腦中 mind set 和 paradigm 的切換, 所以必然不是一個簡單的隔夜就能完成的過程,這也就是爲啥能夠"消得人憔悴",但是切換一旦完成,實踐中就會自然流露出這種新的認識,也就是到了一個新的境界,發現燈火闌珊處。

那麼原則和知識的內化這個過程怎麼能夠加速呢?也就是說,怎麼較快的到達高手境界呢? 可以肯定的說,光靠對自己說我"下次一定按照這個原則這樣做"是不行的。認知科學認爲,頻繁的高強度的外部刺激和自主的有意識的反覆提醒是加速內化的兩個重要方法。 第一個方法需要外部環境的支撐。 試想,如果一個程序員不是天天和複雜文本處理打交道,他必然沒有足夠外部刺激來熟悉和內化正則表達式; 如果一個程序員不是天天和極度複雜的大項目打交道,用全自動編譯環境和自動單元測試也顯得無甚必要,所以,除非你正好掉進了一個天天有高強度訓練的環境,否則全靠第一點是不可能的。 尤其是自學一門語言和一門技術的程序員,往往在沒有高強度訓練之前就拿着這些技能投入工作了,因此想成爲某方面的高手,只能採取第二條路,就是有意識的強化實踐和反覆提醒。