如何從零開始自學程式開發:我花了三年,從香港商學院來到紐約與矽谷實習的旅程

三年前,我意識到我選錯大學主修、自己根本不喜歡念商,於是花了三年去轉換跑道,上個月收到加州公司的錄取通知,即將作為軟體工程實習生前往矽谷!

許凱鈞(Kevin)
凱鈞的終端機
13 min readDec 29, 2018

--

三年前我來到紐約實習,第一次拿了學生工作簽證來到世界金融中心時的心情是雀躍的,但是作為會計師每天審查帳本的生活終究把自己不願意承認的失敗甩在了我的臉上。不只是自己做得不好(曾有客戶直接在電話裡跟我說他聽不懂我說的英文,另外主管雖然幫忙寫了一封推薦信以備我未來所需,但也當面表明他不願在推薦信上寫得太正向),而且「我真的不喜歡會計」的想法像是全面啟動裡被植入的想法一樣一點一點成長。最後我每天在紐約搭公車上班的路上,開始抱著一本 Java 的書,決定從零開始學習一門新的、真正令我感到興奮的知識——軟體開發。

直到三年後的今天,我是真的很感謝自己熬過了每一個對自己失望的日子,撐到豐收的 2018 年,錄取了常春藤 Cornell Tech 的研究所、也收到了矽谷公司的實習錄取。

最近重新開始寫文,常常被問自己是怎麼做的?怎麼從商學院走到這兒來。

趁著 2018 年尾,我找了間咖啡廳坐坐、回顧與整理整理自己這三年來做的一些努力,把三年來自己的旅程拆解成幾個階段:「尋找動力」、「累積實力」、「從做中學」、「實習」,最後討論自學至此後的「下一步」,寫成了這篇文分享給一些還在尋找未來的學弟學妹們參考。也許資工或者程式開發這條路不一定適合你,但它絕對是一條你(努力的話)也做得到的選項。

1. 尋找動力

轉職的動力要從哪來?實習是個照妖鏡

就像上面提到的,我自己也是透過大二實習的機會才正視自己過去兩年所學跟自己興趣完全搭不上邊的問題。我還滿鼓勵不知道自己喜歡什麼、甚至連自己不喜歡什麼都不知道的人去做做看不同的實習,花那幾週的機會試試水溫、看自己願不願做下去。

我自己在大二這次會計實習之前,其實就多少意識到自己並不喜歡會計這門主修,所以在大一大二的兩年我做了超過五種的實習工作,我曾經作為英文交流官(我其實也不知道要怎麼說明這職位XD 但我曾在匈牙利教當地的高中學生英文與做些文化交流)、曾在新創孵化器裡做過活動策劃實習、也在新創公司裡做過行銷實習生、高中時也曾作為小說家跟某出版社簽過合約(我其實還是很愛寫小說,未來也有計劃再繼續寫),最後才終於在大二時收到一家紐約會計事務所的錄取,真正地嘗試看看自己主修的會計工作。

結果就像前面提到的悲劇XD

當時我女友正好也跟我一起在紐約實習,她當時就是做軟體開發工程師了,而我自己高中時也曾短暫的接觸過程式語言,所以當時很自然的就想說來試試看——結果一試成主顧,發現自己深深愛上打了一段程式碼之後,就能變出某種介面讓我的點子真正的活過來、跟使用者互動的能力。從樂高的年紀之後,我第一次又感覺到自己的想像力有了活過來的機會

2. 累積實力

有了動力後要面對的現實

不想要一輩子做自己根本不喜歡的工作成為了動力。

資工、軟體開發那像是孩童時期建築樂高、模型或者自己寫小說時的創造能力也是動力,但是 reality is a bitc (beep!),我當時在資工的領域還幾乎零經驗,頂多只能說自己曾修過最基礎的程式語言課程、了解 for loop 是個怎樣的概念,或者要怎麼用 Java or C++ 寫出基礎的計算機(而且還沒有前端模組,只要用 terminal 去操作)。

於是,在了解程式語言怎麼運作的前提下(這是真的很重要),我在接下來大三上的學期裡買了一個接著一個的線上課程(趁著Udemy特價每一門課都只要 $10 美金時,少吃兩頓摩斯漢堡就有了),雖然我沒辦法保證這些課程教的東西在今天的就業市場上還有價值,但以下是我上過的幾門 udemy 課程:

那個學期除了大學裡 15 學分的課程之外,我每天至少花兩小時在這些線上課程上,甚至連Udemy總部都注意到我的進度,後來主動聯繫我跟我約了次採訪XD

