為什么成為一名工程師這么難 —— 學Coding的必經之路

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

  英文原文:Why Learning to Code is So Damn Hard

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

  在學習程序開發的過程中,常常看到網絡上的「甘苦談」,也聽過身邊前途一片光明的工程師朋友們分享過學習歷程,總覺得不同的人、同樣的故事卻不斷的重復,像是狼叫聲般,從遠處傳來一聲又一聲的回響。

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

coding_is_hard_combined_chart

  這篇文章很有趣也十分符合我所聽聞的那些「工程師辛酸史」,因此決定將這四個階段介紹給大家,希望程序初學者們在進入這條不歸路之前,眼睛要放亮、計劃要周詳,清楚明白在前方等你們的是什么,做好完全心理準備吧!

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

  想成為工程師,請做好準備迎接這段必經之路

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

coding_is_hard_confidence_competence

  隨著你具備的知識跟技能越來越多,你的自信心也會隨之而增減,最后達到能力夠信心足的「Job Ready」點。在 Job Ready 前則可以分成四個階段:

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

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

  突然間我們的問題不再是「困難度」,而是「比天高的期望」跟「比地大的夢想」。

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

coding_is_hard_phase_i_conf_comp

  這個階段將充滿喜悅與成就感,在各種線上工具、網絡教學的幫助下,你享受著用指尖下指令、電腦就能準確執行的主導感,你贊嘆著程序語言的神奇與強大之處,從 Hello World 到簡單回圈,每完成一道練習題你的成就感又增加幾分,很多人會在這個時候認為自己已經愛上了電腦科學(而且覺得電腦科學也愛他們),正處于能力提升,自信心也大增的「蜜月期」,這時你可能會覺得世界真美好、人生大概就會從此飛黃騰達,但我得殘酷的告訴你:

  這段旅程才剛開始而已。

  第二階段:困惑之崖

  就跟大部份的情侶/新婚夫妻一樣,蜜月期會結束,你會慢慢發現「相愛沒這么簡單」。

  作業難度一增加(重點是程序碼長度也會跟著增加),程序錯誤警告就頻頻出現,開始不停的除錯(Debug)。而且通常最大的挑戰是 –– 當錯誤出現時,你根本不知道錯在哪里、該問什么問題。你的學習進度在這個階段開始停滯不前,像路走到一半突然遇到懸崖而無路可走般,開始對之前的認知感到困惑,跟著信心大失。


coding_is_hard_phase_ii_conf_comp

  通常這個階段會在你完成線上的基礎教學后發生。以制作個人網站(Portfolio Website)為例好了,W3 School 平臺提供了一系列 HTML、CSS、JavaScript 等網頁制作相關的程序教學,讓初學者一單元一單元的學習語法跟功能,每單元還有例子示范用法,看似好簡單!全部跟著學一遍之后,你準備好動手打造自己的網站,打開文字編輯器,⋯⋯,然后寫沒兩行就卡關了。

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

  這是一個尤其挫折的必經階段,想成為 Programmer 就必須經歷這個關卡,勇敢跳下懸崖、逼自己展翅高飛(當然在這個階段摔死的小雛鳥數量十分可觀)。

  但即使你消滅了無數的 bug,終于完成了幾個小專桉后,你也別高興得太早,未來的路還是非常長遠而且挑戰性更高!對于想進入這行吃飯的人來說,「困惑之崖」通常是你決定是否全心全意進入這一行的轉捩點,而當你投資所有的時間心力在寫程序上時,你將進入最讓人心灰意冷的第三階段。

  你可能會很好奇,到底為什么緊緊相連的第一階段(蜜月期)跟第二階段(困惑之崖)會差這么多?如果你也正在經歷以上兩個階段,你要知道,造成階段轉換的原因跟你一點關係都沒有,并不完全是因為你比別人笨或比別人不努力,而是因為「資源密度」改變的緣故。

  因素1:資源密度 Resource Density

coding_is_hard_resource_density

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


coding_is_hard_resources_screenshot

  然而到了第二階段時,這些教學資源的數量將大為驟減,任何一個剛脫離初學者的程序學習者都能夠證實我此言不假。初學者一開始遇到的障礙都是「一般常見問題」,教學文、教科書里就會注明了;后期由于作業難度以及個人需求,問題才漸漸復雜起來,要從 Stack Overflow 或是一些程序人的部落格中去找尋解題線索。一直到在你遇到的問題已經棘手到網絡上根本找不太到線索的時候,你便進入了下一個階段。

  第三階段:絕望沙洲

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

  因素2:知識廣度 Scope of Knowledge


 coding_is_hard_scope_of_knowledge

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

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

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

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

coding_is_hard_phase_iii_conf_comp

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

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

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

  但你心里深處總有著隱隱的不安,覺得程序能「用」但其實代碼凌亂無章,工程師的頭銜下其實是誤打誤撞進這行的半調子,雖然你似乎具備了一切就職條件,卻總害怕面試官發現你根基薄弱的電腦知識... 你正在經歷「創傷后的恢復期」。

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

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

coding_is_hard_phase_iv_conf_comp

  

  文/Jewel

  喜愛閱讀、學習新知及發掘新奇事物,對設計、創新及網絡科技充滿熱情。自稱「崇簡一族」,視 Simplicity is the ultimate sophistication 為其生活宗旨,崇尚簡單設計,欣賞美麗事物。現居美國西雅圖,忠心耿耿的星巴克榮譽金卡會員。 View all posts by


Cnblogs www.inside.com.tw 2015-08-23 08:57:42

[新一篇] Win10的錄屏鍵

[舊一篇] 微軟Win10 IoT系統初探 只支持三款硬件平臺
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表