2023: 在科技業的寒冬找北美軟體業實習

Chi-Ting Liu
18 min readJan 2, 2024

--

Landscape @ Lanyu, Taiwan

前言

赴美三個月,很高興在明年的暑假會加入 Robinhood 做 Software Engineer Intern,2023 年是對於科技業非常艱困的一年,從去年底開始裁員一波接著一波,目前裁員雖有趨緩但 headcount 仍然非常稀少,上岸機率微乎其微,我想藉著這篇文章提供這個時空下的一個 data point,也對於自己過去的幾個月所做的事情,留下一些紀錄。

這篇文章我盡量提供客觀資訊,也提供完全可以 transfer 到個人的一些技巧(如我做了什麼之類),但請注意倖存者偏差,並且幾乎全部內容都難逃我個人主觀的意見。

我算是對 job market 抱持比較悲觀看法的人(但我仍然很 active 的在找工作),如果有前輩或同儕要出來用好消息打臉我,我是很歡迎 XD

另外在聽了源來適你幾場分享會之後,我才發現我做的遠遠不及真正積極主動的人的一些努力,充其量只能算個乖學生而已,但想了一下還是把我的經歷發出來吧,來美國的人眾多,總會有和我背景類似 (i.e. 沒啥特殊技能點) 的人:)

Target Reader:
即將來美國走一樣路線 or 轉碼的 CS 學生

BTW, 我是沒有身分,在台灣念BS,在美國念MS的人(食物鏈底層),如果你是有身分,或者是在美國念under grad,那這篇文章就沒啥參考價值~

目錄
1. 前言
2. 致謝
3. 先講數字和結論
4. 我的背景
5. 心態
6. How to be well prepared : Leetcode 和 BQ 的準備方法
7. 求職管道:各種資源與內推

致謝

我喜歡把感謝的話放在前面,這樣才會有人看到

  • 謝謝 Alex, Leo,你們讓我在去美國前就做好萬全準備,也讓我問了無數個問題,希望你們在 Full time 的路上順利。
  • 謝謝 Daniel,你教會我很多正確的心態,不管是求職還是人生上都是(還有教會我很多 AOS 作業…)。
  • 謝謝 Max, 從七月開始跟我 mock 了大約十次(還是十幾次?),讓我在面 LeetCode 題上一點困難都沒有。
  • 謝謝 Ray ,前一週的 mock interview 對我有如當頭棒喝,才有了下面 BQ 那一章節。
  • 謝謝 Wen,妳始終是很好的傾聽者,承接我各種心態爆炸的情緒。
  • 謝謝歹晚郎互助網絡、Jimmy Chen、Linkedin 上各種熱心的台灣人 / 華人,雖然我們多半完全沒見過面,你們仍然願意幫我內推,我很感謝。

先講數字和結論

[客觀事實]

  • 從 6/20/2023 到確定簽約的 11/17/2023,我總共 apply 了 405 個職位 (SWE / Backend Intern,沒有 MLE / Quant / Front end),真的看到真人,進到面試階段的只有 4 間 (Akuna Capital, Robinhood, Mathwork, Citadel),其中 2 間最後獲得 offer (Mathwork, Robinhood),其他多半都是 ghost / 寫完 OA 沒回覆 / 直接拒信。
  • 大廠有開缺,但收到下一步的人不多:Meta, Apple, Amazon, Netflix, Google, Microsoft 都有開缺,在 discord 上也有看到有人回報(未知是否有身份),但在我認識的台灣人朋友圈裡面目前(到十二月底)沒有人收到這些公司的面試/OA。
  • 內推有效:我恰好找了 20 位 Referrer 幫我內推,下面會有一章節來寫這個,在我的狀況裡面,網站上海投的基本上全滅。

