爲何成爲一名程序員這麼難?

有人說,每一個看起來與正常人無異的程序員,其實都是在學習程序開發的途中熬過、壓抑過、並且創傷過的反社會人士(sociopaths)。 程序員

在學習程序開發的過程當中,經常看到網絡上的「甘苦談」,也聽過身邊前途一片光明的程序員朋友們分享過學習歷程,總以爲不一樣的人、一樣的故事卻不斷的重複,像是狼叫聲般,從遠處傳來一聲又一聲的迴響。 面試

最近讀到Erik Trautman在Viking Code School博客中的文章《Why Learning to Code is So Damn Hard》,文章裏將學習寫程序(Learn to Code)的過程分紅了四個階段,並解釋了兩個影響各階段造成的關鍵因素「資料密度」以及「知識廣度」,最後集合成這張圖: 算法


這篇文章頗有趣也十分符合我所聽聞的那些「程序員辛酸史」,所以決定將這四個階段介紹給你們,但願程序初學者們在進入這條不歸路以前,眼睛要放亮、計劃要周詳,清楚明白在前方等大家的是什麼,作好徹底心理準備吧! 網絡

接下來我將介紹從剛開始寫程序到成爲一名程序員,Erik Trautman所歸類必經的四個階段: 架構

想成爲程序猿,請作好準備迎接這段必經之路 框架

先假設你學寫程序的終極目標是要靠這行吃飯––進入相關領域工做或是自行創業,你是否作好萬全準備能夠從你的信心(Confidence)跟能力(Capability)散佈圖中看出: 編輯器

隨着你具有的知識跟技能愈來愈多,你的自信心也會隨之而增減,最後達到能力夠信心足的「Job Ready」點。在Job Ready前則能夠分紅四個階段: ide

第一階段:手牽手心連心蜜月期 工具

剛開始進入程序開發界的朋友們老是懷抱着遠大的夢想跟抱負,這不能怪他們,畢竟一方面,你們小時候聽多了「寫程序很難」、「電腦科學很硬」這種傳聞,從一開始就把很多人嚇去念社會科學(…沒有冒犯社會科學專業人士的意思);另外一方面,「全民寫程序」這項運動實在太成功,坊間許多工具跟學習平臺讓程序開發變得超好理解、上手容易,像是Codecademy、Treehouse、跟CodeSchool等線上平臺,或是麻省理工的Scratch語言、Google的Blockly等程序語言工具,成功地營造了人人都能寫程序並且靠這行吃飯的假象形象。 post

忽然間咱們的問題再也不是「困難度」,而是「比天高的指望」跟「比地大的夢想」。

最重要的是,以上提到的這些工具跟平臺實在太有用,帶領毫無程序開發經驗的初學者們一步步認識變數、條件語句、程序語法。當你一路過關斬將把程序語言基本邏輯跟語法學會的同時,你就會超有成就感、自信心大增,開始有「原來我也行嘛」、「寫程序也不過就這樣」的感受,基本上以爲本身已經跟「程序員」相差不遠了。

這個階段將充滿喜悅與成就感,在各類線上工具、網絡教學的幫助下,你享受着用指尖下指令、電腦就能準確執行的主導感,你讚歎着程序語言的神奇與強大之處,從HelloWorld到簡單迴圈,每完成一道練習題你的成就感又增長几分,不少人會在這個時候認爲本身已經愛上了電腦科學(並且以爲電腦科學也愛他們),正處於能力提高,自信心也大增的「蜜月期」,這時你可能會以爲世界真美好、人生大概就會今後飛黃騰達,但我得殘酷的告訴你:這段旅程纔剛開始而已。

第二階段:困惑之崖

就跟大部份的情侶/新婚夫妻同樣,蜜月期會結束,你會慢慢發現「相愛沒這麼簡單」。做業難度一增長(重點是程序碼長度也會跟着增長),程序錯誤警告就頻頻出現,開始不停的除錯(Debug)。並且一般最大的挑戰是——當錯誤出現時,你根本不知道錯在哪裏、該問什麼問題。你的學習進度在這個階段開始停滯不前,像路走到一半忽然遇到懸崖而無路可走般,開始對以前的認知感到困惑,跟着信心大失。

一般這個階段會在你完成線上的基礎教學後發生。以製做我的網站(Portfolio Website)爲例好了,W3School平臺提供了一系列HTML、CSS、JavaScript等網頁製做相關的程序教學,讓初學者一單元一單元的學習語法跟功能,每單元還有例子示範用法,看似好簡單!所有跟着學一遍以後,你準備好動手打造本身的網站,打開文字編輯器……,而後寫沒兩行就卡關了。

也許靠Google搜尋可讓你撐到完成網站基本架構,但當你想實現本身的創意、加上我的化的設計時,網絡上的回答跟示範老是和你內心所想的不太同樣,因此程序碼不能全抄,然而左拼右湊出的程序碼看似可行但實際上差得可遠了!恰恰還不知從何debug起,可能投資了大半的時間程序碼還「有減無增」,毫無進展可言。