Udemy 當時的採訪紀錄,有興趣的話全文在此

除了 Udemy 之外,或甚至說在 Udemy 之後(我後來感覺 Udemy 出課的速度還是比 Youtube 或者一些教師們自己經營的平台還慢一些),我後來又找了一些更符合我自己需求的課程。

當時因為自己想做跟網頁相關的 projects,所以上了 Levelup Tutorials 免費的 Meteor for Everyone,對我幫助極大。Meteor 本身是個全端的 JavaScript 架構,從後端資料庫 MongoDB 到前端串接 React/Blaze/Angular 的邏輯全都包了,所以學完這門課突然就有了真正把 projects 做出來的能力了,個人至今都還滿推薦 Meteor 這個架構。

如何有效利用線上課程自學

推薦一些線上課程後,我想稍微再講講自己怎麼做線上學習的。

選課就像前面說的,先想想自己想要 build 的點子是什麼,再去找相關的資源來學習。所以同樣道理的,我都會建議做線上學習時不要只是聽課、不要只是看教師把程式碼寫完,因為有時候看過去自己以為自己已經會了,但真正丟給自己另一個 context、要做自己的點子的時候又不知道要怎麼從頭做起了。

所以上完一門課、或者邊上的時候,我都會強迫自己同步也做一個類似的小 project。不用很複雜,就一個功能的小專案就好了。如果你學的是HTML/CSS/JavaScript 這些基礎網頁開發,那我會建議你做個自己的個人網站試試看 :)

或者像是我學 Meteor 的時候因為正好是過年期間,所以我記得我就做了一個許願、上傳新年新希望的網站。雖然當時的那個網站長得很醜、也沒有人用,但是至少自己把使用 Meteor 的第一行指令到把網頁跟資料庫本身部署到雲端的步驟都走過一次,下次要做其他 projects 時就比較能得心應手。

這些好習慣直至今日,我也還在不斷的自學與應用。這個寒假,我自己正在上一門 Web Bos 的 Advanced React + GraphQL 課程(真的極推,但需要一些 React 的了解):

希望跟這門課程相關的小 project 在一兩個月以內也能跟大家正式見面 :)

3. 從做中學

整整一個學期的自學之後

經過整整一個學期、半年的自學期之後,我大概了解自己已經有基礎的網頁開發能力,意識到繼續透過類似的線上課程自學已經沒有太大意義的時候,就差不多是可以來找外部 projects、或者建構自己的點子的時候了。

但是,

就算我說自己有能力做網站,有人會相信我嗎?老王賣瓜,賣得出去嗎?

這時候就是你透過學生身份,盡力去犯錯的時候了。我爸從小就教我要多趁自己還是學生的時候去犯錯、從錯誤中學習,還是學生的時候犯錯頂多被罵一罵就算了,等到進了業界犯錯就有實質上的懲罰了。我就很慶幸自己聽了進去,因為最一開始真的沒有公司會信任我、把 production level 的 projects 丟給我做,於是我開始雙主修資工,而且——到處「創立」自己的經驗。

我首先在大學裡創立了一個自學組織,湊了七個人、每個禮拜花兩天的晚上大家一起自學,這時候我也會去做簡單的 Meteor 的教學,每週花個半小時到一小時跟大家分享 Meteor 這個架構的點點滴滴,一陣子後甚至跟大家一起接了個案子開發,替香港某音樂公司開發了他們的網頁。

香港某音樂公司的網站就是當時我們一起開發的;由對方公司自己設計、我們負責開發

除此之外,我也不要臉(X)的寫信去給香港另外一間學校的教授,問問他我可不可以加入他的實驗室(因為當時他們在做的東西我很感興趣,是跟App開發相關的)。當時想說反正頂多就是被拒絕而已,結果沒想到教授居然就熱情地讓我參與。於是,我在同個學期裡除了學校的五門課與自己創立的讀書會的每週兩個晚上之外,還另外花每週兩個下午去一小時車程之外的另一間學校的實驗室裡開發網頁相關的 project。

於是在短短一學期以內,我已經累積了三個左右能夠真的「秀」給雇主看的開發專案,也讓自己通過了整整三次面試台灣 Yahoo 軟體實習的機會(雖然最後美國 Yahoo 總部因為我的 GPA 太低而拒絕發出我的錄取),最後來到台灣一間很棒的新創公司 25sprout 實習(極佳的工作環境,詳情可以看老闆親筆寫的辦公室介紹 XD),實質上的拿到第一份作為軟體/前端開發的實習工作。