[主觀評論]

  • 現階段我不建議完全沒有 CS 的背景、轉碼的人來美國,現在 entry-level SWE 競爭非常激烈 (但 2–4 years 以上的職位好像還好?),並且公司會優先考慮不需要 sponsor 身份的人。刷題只是基本,最好能夠把握自己一有面試機會時能牢牢抓住,因為拿到面試就已經太吃運氣了,加上 F-1 簽證時間有限,所以我並不覺得來這裡從零開始學是合理的。
  • 還是有希望:如果以前有特殊的技能點、CS 底子夠、刷題夠、在台灣就有實習或工作經驗(面試官很看重),那我覺得還是可以來,身邊成功上岸的例子也不少,不過請抱持著隨時可能回去的心態。
  • 靠賽遊戲:從投履歷是否會被看到、碰到的面試官人好不好、公司是否剛好有 head count、到以後抽不抽的到 H1B、公司願不願意辦綠卡,運氣佔了很重的一部分,到美國念 CS 早已經不像以前一樣是條康莊大道。

我的背景

  • Georgia Tech MSCS (on campus)
  • NTUEE B07
  • Microsoft RD Intern (at Taiwan)
  • Umbo CV (a start-up) SWE Intern (at Taiwan)
  • 註 1:研究經驗和求職關聯極低,除非是真的很 fit 那間公司的研究(e.g. 你有 system for ML 的論文然後 apply 做這方面的公司之類),但這算少數。
  • 註 2:校名和純 CS(ECE / CS 的問題)是否有影響有待商榷,但我必須說CS名校會加分,我碰到至少兩位面試官跟我聊到 Georgia Tech CS 是好學校。
  • 註 3:在台灣外商實習 (Google / Microsoft / …) 有很大幫助,我碰到的全部面試官都只關心我 Microsoft 實習內容。

心態

比起找工作的技巧和資源,我想要先寫的是心態的部分,因為在美國,太多事情你沒有辦法控制了,心態會比你刷了多少題或多厲害重要,找實習本質上就是一場運氣遊戲,基本上大家都是刷足夠多題、充滿競爭力又認真的人。

Persistent is the key

來自 Ripple Match 的屁話,但必須說真的滿有道理的。如同上述數字與結論所示,投出履歷到拿到面試的機率低於 1%,唯一能做的事情就只有轉換情緒,點點頭繼續再投更多家下去:因為如果不投,就一定沒有希望。

我會覺得在這個時代裡,求職的時候不應該抱任何情緒,就繼續做一個無情地投履歷機器,也許真的能撐到最後一刻的人才有一絲上岸的可能。

Stay humble

有些人會抱持著非大廠不去、時薪非五十元以上不去的心態,但我認為這個心態不對。的確,對於頂尖 CS 學生來說,去非大廠、低薪的公司似乎委屈了一些,但這就是對於市場有錯誤的認知。

截至目前為止,FAANG 動作很少,即使有動作,headcount 也極為稀少,很多較好的公司也優先收有身份的人:試想,對於同樣 qualify 的應徵者,為何不錄用不需額外處理的本國人,而要用一個外國人呢?我想這呼應了這篇PTT文章裡面對於外國人身份的看法。

我會建議什麼公司都投,投到上岸為止,一方面是累積面試經驗,拿到不想去的 offer 也可以拿來 compete 薪水或要求加速面試流程。

學習丟棄不必要的情緒,最好抱持著最低的期待

人(或者我)的情緒太多、太複雜了,我每個禮拜花費了很大的力氣在調整心態上面:試著不要對找工作抱太大的期待、面對拒絕信要毫無情緒繼續努力等等。對我來說這很難,尤其是來美國念書多半是花了高額學費的人。

我最常問自己的一個問題是:如果現在打包回台灣,我會不會一無所獲?

我努力做到讓上述問題答案是否定的,在 GT 修一些好課、不要把重心都放在刷題上、確保自己在變得更強的路上(確定回台灣找工作還的起學費)— 我覺得這有一點效果。

你做的努力大部分都是不會有回報的

還是該說是全部?

大部分的努力都不會有回報,如果說真的有,那也是很小的機率,「剛好」發生好事了而已。但請注意我不是說就再也不用努力的意思,而是不應該對結果有不理性的期待,只應該像前言說的一樣,努力只是為了讓機會來的時候不要錯過,但什麼時候機會會來,我覺得基本上就是靠賽。

我後來自己發明了一個理論是:現在這個時代在美國找工作,太多事情是沒辦法自己控制的,唯一能做的事就是持續去做,總有一天會等到換你的運氣校正回歸

It’s not a failure, it’s steps to success.

這是我很喜歡的一句話,是字母哥在輸掉第一輪季後賽的時候的回答(笑死,我甚至不是字母哥的球迷),從來都沒有失敗這件事,失敗只是你成功的養分之一。

我覺得完全可以 map 到在北美找工作的情況,影片如下,看完就知道我在說什麼。

字母 🈹️

技巧 / How to be well prepared

For 不知道軟體工程師面試會考什麼的人:
面試基本上分成三種:LeetCode、Behavior Question、System Design (實習生很少問,沒碰過),以下針對 LeetCode, Behavior Question 繼續說明

LeetCode

我大學的時候從來沒參加過程式競賽,Leetcode有寫過但可能寫不到50題(而且早就忘光),所以我算是從頭開始的人之一。

我會想把寫 Leetcode 分成兩個 Phase: 100 題以前和以後。

雖然大家都說題目中質不重量,但我覺得這還是個不錯的參考,如果你寫一百題之後發現 Medium 仍然無法迎刃而解,那就代表可能做得題不對,或者沒有熟透那些套路。

當兵的假日還刷題,好扯…

我的 timeline

  • 1 月 ~ 3 月:申請完在等當兵的時候,我每天都寫 5–7 題左右的 Leetcode,這段期間我的目標是把 Blind 75 全部寫完,這段期間我會把我沒辦法第一眼想到,並且有看解答的題目記錄下來,一週後重做一次。
  • 3 月 ~ 6 月:當兵的時候,印了一本強國人寫的 Leetcode 題解 進去讀,裡面大概有兩百題,我覺得其實沒有寫得很好,但拿來熟習題目也算夠。我會把沒辦法一眼看出答案的題目圈起來,六日出去的時候練習這些題目。當兵真的很無聊,任何書都會變得很有趣,我還記得在靶場等打靶的時候把書藏在迷彩小袋子裡偷看,蠻好笑的哈哈哈。
  • 退伍之後到七月中,我拿到了 LC Premium 的題目單,那時候我大概知道這些題目的套路了,於是開始挑難題寫(Google、AirBnB 的都滿難的),並且那時候和 Max 每兩天會 mock interview 一次直到八月來美國,落地前我大概寫了250題左右,這時基本的 Medium 大概都能秒解(這樣就夠了)。
  • 八月來美國後實在是太忙了,忙著生活(生存)忙著適應課業,所以寫題目的時間變得很少,到十月開始面試前剛好寫了 300 題左右。

簡單來說,只要能夠掌握下列 LeetCode 技巧,並且 Medium 題目能秒解的話,那我覺得 LeetCode 部分就差不多了,可以開始準備 BQ,BQ 反而是分辨高下的一個重點,而且 native speaker 都很會講話。

關於 Hard 的題目:我認爲真的面試考很難的 hard 機率不高(除了做Quant的公司),如果真的考很難的 hard,那也只能說運氣不好。但練 Hard 也是有好處的,多寫幾題 Hard 之後回去看 Medium 就會覺得很簡單

我對於各種題型,記錄了模板面對他們,並且利用 Leetcode 的 tag 把這些題目練到閉著眼睛(?)也能寫得出來的程度:
BFS/DFS, Binary Search, Two Pointer, Heaps

另外這些也很重要,每一種我也有紀錄的模板和寫法
Disjoint set, Topological Sort (Kahn’s Algorithm), Trie, Dijkstra

我的 Notion 表格

Leetcode面試技巧

在把 Leetcode 練得足夠熟之後,就可以來和朋友一起 Mock Leetcode Interview 了。

LeetCode 面試的流程如下

  • 前 3~5 分:互相自我介紹、說明流程
  • 5~40 分:通常是一題 Medium ~ Hard 之間難度的 Leetcode,可能有相關的 follow up 到兩三題,或者面試官會請你解釋做法和複雜度
  • 40~45分:對面試官提問

