Abstract
這是一篇講述不務正業的化工所畢業生如何靠著運氣申請到美國資工所並且轉職成為軟體工程師的分享.
Disclaimer
本篇經驗分享的時空環境是2017-2019, 矽谷差不多在2012之後開始迎來一波爆發性的成長. 在那之後的十年間, 矽谷軟體公司急速的擴張, 導致以FB為首的各家公司開始儲備軟體人才的軍備競賽, 這也因此開啟了海外留學生爭相轉CS的大CS時代.
然而在接連著新冠疫情以及美國FED開始升息後, 資金緊縮, 矽谷進入就業寒冬期. 目前還不清楚2023後矽谷是否還能重回疫情前的榮景, 但請審慎思考並做好自己的due diligence考量風險.
序
自己一路走來算是走一步算一步的性格. 自己高中前最喜歡的科目是數學跟物理,但大學選志願的時候算半推半就進了自己不太喜歡的化學系. 即便如此, 靠著自己還不錯的物理跟數學大學後順利地進入頂大化工所就讀並且順利畢業.
為什麼要轉職?
化工系雖然號稱出路廣, 但其實真正比較有錢途的路線大概就是進入半導體業(台積電, 應材, ...etc)或是一線傳產(長春, 李長榮, ...etc)輪班.
在成功嶺替代役集訓的某一晚, 我躺在寢室看著天花板想像著自己的未來. 雖然從未在半導體業工作, 但光聽學長姐分享或是網路上的心得我就足以夠在腦海中映出那個日複一日為加班而活著的人生. 那種20歲就能看到未來40年會怎麼樣發展的人生不是我想要的人生. 從這一刻開始, 我決定選擇更有$途的路, 就是到美國轉CS成為矽谷軟體工程師.
沒有基礎, 要怎麼到矽谷當軟體工程師?
思考這個問題的時候可以先想想招聘方到底都用什麼樣的條件招人, 再根據所需的條件去補足自己的不足.
美國軟體公司看什麼招人?
整體來說, 美國軟體業, 大部分公司並不太重視學歷和成績這回事, 更看重的是你的經驗, Skills, Projects, 以及人格特質是否符合公司需求. 另外, 公司需不需要Sponsor Visa也是需要考量的一點, 一般來說大公司較傾向幫員工辦工作簽證或是綠卡, 小公司傾向招聘不需要Sponsor Visa的人. 這些在之後找工作的時候會比較仔細地討論.
所以有哪些路線?
根據有無身份(美國公民 / 綠卡)你會有不同的路線.
沒身份的話, 你有以下選擇:
- 在台灣軟體業工作一段時間之後, 直接投美國公司工作
- 在台灣加入跨國公司 (e.g. Google), 內轉拿L1 Visa到美國工作, 申請並獲得綠卡後並成為自由人
- 申請美國資工或是相關系所的碩士 / 博士, 用OPT(學生工作簽證)在美國工作, 抽H1B(工作簽證)或是同時申請綠卡並成為自由人.
- 神抽綠卡樂透 / 婚姻綠卡 / 投資移民獲得綠卡後進入有身份路線.
有身份的話, 你有以下選擇:
- 參加大公司的學徒計畫(Apprentice program), 像是Microsoft的LEAP, LinkedIn的REACH, Google的Apprenticeships 等. 在學徒計畫時間結束後爭取機會轉正變成正職員工. 注意每個公司條件都不太一樣, 但大部分均要求要有在美國合法工作的身份, 以及一些其他的背景(e.g. 少數族裔, 非資工背景甚至是非理工背景)
- 參加短期Bootcamp. 基本上和台灣的資策會或是六角學院之類的類似, 教你一些求職所需的技巧和一些媒合之類的, 然後結束後想辦法找到正職工作.
- 完成一些線上課程 或是美國大學提供的Certificates, 利用這些Certificates去找正職
- 申請美國資工或是相關系所的碩士 / 博士, 畢業後找相關正職
我的選擇
我最後選擇到美國念資工碩士. 首先我沒有身份, 且求學過程中完全沒有學過任何資工相關課程, 空有頂大學歷卻沒有相關經歷在台灣轉職軟體工程師不會比較輕鬆.
當然, 我當初的計畫是如果沒有申請上學校的話, 我應該會參加資策會或類似六角的計畫然後找一個正職. 但說實在的我有可能會中途放棄而選擇回去找半導體工作.
轉CS的門票 - 申請學校
怎麼找到我的目標學校?
如果你和我一樣完全是零背景硬轉CS, 基本上你應該根本沒什麼素材是一般program會想收你. 因此你需要花更多心思去找研究:
- 這個program願意收非CS的學生嗎?
- 需要有什麼樣的背景? 有些Program喜歡完全沒背景的學生; 有些喜歡有修過CS課程的學生.
- 這個program還重視什麼 (e.g. GRE 成績, TOEFL 成績)
另外, 我們的終極目標是畢業後能夠在美國留下來工作, 因此除了看這個program願不願意收留我們, 我們應該也要看念這個program能夠為我們帶來什麼優勢:
- 至少要有STEM OPT 簽證
- 在校期間我可以到軟體業實習嗎? (CPT)
- 畢業後, 業界的校友多嗎?
一畝三分地
個人推薦直接去一畝三分地(中國留學論壇)搜尋"零基礎”或"轉CS"等關鍵字, 會有很多優質的分析文章分享一些自己不會查到的program. 但申請的三圍分享基本可忽略, 中國學校和台灣的GPA差別太大沒有參考價值.
ptt - studyabroad
ptt的studyabroad版可以看, 但最好先做好心理準備. 尤其是如果你像我一樣GPA不怎麼高的人, 請忽略號稱"中低GPA" (3.6)或是"中GPA" (3.9)的選校文, 著重於實際錄取的零背景分享文是做了哪些事情讓自己錄取的.
如何增加錄取的機會?
基本上申請不外乎就看你念的學校, GPA, 期刊發表, 工作經驗等等. 學校跟GPA是畢業後就沒辦法再改變的東西. 期刊發表, 工作經驗則是你可以後天再改進的.
如果你完全沒有修課經驗, 你可以隨班附讀補CS學分. (我沒有弄這個, 但我認爲有時間應該弄這個)
除了上述的東西以外, 如果你和我一樣背景沒救了, 那就至少把standardized test(GRE / TOEFL)分數衝高 . 畢竟, 你已經沒什麼亮點了, 那至少讓自己不要在這方面有被人挑惕的機會.
NOTE: GRE 和 TOEFL越高越好, 但一般認為GRE總分320以上, TOEFL總分100以上算不錯的分數.
勇敢申請就對了
我當初申請的時候大學GPA只有3.2, 碩班GPA3.8. 一堂CS課都沒修, 也沒有弄隨班附讀或實驗室做研究. 除了托福破百GRE破320以外, 這種背景丟到PTT問生涯規劃基本上只會被噴到自己刪文. 但我最後很幸運的還是有USC CS 37可以念.
美國學校申請沒有絕對的標準, 有試有希望, 切勿妄自菲薄.
學校錄取了, 下一步呢?
申請上美國的學校不代表你的人生接下來就一路順風了. 相較於一般已經有CS基礎的學生, 身為轉專業的你更必須要在課業學習以及找工作找到平衡. 然而, 請時時警惕自己申請美國學校的初衷是為了在美國找到一份工作. 在你開學或甚至前往美國前你應該就已經想好你接下來唸書期間要做什麼努力.
如何提升拿到正職的機會?
一般來說, 在美國獲得一份正職工作的方式不外乎透過 (1) 畢業後直接面試正職取得offer, 或 (2) 面試實習缺, 暑假實習後獲得正職Offer.
畢業後直接面試取得offer是大多數學生找到工作的方式, 面試者背景要求相對較低, 但競爭者多且面試輪數多, 面試難度普遍也比較高.
面試實習缺對面試者背景要求更高, 但一般來說面試輪數較少, 面試難度也偏低, 一但完成面試後錄取的機率也比較高. 另外大部分公司實習有發Return Offer的Return Rate的比例很高, 最低通常也有60%. 如果實習真的沒拿到Return Offer也不用氣餒, 沒有實習的人還是偏多的. 履歷上擁有一份實習經歷會大大地為你的履歷加分.
履歷什麼最重要?
基本上無論是找正職或是找實習, 履歷上最重要依序為:
- 美國知名公司相關實習或工作經驗 (e.g. FAANG)
- 美國小公司相關實習或工作經驗
- 海外知名公司相關實習或工作經驗
- 海外相關實習或工作經驗
有沒有發現全部都是實習或工作經驗? 沒錯, 實習或是工作經驗對美國找工作就是如此的重要. 即便你就讀於頂尖的學校也不代表各大公司就會搶著錄用你. (除非你念博班而你的實驗室剛好又跟大公司有合作)
當然, 有些公司會額外篩GPA或是用Skills篩candidate, 但最重要的還是你的工作經驗.
相信讀到這裡應該會想, 就是沒背景才來美國轉CS, 結果到頭來還是要有工作經驗才能在美國找到工作嗎? 理想上如果有實習經驗的確會大大提升你的勝率, 但木已成舟, 我們也只能想辦法亡羊補牢.
確定Timeline
在來美國之前請先擬定好作戰計畫, 一般來說, 大部分的實習會在7-9月釋出, 正職工作全年都有, 但大部分的缺也是那個時間點釋出最多. 暑期班的同學基本上是往美國的飛機一落地就準備要開始投履歷了. 春季班的同學受限於CPT的規則, 一般來說只能在隔年暑假投正職 / 實習 (如果program超過2年).
投履歷前的準備
如果你像我一樣完全零背景的話, 那請做好心理準備, 你的第一個學期將會非常的痛苦, 因為你必須要同時修課並且為你的找到第一份實習做準備. 以下是你除了修課以外你必須同時做好的事情:
Projects
題目刷再多, 你拿不到面試也是白搭. 不仿試著寫一份自己的履歷, 在沒有任何工作經驗或是實習經驗的前提下, 你的履歷想必會有一大片空白. 你唯一能做的就是自己做side project來填滿這份空白. 我個人覺得side project沒什麼用, 在我找實習的過程中, 面試20幾次沒有一間有問過我的side project. 這對錄取沒有什麼用處, 但HR有可能在篩選你的履歷的時候因為你的履歷沒有那麼空就僥倖給你一個面試了.
要做什麼Side Project取決於你想要面試什麼樣的職缺, 例如市場上大部分缺是Web導向的, 你可以做一個MERN 或是Django 的網站. 或者你是個鄙視Web缺的人, 那你可以弄個opencv的project或是參加kaggle. 注意你選的project至少要和你要投的工作缺有關, 不要到時候做了一個android的project卻跑去投一個frontend的缺.
刷題
這個沒什麼好說的, Leetcode辦下去硬刷就對了.
GPA
出乎意料的, 這個其實是在美國找實習最不重要的一環, 我有聽說過一些公司(Oracle, Yahoo?)會用GPA篩人, 但會用GPA篩人的公司真的非常少. 我個人認為只要不把自己搞到被當掉, 成績差不多保持在3.5基本上就夠了.
充實自己的履歷: 找到第一份實習
我就讀的Program是USC 春季班的CS 37, 有兩年的時間可以完成學位, 甚至最長可到兩年半. 這代表即便我不能在第一年用CPT找美國本土的實習, 我也可以在第二年的暑假找實習.
因為第一年沒辦法實習, 我選擇遵循一位優秀戰友的建議, 暑期修課和找台灣的實習充實自己的履歷.
老實說我的背景實在太爛, 我只丟了一些新創公司. 當時我只有拿到一間新創 (MVP Fastlane) 的前端面試, 印象中當時我的面試簡直慘不忍睹, 應該沒有幾題有答出來. 面試結束之後其實心理非常憤恨自己怎麼這樣就把唯一的機會給搞砸了, 但我非常訝異最後我還是錄取了. 很感謝當時CEO願意給這樣的我一個機會在他的公司實習.
這次的新創實習經驗蠻棒的. 工作內容方面, 雖然是前端實習, 其實還是會碰到一些簡單API design跟後端DB schema的設計, 但同時也必須要搞定幾個UI page的實現. 除此之外, 由於是接案公司, 也有手機端的App 前端要負責, 因此我也同時用React Native寫了一些UI; 工作氛圍方面, 可能是因為老闆本身也在LA, 感覺整體工作氛圍也蠻像矽谷的感覺, 在這裡我也為往後的工作奠下了一些基礎.
找美國的實習
有了第一份實習的經驗, 我的履歷終於不再空白. 在當年度8月實習於台灣實習結束後我回到美國, 並且馬上開始找次年美國的暑期實習.
如果你像我一樣幸運已經有了一個可以拿來寫的實習經驗的話, 這個時候你已經跟一個平均程度的CS畢業的學生有差不多的履歷了. 因此接下來的部分和一般美國CS graduate找工分享並沒有太大的差別.
時程
一般來說, 美國每年的暑期實習在前一年的9月初就開始釋出職缺, 在10月中可能面試的高峰期就結束了, 很多人可能在10月中或10月底就拿到Offer了. 如果你在12月底前還沒拿到Offer, 那你明年只能在1月到2月想辦法找小廠或是unpaid intern想辦法找到實習
職缺不會等你準備好
不少人其實都會害怕自己還沒準備好就拿到面試, 浪費掉面試機會就完了. 然而不像我們這些現在已經有工作的人一年四季都有可能面試, 對於學生來說一年也就這一兩個月的時間有面試的機會.
另外, 職缺剛釋出的時候最不看學生履歷, 面試題目難度也相較簡單, 面試的回答不需要到完美就有可能錄取. 然而隨著時間的拉長, 公司收到一定的人數後, 到越後面篩選面試者的條件就越嚴苛.
怎麼投履歷
一般來說, 投履歷有這三種方法(1) 海投, (2) 內推, (3) Career Fair.
海投
基本上就是直接在官網或是找工網站上直接申請. 你的履歷會直接和所有申請者競爭. 如果能避免的話就避免這種方式, 轉專業履歷已經夠難看了就不要走這種路.
內推
內推如果能直接把履歷拿給hiring manager的話是最有效的手段。但如果不是的話, 公司一般還是會區分內推跟海投的履歷, 理論上內推拿到面試的機會會比海投高上不少. 此外大部分公司會確認公司內推和推薦人的關係, 所以請學長姐內推是比較有效的手段, 但有的時候沒有認識的學長姐只能上網找或是LinkedIn上厚臉皮問.
Career Fair
名校的Career Fair會有不少大公司或小公司去擺攤面試, 這也是一種非常有效率的方式. 但對人收得太多的學校如USC來說, Career Fair其實反而沒什麼用, 因為學生太多競爭者也多, 很難凸顯你的優勢.
客製化履歷
具體怎麼寫履歷這裡就不說了, 有更多更好的文章教你怎麼寫好履歷.
我個人認為最重要的是針對職缺寫你的履歷. 譬如說你已經知道這一份缺比較重視前端經驗, 那你應該在履歷上面多放點和前端相關的經驗. 另外多放一些和職缺有關的buzzword多少還是能影響你履歷被撈起來的機率. 至於那種影響X%的traffic或是提升多少efficiency的句子我倒覺得可有可無
面試
我找工作算是偏辛苦的, 主要是自己題目刷得沒有融會貫通 (300題左右), 大小公司含新創大概投了150間左右, 20間面試, 5間到最後一輪. 拿到Offer的只有L家的UI Intern.
我自己認為面試準備不太好的主因是同時準備前端(Frontend)以及一般SWE的面試. 我在投缺的時候只要是前端或是SWE的都投. 但前端花掉我相當多的準備時間.
SWE的題目基本上就常見的演算法題, 為了刷題方便當初我選用Java.
前端面試
前端面試比較瘋狂, 基本上包羅萬象, 如果大家有興趣以後再發一篇有關前端面試的準備, 以下列出我實習面試被問過的內容:
- HTML5 / CSS (e.g. Flexbox)
- REST protocols
- JS Scoping / prototype inheritance
- Basic DOM APIs (Dom Node / Event APIs) and operations (e.g. querySelector)
- Browser Rendering Mechanism, Optimization
- Accessibility
- React Specific Knowledge
- Algorithm with ES6 JavaScript
- OOP Design (e.g. design a bowling game) with ES6 JavaScript
- Implementation (e.g. Form validation, profile cards, ...etc) with Vanila Javascript
- Implementation (e.g. Carousels ...etc) with React
後續
花了好幾個小時寫得累了, 想不到寫了這麼多才寫到這裡. 後續的話其實我就很開心的在L家實習並且順利的畢業Return回L家了. 目前在L家也開心的工作了三年. 以後有機會的話再來寫在L家實習以及這些年來的體悟.