花了半年,從左邊的履歷到右邊。(大家對於資工相關的履歷、自薦信攥寫有興趣的話,下次可以再另外細說!)

4. 開始實習(繼續從做中學)

實習與更多的個人專案

除了可以確認自己對這個行業、這份工作的幻想是不是屬實之外,我覺得實習最棒的點就是一個好的實習計畫,通常都會有技術比你強一百倍的前輩帶領著你。

做自己的 projects 時,自己就是整個專案裡面的天花板,但是到了外面真的人外有人、天外有天,當時的第一個實習對我自己的幫助很大,終於深度的了解到一個網頁的專案從零到建構環境、再到寫程式碼的精簡與 best practices,對於我之後持續開發的其他個人專案都很有幫助。在新創公司快速成長的環境裡面,也讓我自己每天都過得像海綿寶寶一樣,天天吸收新知,也重新確認自己喜歡新創圈子的喜好。

在實習過後,回到香港大學念大四時自己又對自己更了解一些,做出自己一直想做的 project(當時叫做 Projectable,是個可以讓大學生找做 projects 的夥伴的平台),雖然最後還是沒有多少人用,我也已經把它 shut down 了,但是這個點子也持續一直在我心中,等待著某一天自己有更好的影響力能把這樣的社群建立起來。

Projectable 曾經活過(?)

而且,說真的,建立一個自己夢想中的平台時,那種動力真不是蓋的。

當時的我們就傻到拿著這樣沒有商業角度的網站,到了幾個香港的創投前請他們贊助我們、甚至還辦了一場學生 Hackathon 牽線讓微軟、GitHub等大公司贊助學生來開發自己的點子。

打造 Projectable 的全心得可見一年前的全文「寫在反省時,給同樣想創業的大學生」

看到這裡,也許、也許你會覺得辦一場 Hackathon 對於我自學、甚至轉資工的幫助不大。也許我只是回到大一做活動策劃實習生的角色。但老實說,這個經歷真的給了我很多後續的機會,當時共同奮鬥的夥伴很多至今也保持聯絡,甚至如此靠著學生身份跟微軟搭上線(我當時真的就是去了一場微軟的技術活動,然後當面跟微軟裡面的員工說我要辦駭客松。至今依然不解自己吃錯什麼藥。),多少也有助於我在同一年暑假拿到了在台北微軟實習的機會。

微軟實習心得可見英文版全文(當時在申請美國研究所,所以用英文寫這篇)

5. 下一步

擇己所愛,愛己所擇

至此,從三年前在紐約會計師事務所做到懷疑人生,到今天雖然不敢說自己有多厲害,但是大五畢業時拿了有雙主修資工學程的畢業證書、另有新創公司與微軟的實習經歷,我覺得畢業後真的又到了該選擇下一條的道路的人生交叉點。

每個平凡的自我 都曾幻想過
以你為名的小說 會是枯燥 或是雋永

就像五月天(Ay!)的歌詞裡面唱的一樣,我去想像以自己為名的小說,故事會是怎樣,然後以此去計劃、去努力。我自己高中時期寫小說的,這能力對我來說就很簡單、也很實用。畢竟,例如選擇自己的未來、去轉職、去學寫程式、去出國,有些事現在不做一輩子都不會做了

雖然我也許 biased,因為我女友已經在美國 Google 工作,但我當時決定前往美國唸個研究所、拿到身份後在美國找份軟體工程師的工作待個幾年,之後再等待機會回台灣(暗自希望自己某天可以帶 Facebook 的某個 Team 回台灣做,打造一些機會給台灣的工程師,因為我們不缺能力、只缺舞台⋯⋯ well,其實也不是真的缺舞台,我還是覺得台灣很多新創公司很吸引我,當時也是想說如果美國研究所申請不利,我就去申請一些自己欣賞的台灣新創)。

總之呢,累積個人能力後,每個人做的選擇都不一樣。

也許是同溫層,但我認為我選擇的道路還滿主流的,不過我也認識有人錄取了臉書、拿了簽約金之後又把錢吐回去決定自己創業;也認識有人在 Google 做了六年後才決定要回頭創業。學了資工之後出路真的很廣泛,待在台灣也好、出國看看也好,真的就是擇己所愛、愛己所擇,雖然還是很 cheesy 的結尾,但重點真的就是不要忘記第一天寫程式時的興奮感與持續不懈的自學,永遠不要有一天覺得滿足,一直去把握下個更好的機會,那終究就會成為最好版本的自己。

--

--