這裡說明中間 5~40 分的部分要做些什麼,自我介紹放到下面 BQ 那段

我的一個學長教我下面的流程,我覺得非常實用,也分享如下:

  1. Ask clarification question
  2. Come up with some example and work them out by hand
  3. Explain high level approach. If no idea, explain brute force
  4. Write pseudocode. Be careful don’t put in too much implementation details
  5. Proactively propose time and space complexity
  6. Ask interviewer if we can start coding. Use simple and straight forward code first then optimize later

面試官會從某處貼來題目,或者你本身就在某個平台裡面看到題目,讀完題目之後,最好先舉幾個例子 clarify 題目的意思

確認題目的例子之後,先寫 pseudo code 和 function 在註解會是好的做法,這樣等你問完是否可以開始做的時候,就可以按照這些註解一塊一塊寫下去。

Behavior Question

我個人覺得對於找實習來說,BQ 比 Leetcode 重要很多。理由是 Leetcode 刷題那一 part,基本上有準備的人都不會做的太差,真正能 set you apart 的是你是個好相處 / 有特殊技能 / 好合作的人。

對於不知道或從未準備過 BQ 的人,我推薦先讀完這篇 徹底擊碎行為問題,看完就會對會碰到什麼問題有點概念。

另外,我也滿推薦去看一看各種 Youtube 上面對於 BQ 的教學影片,Jeff Su 的頻道讓我學到很多。

CARL 原則
和傳統的 STAR 不同,CARL 的架構是 Context, Action, Result, Learnings,這會非常適合回答 Behavioral Question,我的理由是在 BQ 的問答環節,最重要的是想看到你這個人的可塑性、可以相處的特質,因此 Leanring 會顯得格外重要,即使 Context 有點無聊,Action 有點簡單,但如果能夠達成好的結果,或者在做這個 Action 的過程中你有學習到什麼 (e.g. 調解紛爭),那都會是好的回答。

我覺得 BQ 不好的回答是:花了大部分時間在講背景,或者詳述你做了什麼技術細節,卻沒有提到你的動機或收穫,這樣常常會讓面試官失焦,並且這些技術性的內容,通常不會是 BQ 環節想要考察你的重點。

Jeff Su 剛好有一個很好的影片講述 CARL 原則,我覺得值得一看

針對題目背後想問的價值,對症下藥
大部分的 BQ 題目,都有背後想問的核心價值,所以該根據它們來設計答案,簡單羅列如下一段,剩下在徹底擊碎行為問題裡面有詳細討論,但我覺得他寫的也不完全對,再多查一些 youtube 別人的回答比較好。

