【我們為什麼挑選這篇文章】本文作者羅泓武(GitHub ID:st0012)四年前從毫無程式基礎開始自學程式,一年半以後就已經 成為一名正職的網站工程師。而四年後的現在則忙於開發程式語言 Goby,還因此去了日本的 RubyKaigi Conference 當講者介紹此語言。
究竟他是如何自學寫程式,成為一名工程師?這篇文章他分享了自己成為正職工程師以前的完整自學經歷。(責任編輯:劉庭瑋)
文 / 羅泓武
最近這一年陸續都有人問我是怎麼自學的,但礙於時間問題每次都只能回答下次約出來聊(不過目前沒任何一次約成功,可能只是禮貌問一下而已吧?),所以想說乾脆先寫成文章。但我認為在每個時期中,自學的方式跟目標會有滿大的差異,所以我先以自己學習的每個時期為例做說明,最後再提一些我覺得比較重要的觀念。
我自學到現在一共經歷過四個階段,第一個階段是我自學 html、css 到進 flyingV 實習的前幾個月;第二個階段是 flyingV 實習後期到 Inside 實習完;第三個階段為去貝殼放大到大概去年二三月的時候,從那之後就是第四階段了。
第一階段 — 懵懂無知時期(2013–05~2014–01)
這個時期我基本上可以說對寫程式這件事情是一無所知的,身為一個沒寫過程式的文組學生,程式邏輯對我來說是非常難懂的,所以一開始只能寫不太有程式邏輯的 HTML 跟 CSS,然而因為想省錢,所以是挑 tuts+ 的免費課程來上。
雖然我很快就學會了怎麼寫基本的網頁,但現在回想這真的是很蠢的決定,因為我幾乎沒有任何完整的觀念,只知道怎麼用編輯器寫出 HTML 檔案然後用瀏覽器打開它而已;之後到了 flyingV 開始接觸 Javascript(嚴格來說是 JQuery 而已)也是一樣,我很快就會操作一些基本的功能,但卻不具有任何正確的觀念。
小結
這個階段學的就是最基本的網頁編寫技巧,能用 JQuery + HTML + CSS 寫出網頁而已。雖然這時期我同時也在為拳擊比賽做準備,所以沒辦法完全專心的學習網頁,但用了快八個月的時間只學了這麼一點東西還是覺得的很羞愧。
第二階段 — 入門時期(2014–02~2014–09)
後來因為 Eugene 的介紹我開始接觸 AngularJS(一個網頁前端框架,現在差不多GG了),雖然學習的時候也是只接觸皮毛,但至少可以循著框架設計了解網站架構的基本觀念(比如說什麼叫 Routing、什麼叫 Model)。
後來前端學完開始要接後端,那時候對所謂後端跟資料庫一無所知,所以是先接一個叫 Parse 的服務(現在也 GG 了),然後也是藉由串接的過程遇到的問題+尋求解答(感謝 Ronald 跟 Eugene 每天被我糾纏)開始了解後端跟資料庫是什麼,最後便開始自己用 Node.js + Express 刻後端。
終於到了四、五月也就是我開始自學寫網站差不多滿一年的時候,我才終於有辦法做出一個全端的網站,對比現在看網路課程可能一個月甚至更短的時間就可以自己寫出完整網站來說,我的學習速度真是超慢的(這也證明我並沒有特別有天份)。
進到了 Inside 後,我在 Richard Lee 的指導下開始學 Rails,並對整個網站的架構有更完整的概念,同時也建立了一些開發上需要注意的基本觀念 (比如要寫測試、注重 Coding Style)等等,而且 最重要的是我學會了如何去看別人的程式碼。
小結
到了這階段我算是奠定了寫程式(網站)的基本觀念,這方面除了靠問人以外,研究框架的設計原理也可以得到一些收穫。不過 我覺得更重要的是在 Inside 學到的開發流程、寫測試、維護 Coding Style 等開發觀念 ,因為有了這些觀念才有辦法寫出有質量而不只是會動的程式;而且這是在整個軟體圈共用的觀念,不論你是寫網站、寫 App 還是寫 Library 都會用到。事實上我認為一個人是「會寫程式的人」或是一個「工程師」之間的差異就在於是否具備這些觀念。
另外 養成閱讀程式碼的習慣也算是一個非常重要的能力。 其實會寫程式就一定看得懂程式碼(這不是廢話嗎),但有沒有把他養成習慣就很重要了(事實上我遇過不少新手都沒這習慣)。養成這習慣有兩個好處:
- 可以第一時間直接看別人程式碼找問題,而不是先去打擾別人問問題,或是在網路上找答案。
- 如果不需要其他說明輔助就能看別人寫的程式碼,現在世界上 Open Source 專案這麼多,你便可以到處去觀摩別人的寫法,然後學起來變成自己的技巧。