美國軟體工程師實習與正職求職心得

2021/2022 US SWE Intern and New Grad

關鍵字:2021 US Software Engineer Intern、2022 US Software Engineer New Grad、疫情、Google、Facebook/Meta、Amazon、Bloomberg、Cornell Tech、大學非本科

image

前言

在找工作的路上受到非常多人的幫忙,求職的結果很大部分歸功於集體智慧與台灣人好心的結晶。因為受到的幫忙太多,所以想提供這兩年的資料點跟我個人的心得給同樣當初像我需要幫助的人一個參考。個人覺得找實習與正職有相當大的運氣成分,我的想法很有可能都只是好運底下的產物,所以建議帶著自己的判斷閱讀。感恩惜福!

背景

目前在 Cornell Tech 讀 Information Science,大學讀商科,有一些軟體工程師的實習經驗。詳細可以參考我的 LinkedIn

結果

2022 Software Engineer New Grad

錄取:Google (GCP@NYC & YouTube@Bay Area), Facebook/Meta (Bay Area), Amazon (Seattle & NYC)

面試被拒:Bloomberg

線上筆試被拒 / 履歷被拒 / 無聲卡:Notion, Stripe, Figma, etc.

  • Google: 5 rounds interview, Oct 17, 2021 (result received)
  • Facebook/Meta: 5 rounds interview, Oct 17, 2021
  • Bloomberg: 2 rounds interview, Sep 23, 2021
  • Amazon: Intern Return, Aug 28, 2021

2021 Software Engineer Intern

錄取:Bloomberg (NYC), Amazon (Seattle)

面試被拒:None

線上筆試被拒 / 履歷被拒 / 無聲卡:Facebook, Google, Robinhood, Roblox, Stripe, Figma, Kleiner Perkins Fellows etc.

  • Amazon: 3 OA + 1 round interview, Nov 11, 2020
  • Bloomberg: 5 rounds interview, Oct 19, 2020

心態

早一點投,早一點投,早一點投

在求職的時候,很常遇到的一個問題是覺得「自己還沒有準備好」。即使這一點在大部分的心得分享都一再被提起,我還是想要強調,很難有人可以真的「準備好」。

因為沒有準備好而在面試被刷掉總比因為太晚投而被通知職缺被補滿好。當然有些人會覺得面試被刷掉可能會有冷凍期的問題,但我認為早一點投履歷的好處有三:

第一是大部分實習與正職的面試我覺得在拿到面試後在開始準備都來得及。前提是你對於基本 Leetcode 的題型已經有一點點理解(例如刷過 Blind 75 題或是其他人整理的題目)或是願意抱佛腳每天坐下來刷十題一個禮拜。

對大部分人來說,刷題刷到一定題數後,刷題的動力會稍微下降。對我來說,拿到面試是刷題最好的動力,因為有一個清楚的死線(面試日期)跟一個清楚的目標(Leetcode tag 題跟面經)可以減少拖延跟不必要的擔心與憂慮,類似於 “Turn off your brain and let the body function independently”。如果真的覺得自己準備非常的不充足,也可以跟公司提前說一聲重新安排面試就好。

第二是早點投有利於最小化需要投入刷題的時間。這跟個人偏好有關,但我自己覺得在美國有很多事情可以趁在學生時做,所以想要最小化需要刷題的時間,而不需要一直把他擺在第一優先 (Top Priority) 而掛心。

在沒有拿到公司面試以前,大部分人把經典的題型刷完後所做的題目投資報酬率都會下降。除了經典題型能幫助我們打好基礎摸清大概方向,其他的題目實在太多。如果沒有針對公司的題庫刷題,那很有可能接下來大部分投入刷題的時間會是低效的。

即使對於刷題的方向有所規劃,類似於 Parkinson’s law 所說「工作總會填滿它可用的完成時間」,沒有清楚的死線還是很難辦法保證最有效率的投入。可能有一點極端,但以我的例子是在面試 Google 前,我只有規劃用三天每天坐下來 16+ 小時把他們的 tag 刷完(但最後一題都沒考到)。

第三是早點投面試被刷掉也可以當作累積經驗。早一點投早一點有 OA (Online Assessment) 和面試,即使運氣不好被刷掉也能夠當作累積經驗,提前知道自己面試容易犯的錯以及可以改進的部分。

我自己的例子是在正職面試 Bloomberg 的時候, 為了早一點習慣面試的手感跟節奏,我直接跟 Recruiter 說我想要比原定時間提早三個禮拜面試。結果考好難我自己也準備不足被刷掉,但因為面試的時候我發現自己做 Binary Search 不太穩,後來痛定思痛苦讀 Binary Search,把它系統化讓之後面對這類型題目都輕鬆秒殺。

