程序修行從“拔刀術(shù)”到“萬劍訣”
程序修行路上走了一段時間,終于成為了高級程序員,然后就該碰到瓶頸了。近來就有高級程序員和我聊起這個瓶頸問題,這正是《兩種增長類型》這篇文章中提到的「對數(shù)增長」的瓶頸期。
在這個對數(shù)緩慢增長的瓶頸期,我也曾困擾許久。在摸索嘗試了一段時間后,慢慢走出下面這樣一條路徑,下面我想用點形象的類比來說明。
拔刀斬
拔刀術(shù)來自日本古武道,其核心思想便是一擊必殺,利用瞬間高速的拔刀攻擊對敵人造成出其不意的打擊。講究的是快,也即速度和鋒利度。
武士不斷修行拔刀術(shù),力求一擊殺敵,而程序員學習和練習編程的過程也是類似的。最終,你的編程技到達了一個什么樣的程度,就是看它的鋒利度。面臨一個程序問題能否一刀見血,一擊必殺。
剛?cè)腴T的程序員上線發(fā)布碰到了一個問題,抓耳撓腮、冥思苦想、加班加點終不得解。于是跑來向你這個高級程序員請教,此時時鐘指向了凌晨一點。你放下手中剛泡好正準備吃的方便面,一支燃燒著的半截煙頭掛在你的指尖。你猶豫了一下:是猛抽兩口還是滅掉煙頭去處理這個緊急問題?最終你終究不舍的把半截煙頭小心的放在方便面盒邊沿,再用塑料的方便叉把面蓋和煙頭一起固定住。
然后,你挽起了袖子走到這個年輕程序員的電腦前,迅速掃了幾眼報錯的錯誤日志,再調(diào)出你心愛的 vi 編輯器,噼里啪啦的改動了幾行代碼,保存、關(guān)閉、再重新構(gòu)建、發(fā)布。電腦黑底白字的界面不停的滾動著,你已站起身向散發(fā)著兩種味道的方便面走去,并回頭輕輕對年輕程序員說了聲:可以了。
這就是你向年輕程序員展示的你的拔刀術(shù),問題一斬而絕。好吧,這是一種詭異的優(yōu)雅,似乎任何問題對于電影里的程序員,在電腦前噼里啪啦敲上幾行代碼都能解決。現(xiàn)實中大部分時候都比看上去更困難一些,真實世界的拔刀術(shù)和劍心(動漫《浪客劍心》主角)的「天翔龍閃」相比,終歸顯得笨拙許多。
在我們追求「天翔龍閃」的境界時,看上去并不遠,卻越走越慢了,似乎永遠也走不到,然后我們知道這就是進入了瓶頸區(qū)。
御劍術(shù)
這個招數(shù)的類比來自好多年前(初中)玩過的一個電腦游戲——《仙劍奇?zhèn)b傳》。如果過去面臨問題你需要拔刀解決,那這里的刀就是你的知識、技能和經(jīng)驗。那御劍術(shù)里的劍又是什么?
在一篇關(guān)于高級程序員的文章中,提出了一個組合三角的觀點,先看下面這張圖:
從編程入門到成為高級程序員,你需要得到的幫助和指導越來越少,而你能提供的幫助和指導應(yīng)該越來越多。所以前面那個場景中,作為高級程序員的你更理想的做法是去指導年輕程序員如何解決問題的思路,而不是自己拔刀,唰唰兩下搞定。