為什麼寫程式這麼難?

自學寫程式

【我們為什麼挑選這篇文章】 自學寫程式究竟有多難?又或者說,這一漫長過程中將經歷哪些障礙?這篇文章恐怕講進了許多工程師的心坎裡:想當初就是這樣一路辛苦學會程式的啊!但現在回頭一看,一切都是值得的!(責任編輯:劉庭瑋)

對每一個決心學習寫程式的工程師來說,入坑之前,你也許只是一個「穿著正裝在辦公室裡上班」的人。

你的學習歷程可能是這樣:如同一片樹葉,開始被各種建議拽著走,直到學完了每一個你能想像到的線上課程。

最後,雖然你成功拿下了一份軟體開發的工作,但也對工程師有了新的認知:「那些看似正常的工程師們其實都是些『反社會』的怪人,鬼才知道他們經歷了什麼樣的精神創傷。」

一份常見的程式學習過程:先從 Ruby 著手。很快,開始穿梭在Scala, Clojure和Go等其他語言中了。學習了Emacs,接著是Vim,甚至還了解了Dvorak鍵盤佈局。接著又學習了Linux,甚至還涉獵了Lisp,以及用Python寫過程式,後來一直在命令行駐足半年多。

一起來看一下學習寫程式要經歷哪幾個階段:

階段一:手把手蜜月期

我們從小就聽說過寫程式如何難學的謠言,就像那些拿來嚇唬小孩的無稽之談,最後把孩子們逼去學了社會科學一樣。而另一方面,「學會寫程式」運動的推廣效果確實十分成功,因為它讓人們相信,這一行並沒有那麼高的進入壁壘,而且學習程式毫無壞處。像 Codecademy,Treehouse,以及 Code School 這類機構,以最溫柔的方式告訴普通大眾,一定會教會任何人學會寫程式,並讓其成為一名資深的開發人員。

所以,對於進入寫程式這行抱有過高期望的人,真的沒有辦法去責怪他們。

在很大程度上,這些介紹性的工具手牽手地引導我們穿越那些可怕的參數、條件語句、早期的程式語法階段,確實給了我們很大的幫助。當我們征服了一個又一個遊戲化的挑戰,自信心也開始迅速膨脹。我們覺得最終一定可以做到,這並沒有什麼難的,我們以為自己已經成為一個開發者了。

(圖例縱軸為信心值,橫軸為能力水平,虛線區間展示了蜜月期信心隨能力增長而增長的曲線圖)

但問題是,我們這個時候的狀態正處在「手牽手蜜月期」的階段,我們以為很快就要走到終點了,但其實只是走了一部分,路才剛剛開始……

規劃前方的路

在我們深入了解到第二階段之前,一起來看一看宏觀的局面。在這篇文章裡,會介紹一段典型的程式學習之旅必經的四個階段,以及應該如何應對。我們將了解資源的密度以及所需知識的廣度這兩大要素是如何定義這段旅程的。

就業準備之路可以用下圖曲線表示,它描繪了信心水平如何隨著能力增長而變化。

(圖例「寫程式信心與能力」:縱軸為信心值,橫軸為能力水平,虛線從左至右依次分割出手牽手蜜月期、混沌懸崖、絕望沙漠、令人興奮的上升期四個階段,第5條虛線標誌著工作準備就緒)

下面將會介紹在剩餘的 3 個階段會面臨的獨特挑戰,這是每個階段的核心內容:

1、手牽手蜜月期:這是一個充滿喜悅的、非常容易取得成功的過程,借助精雕細琢的資源,你會解決那些看似很難,但在網絡導師的強大支援下完全是可以攻破的問題。你會掌握基本的語法結構,對於取得的成就很開心。

2、混沌懸崖:這是一個痛苦的自我實現的過程,比蜜月期難過得多,你會覺得憑自己的力量似乎什麼也做不了。你的首要挑戰是不斷地調試,同時你還不太知道該怎麼問正確的問題,來找到一種可以積聚能量的辦法。

3、絕望沙漠:這是一段很長又很孤獨的旅程。在廣大的沙漠裡,沒有一條清晰的道路,每一個方向似乎都是正確的。你總是繞圈圈,對於穿越沙漠所需的資源如飢似渴。請小心來自「海市蜃樓」的誘惑,它好比沙漠裡的汽笛聲,會讓你誤入歧途。

4、令人興奮的上升期:終於,你找到了一條穿越沙漠的路,對於如何構建應用軟體有了自己的理解。但是你的程式碼仍然像是地窖倉庫,脆弱得像紙牌屋。網站的良好運行給了你信心,你掌握了一些有用的模式,朋友們認為你的界面很酷,但你根本不敢直視界面底下糟糕的程式碼,最終你還是不知如何得到「可應用於生產環境」的程式碼。那麼怎樣才能填補這段距離一份真實工作所需能力的空檔?

在過去幾年間,我們採訪了成百上千名優秀的開發人員,反覆聽到了相似的故事。而發布這篇文章的目的,就是希望大家在設計學習路線的時候,既要眼觀六路又要做足計劃,以繞開前人踩過的坑。

階段二:混沌懸崖

當我們在第一階段細數著自己獲得了多少徽章與完成了多少挑戰的時候,自信心和能力也在不斷增長,這被叫做「過度不理智的尖峰」。在這個懸崖險境一面,很多高手都跌在了裡面,從而跌落到「寫程式太難學」的陣營。想要跳躍這個險境,需和第一次坐在電腦前一樣,打開文本編輯器,從 0 開始,在沒有任何「瀏覽器內置編輯器」、搭建好的程式碼、或是暗示性的幫助下,嘗試創建一個項目。

不要再想著上幾個特別的教程來拓展能力,沒有任何一個人可以在不飛離對面的前提下觸及天空,必須要要經歷在一張空白文本文件上施展魔