從我的論述可能可以猜到,我自己是大部分時間相信 Fake it till you make it,所以會覺得當自己認為自己準備好時通常都已經太晚了,但如果你覺得這個不適用於你也無仿。而至於江湖傳說越早面試難度可能越簡單這點我無從考證。

具體來說,我大部分的職缺都是在一開缺後開始找內推,10 天內就會想辦法投完。也就是說,我大部分的實習及正職職缺都是在開學前到剛開學這段期間(七到九月)投的。

讓運氣均值回歸

也許是只有在疫情或後疫情時代才會這樣,但我自己認為在找實習或找正職時,運氣是影響非常大的因素。正因為大部分是運氣,所以一定會有你自覺準備的很好或是面試的很好卻得到不如預期的結果。但同樣的,有時也會有你自覺準備尚可或是面試表現普通卻得到超乎預期的結果。

所以在找工作時,我自己的心態都是相信自己有盡力後,就坦然面對自己無法控制的運氣。雖然盡可能準備去減少運氣的成分,但還是要多投多面試讓自己能夠不會只被壞運光顧。讓自己有夠多的機會暴露在各種運氣之中,借用(誤用)財金的概念就像是讓運氣透過更多的機會均值回歸。

內推

因為成長背景跟科系的關係,我自己在來美國之前是沒有認識任何在美國科技業工作的朋友,所以我所有的內推都是在網路上找陌生人幫忙的。主要是用歹晚郎互助網絡(謝謝 Bryan 的經營)、矽谷輕鬆談 Just Kidding Tech 的 Slack(謝謝 Kenji 和柯柯的經營)、還有 LinkedIn。

我投履歷時只要找得到內推聯絡資訊就一定會傳訊息或是 Email 問,如果一個禮拜沒有回應就會找下一個內推或是直接海投。如果是自己特別好奇的公司我會在自我介紹的訊息內順便附上一些我想問的問題。

也許是我運氣特別好,但我的經驗是如果可以有點禮貌然後積極一點,台灣人願意幫忙的程度真的是超乎想像。不止一次我單純想詢問內推卻得到很多履歷建議、公司推薦、職涯分享,甚至會有人會主動幫忙留意新職缺。我自己的習慣是會跟所有我找過內推的人更新我最後找工作的結果(實習與正職的去處),不管有沒有因為內推拿到面試都還是要好好謝謝願意幫忙的人。

具體上,在聯絡內推人時,我寫 Email 通常會用的大綱會像是:

第一段先謝謝別人願意內推。

第二段自我介紹,順便提到自己想要麻煩內推的職缺。

第三段告訴內推人不管能不能幫忙內推都簡短回覆即可,我會再提供我的聯絡資訊(Facebook、電話),盡可能讓內推人能選擇一個他最方便的方式。

第四段條列他內推所需要的資料,例如職缺連結、Email、自我介紹等等。

如果是傳訊息的話,我會盡量控制在越少字數越好。舉例來說:

XXX 前輩你好,不好意思打擾了,我是 XXX,目前在 XXX 讀 XXX,大學讀 XXX,之前在 XXX/XXX 實習。透過 XXX 搜尋到你的聯絡方式,想要請問方不方便麻煩你幫忙內推 XXX 職缺 (link)。我隨訊息先附上我的履歷跟 email: XXX,需要任何其他資訊再麻煩跟我說。如果最近不方便的話也沒關係,謝謝!

履歷

如果對於寫履歷沒有方向,一個簡單的小技巧是去 LinkedIn 上面搜尋你想要投履歷的公司,蒐集一些在那間公司曾經在你想要投的職缺工作過的人,然後多參考他們是怎麼描述他們在那個職缺上所做的事,畢竟這是公司預期你在應徵時可能可以做到或即將做到的事。有些佛心人還會把他們的整份履歷放到 LinkedIn 上面,多參考個 10 到 30 份就能夠對履歷的方向跟如何敘述有一個比較好的理解。

我在投實習時覺得最重要的是多給不同的人看,因為每個人都會有一些盲點,而履歷總是有能夠進步的空間。一個尋求建議的小技巧是,如果覺得別人可能在猶豫能不能給我們誠實的反饋,我們可以問說這份履歷 1 至 10 分你個人會給幾分,然後接著問要如何改進才可以更接近 10 分。這個小技巧來自 Adam Grant 的這個 Tweet

除此之外,我在一份履歷裡,會花特別多的時間去優化工作經驗中第一項經驗的第一句描述,因為在我的經驗裡,這通常是為這份履歷定調的關鍵。在面試中如果有 Behavior Question 問到 Can you talk about an experience in your resume,我通常就會直接從這一句做開展。

刷題

關於刷題,我覺得可以簡單分成兩個階段。第一個階段熟悉題型,就按照資料結構以及演算法按照主題刷。常見別人整理好的題庫有 Blind 75CyC2018花花醬。我覺得品質應該都差不多,可以按照自己有的時間挑一個適合自己的。我自己在當兵的時候會另外印這個網站的答案進去看,每次只要練軍歌或是單兵戰鬥教學就拿出來墊在講義上看,一個禮拜可以想個十幾題,導致最後驗收軍歌跟單戰都不會,被班長笑說每次都看那麼認真還記不起來。