這是一個尤爲挫折的必經階段,想成爲Programmer就必須經歷這個關卡,勇敢跳下懸崖、逼本身展翅高飛(固然在這個階段摔死的小雛鳥數量十分可觀)。但即便你消滅了無數的bug,終於完成了幾個小專案後,你也別高興得太早,將來的路仍是很是長遠並且挑戰性更高!對於想進入這行吃飯的人來講,「困惑之崖」一般是你決定是否全心全意進入這一行的轉折點,而當你投資全部的時間心力在寫程序上時,你將進入最讓人心灰意冷的第三階段。

你可能會很好奇,到底爲何牢牢相連的第一階段(蜜月期)跟第二階段(困惑之崖)會差這麼多?若是你也正在經歷以上兩個階段,你要知道,形成階段轉換的緣由跟你一點關係都沒有,並不徹底是由於你比別人笨或比別人不努力,而是由於「資源密度」改變的緣故。

因素1:資源密度Resource Density

在第一階段中有提到,當零經驗零基礎的你開始學習寫程序時,身邊有着無數的資源跟工具等着你來運用。到Google搜尋打「Learn to Code」你會查到超多程序學習平臺、教學文、教學影片、甚至經驗談,讓你感到萬分的親切及溫暖,其「手牽手心連心蜜月期」的稱謂當之無愧。

然而到了第二階段時,這些教學資源的數量將大爲驟減,任何一個剛脫離初學者的程序學習者都可以證明我此言不假。初學者一開始遇到的障礙都是「通常常見問題」,教學文、教科書裏就會註明了;後期因爲做業難度以及我的需求,問題才漸漸複雜起來,要從StackOverflow或是一些程序人的博客中去找尋解題線索。一直到在你遇到的問題已經棘手到網絡上根本找不太到線索的時候,你便進入了下一個階段。

第三階段:絕望沙洲

要了解進入第三階段的關鍵,就要了解另外一項影響着各階段變化的重要因素:知識廣度。

因素2:知識廣度Scope of Knowledge

「知識廣度」也就是度過每一個階段你所必備的知識領域範圍。剛開始時你須要吸取的知識很集中,無論用哪一種程序語言、無論功能是什麼,首先都要學會變數型態、宣告語法、迴圈及條件判斷式等等,這時隨便請一個工程師教你都是同樣的,由於「重要須知」就是這幾點而已。

然而學完基本功後,你所需的知識領域會一會兒擴展不少,像是開始學習物件導向或是着重演算法的效率,你會須要紮實的電腦科學背景來應付,並且每個應用均可以牽扯出更多的變化…相信我,這不是幾堂MOOC課程就能救得了你的。

在這個時期,萬能的Google也只會丟給你更多你不懂的東西,根本查不到相關的線索!最糟的是你根本不知道你什麼不知道。(You don’t know what you don’t know.)。因而「學也學不完、越學越不懂」的無力感排山倒海而來,進入最最難熬的第三階段––「絕望沙洲」。

這個階段顧名思義像是在橫越沙漠般,是一段很是長且寂寞的旅程,讓你有不知何年何月才能走出來的絕望感。在無邊無際的沙漠裏,根本搞不清楚東西南北,資料查了半天毫無斬獲,還不時被海市蜃樓(錯誤資訊或看似可行的解決方案)給誤導,搞得灰頭土臉、頭昏眼花,在這個階段曬死、渴死、絕望死的有爲青年更是不可勝數。

但只要在絕望沙洲裏熬下去,接下來就會自在許多了!累積足夠的經驗,程序的錯誤就會大量減小、達到必定知識水準,就能準確判斷問題的方向切入核心,工做效率於是有所增進,知識廣度也會慢慢聚焦。等你拖着一身的疲憊終於走出這荒漠時,就進入了最後的階段。

第四階段:創傷後的恢復期

踩着千萬人的屍體成功橫越了沙漠,你的自信心開始回升,Google功力也能夠說是神人的等級。到了這個時候,Hacker News的新聞以及超硬的MOOC課程都不成問題,你也選定了某個程序語言跟框架來專研,並且有能力製做出能夠正常運做的應用程序了。

但你內心深處總有着隱隱的不安,以爲程序能「用」但其實代碼凌亂無章,程序員的頭銜下實際上是誤打誤撞進這行的半調子,雖然你彷佛具有了一切就任條件,卻總懼怕面試官發現你根基薄弱的電腦知識…你正在經歷「創傷後的恢復期」。

在飛越困惑之崖、橫越絕望沙洲以後,你應該已經學會該學的、作了該作的,成爲一個名符其實的程序員,卻總以爲自已資質平庸根基不穩,雖然有成功打造出一個個專案而信心回升,但總是感嘆本身與心目中「專業程序員」仍有一大段差距…,這些都是「冒牌者症候羣」(Impostor Syndrome)在做祟!

在這創傷後的恢復期中,你可能會常常自我懷疑,但只要順着這波效率提高信心也回升的潮流繼續努力,在能力與自信達到一個程度時…恭喜你:You Are Job Ready!

相關文章
相關標籤/搜索