如何準備
我準備了下列這些問題,並且在面 BQ 的前一個禮拜,每天走在回家的路上都隨機問我自己這些問題,直到我可以滾瓜爛熟的講出設計好的答案為止(但這當然是因為我不是英文高手才需要這樣,如果你是口說大師,注意每一題都回答到重點就好)。

  1. Self Introduction
    自我介紹可以從動機開始說,再到你的經歷,最後連結這份工作。重點是要多讀 Job description,並且說得好像你是超級 fit 這個職位的人。
  2. Why XXX company
    可以去查這間公司的 Core Value,或者他們的使命是什麼,而這個使命恰好跟你過去的經驗有關,有打到關鍵字會是加分。
  3. Tell me about a time you failed
    這個問題的重點在 self-awareness, determination, willing to improved,你必須想一個故事,說明你失敗的經驗,並且最後一定要花更多的篇幅講你從這個失敗的經驗裡面學到了什麼
  4. Tell me a time where I have conflict or disagreement with a coworker
    這個問題重點在你能否有和別人合作,並且解決問題的能力。合作的方法有百百種,我也不確定怎麼回答比較好。
    我自己後來想的回答是:我在寫 NTU Rating project 的時候,因為不確定首頁要做 search oriented 還是 content oriented,因此和隊員有了爭執,但最後我們決定發送問卷做一個詳細的 survey,並得出一個以前沒想過的結論是我們可以做 recommendation system,於是我從中學習到有衝突的時候,或許盡可能的訴諸手上能有的客觀資料來下決定會比較好。
  5. Tell me a time when you need to meet a tight deadline
    這個問題我認為好的回答是講述一個經驗表示:你會在接下這個任務之前,就先做規劃 (e.g. 甘特圖),並且每週開會讓大家知道進度,並且在需要幫助的時候提出需求。如此一來,即使這是一個 tight deadline,大家合作上也會比較知道進度。
  6. Tell me about a time you got stucked / handle difficult situation
    有點忘記這題要回什麼了,我自己好像沒有想到一個好的回答。
  7. Tell me a time that you handle ambiguous requirement
    這題我認為是考察你 “above and beyond” 的能力,也就是說,你能不能在要求之外,積極主動地做更多事情。可以講一個真的碰到模糊要求的時刻,並且說明自己多做了什麼事,最後大家皆大歡喜。
  8. What is your weakness
    這題我認為重點在 Learning and willing to improve,你必須要先說出一個你真正的弱點,但請注意你也必須說你正在 taking step to improve。其中我覺得比較 tricky 的部分是,這個弱點必須是真正的弱點(不準回答我的弱點就是我太認真了都不休息這種國中生答案),但又不能對你現在這個應徵的動作造成威脅,所以好的回答是挑選一個 “不是” 你現在這個職位要求,但的確是個弱點的弱點。我想到的像是一般我們不會要求 intern 有很強的 Leadership 能力,所以這就是可以講的,如果講我的弱點是 sloppy,就有點不妙了。
    我自己的回答是 i am a little bit shy / introvert, I found it difficult to talk in front of lots of people 之類,然後說我現在有在努力參加活動或爭取上台報告的機會進步。
  9. Tell me about a time you worked under pressure
    這題我也忘記要回啥了,但反正上述應該夠用了XD

總而言之,請務必根據這些回答的重點,想一個專屬於你自己的經驗和故事,Behavior Questions 都大同小異,事先準備三到四個經驗和情境,應該就可以回答大部分的 BQ 了。

Chit-Chat is more important then you think

美國人很喜歡閒聊,在面試開頭的時候一定會來一句 How is it going,結尾順便再送上一句 Have a nice weekend。我覺得在最開始的時候和面試官輕鬆聊聊天是重要的,一方面減緩自己的緊張,一方面就我和學長的經驗,只要聊得開心,基本上通過機率不會太低。

我在面 Robinhood 的時候,因為是星期五下午,我一開頭就先表達了很感謝你星期五下午還來面試我,你一定想趕快下班之類的話,讓對方會心一笑,後面的面試就會順利很多。

求職管道

在哪裡知道有哪些工作可以投?

我使用以下資源:

  1. Simplify 的 Github repo
  2. Discord 群組看外國人回報,再去找公司官網
  3. LinkedIn 職缺
  4. Career Fair(傳說在 Career fair 的報名表單可能比較容易被看到?)
  5. Indeed (沒用過)

怎麼找內推?

  • 歹晚郎內推互助網絡 (Excel, 說明)
    這是我用過最好用的內推網站了,上面的人都非常友善,禮貌一點詢問,內推成功率很高,非常感謝維護和創辦該表格的 半路出家軟體工程師在矽谷 和願意幫忙內推的人們,希望有招一日我也能成為有能力幫助別人的人。
  • LinkedIn
    LinkedIn 是很好用的平台,我的做法是輸入公司名稱,然後開始去私訊華人 / 台灣人 / 台大校友 / GT 校友,通常如果有相同的連結或經驗,禮貌一點問的話,願意回覆的人找到內推的成功率滿高的。

我今年的經驗來看,海投直接死掉的機率滿高的,所以我的策略是大公司內推,小公司海投,但內推需要時間,有人主張越早投越好,因此這些可能就會有一點 trade off。

聯絡我

可以找我的 LinkedIn (https://www.linkedin.com/in/chi-ting-liu/)會回比較快,我是鍵盤社牛…

結論

希望景氣會慢慢好轉,我已經做好明年打包回家的心理準備了,但還是得繼續努力 :D

--

--