有一些我自己覺得在刷題時對我了解某個資料結構或演算蠻有幫助的整理:

第二個階段就是刷公司在 Leetcode 上的 Tag。當然不是每一家公司都會考 Leetcode 上的題目,但有一個方向準備起來總是比較安心。我會至少把要面試公司的高頻的 50 題刷完,這個時候在刷題時我會把每一題當作在面試,所以我會避免看到題目就直接開始寫。我覺得比較好的練習方法是能夠確定自己有想通並有能力口頭描述好自己解答之後,再開始碰鍵盤。

我自己覺得刷題有一點很重要的是要保持心情愉快,不要給自己太大的壓力然後 Burn out,也不需要有「我一定要刷到幾題面試才會穩」的這種壓力。我自己為了效率以及避免開始懷疑自己太笨,會在刷每一題的時候計時 10 分鐘,如果時間到沒有想好解法就會直接看答案。至於語言,我原本是用 JavaScript 刷題與面試,但後來為了熟悉新語言就全面改用 Python。身邊也不乏使用 C++ 面試的硬漢們,所以我是覺得挑一個自己喜歡的就好。

面試

我覺得面試的心態和溝通與解題同等重要,而且通常心態和溝通做得好,對解題也會有所幫助。剛開始面試難免會緊張,我喜歡在心態上把面試當作一個跟面試官交朋友的機會,並假設面試官都是希望我面試順利,所以我跟面試官是一起合作來完成這個面試的。

在面試的時候,大部分公司面試都是希望我先口頭解釋完我對於解答的想法,了解時間複雜度後,再開始動工寫程式。我自己的習慣是會不停的問面試官 Am I on the right track、Does that make sense to you 等等。因為即使我看到題目就已經知道最優解,我需要實作的通常要是面試官心目中的解,而不是標準答案的解。如果兩者不同,我會先把面試官心中的解搞定,再嘗試提出我心目中的解。

遇到看到腦筋一片空白的題目,最簡單的方法就是先從暴力解 (Brute Force) 開始,然後爭取時間想優化。如果還是完全沒有頭緒,我會開始列舉一個一個資料結構與演算法,然後簡述一下這個資料結構與演算法的特性,測試看看面試官的反應。舉例來說,我可能會說:I don’t have a concrete idea now, but I’m wondering if hash map can be used here to solve this since it can offer O(1) access to the data. 看一下如果面試官沒有正面反應之後,我可能就會接 At the second thought, probably I can draw some diagrams and think about whether there’s a potential greedy solution。

至於 Behavior Question,我通常都是按照常見的問題用 STAR 原則簡單寫一下自己需要提到的點,如果沒有把握也可以寫個逐字稿訓練表達。因為自認自己的英文不是特別好,我每次面試都會寫一個字條貼在電腦上提醒自己英文要講慢一點。講慢一點可以幫助面試官聽清楚我想表達的意思,順便爭取更多時間思考,還能讓語調聽起來比較有自信。

談薪水

每一次需要談薪水我都會複習這三篇文章:

如果有空我覺得 Chris Voss 的MasterClass 線上課程或書 Never Split the Difference 也蠻有幫助的。

找公司與選公司

知道自己要什麼跟知道如何達成至少一樣重要。在找公司的時候除了開啟 LinkedIn 的職缺 Email 通知,我也會參考各種別人整理好的清單,包括一些 GitHub Repo:

如果有特定想去新創也可以參考

如果幸運能夠有選擇公司的機會,我會先把我自己會考慮的點以及優先順序全部列出來(移民政策、技術、公司文化、地點、薪水等等),然後再帶著這些條件去找曾經在這些公司工作的人問問題,找答案。先列出自己優先順序的好處是不會在問問題以及聊天的過程中迷失自己的優先順序,畢竟每個人所考慮的點都不一樣。

結語

沒有意外畢業後會去 Google 打工。感謝非常多人的幫忙,加上運氣不錯能在疫情下相對早就找完實習跟正職。非常謝謝所有幫我解答疑惑、給予建議、幫忙內推的人,也請原諒我時有忘記回訊息或是禮貌不周之處。特別感謝 Hung Wen、Heron、Shine、Yen-Ming、vgod 、Page 前輩們,以及 Cornell Tech 的朋朋們!

希望這篇有提供資訊給一些需要的人,不管是申請研究所或是到美國來後找工作都非常感謝所有願意讓我請教問題的人,如果有任何問題也請不吝留個言或丟個訊息給我,祝一切順利。


Discuss this article on: Twitter | Facebook.
To get updates when I write, sign up my newsletter below: