Tokyo
(Tokyo, credit to Derrick Brutel, under CC BY-SA 2.0)

我在碩三的時候去米蘭交換,其中一個目的便是了解自己是否會喜歡在國外工作。就結論來說我認為米蘭也許不是一個我最想工作的地點,但無庸置疑讓我體驗了在國外工作以及了解文化多樣性是怎樣一回事,我了解到自己會想出國工作,我想出去闖蕩,喜歡接受文化衝擊,想要挑戰自我。

2022 年初又發了意料之外的事情,我在米蘭交了一個日本女友,本來畢業是想去歐洲找工作,這下目標變成去日本東京找工作了。我從不擔心在國外找不到工作,軟體工程師基本上哪裡都有工作,而且只需會講英文就好了,我在米蘭的時候就有試試水溫找軟體開發的兼職缺,不到一個月就順利找到,更讓我堅信自己在哪都能找到工作。

說一下我個人背景,交大資工所、碩士研究平行化 JavaScript 程式的 Offloading(廣義來說偏系統軟體)、台大生機系,不會說日文,因為去義大利交換過,義大利文沒學會倒是講了不少英文,所以英文程度還可以。沒有日本學歷、不會說日文(N6 水準,日文溝通的工作的基本門檻是 N2),沒有正職工作經驗,以外在條件來說想在日本找工作非常不利,因為及使日本喜歡收外國工程師,也只是喜歡直接挖資深工程師,何況我一點日本相關背景也沒有,有誰要用一個外國新人?

2022 年三月我從米蘭回台灣,一邊弄畢業一邊開始找東京的工作。五月初我從交大畢業,五月中旬拿到滿意的 Offer,最後五月底飛去科隆度假。經歷快三個月的過程,我最後幸運地拿到並選擇了 Mujin Corp. 非常好的 Offer。這篇文章分享我回台灣三個月期間找東京軟體工程師職缺的心得。當初不僅旁人都不看好,我自己也一直抱著懷疑,但即使在這樣條件下,最後我還是幸運的找到了工作,相信我的經驗應該可以給相同背景的同學當作參考。

日本新卒概述

日本大學社會新鮮人稱做新卒,一般來說新卒找工作都是前一年先拿「內定」,然後隔年上工,概念上很像台灣的校園招募,只是台灣的校園招募比較常見是下學期開始,也就是大約距離畢業半年前找到工作,或著甚至畢業後才開始找工作也很常見。

由於日本畢業季是四月,所以一般公司的內定招募大概也是從前一年的三月開始,另外大約十月的時候也會有一波招聘但名額會比較少。不過由於我們是外國人,所以日本人玩的新卒招募我們大概也不太有幫助,但一些大企業像是樂天、Line、Mercari 等公司在招日本新人的同時,也會釋出專門給外國人新人的缺,所以想進有收外國人的日本大企業的話,時間點也要注意。

如果是走外商招募、獵人頭、或是 LinkedIn 上職缺,就比較沒有時間的差別。外商基本上新人大概沒機會,我自己的感受是外商 title 沒有掛上 new grad 都不用妄想,甚至就算收 new grad 也輪不到海外的新人。獵人頭我也有諮詢過,但結論是我認為獵人頭對新人來說一點幫助也沒有,獵人頭主要還是鎖定資深工程師,新人要馬是沒有工作機會,要馬就是不屑理你。我覺得最有用的還是 LinkedIn,會把職缺放上 LinkedIn 的公司不管是大公司或小新創,都是比較願意收外國人的,我大多數的面試機會也都是從 LinkedIn 來的。另外一些管道像是日本的求職平台(Quitta Jobs、Findy 等),雖然有些平台聽說也很樂於收外國人,但基本上這一類的平台是給會日文的人準備的,所以我用了一下就直接放棄。最後就是內推管道,如果有認識外國工程師或是台灣在日的工程師,可以請他們幫忙內推,但整體來說,海外新人就算被內推大概也是直接被刷掉(也有可能是我條件差)。

為了方便區分公司的薪水行情,以下簡單介紹一下日本軟體工程師行情。一般日本大學畢業生拿的薪水大約一年四百萬日圓,像是 Sony 或 Softbank 等普通日本公司開給資工新人的薪水大約這個價,姑且稱為均標。比較好一點的公司,例如 Rakuten 或 Line 會開到五百多萬日幣,再好一點的公司像是 Mercari 會開到六百多萬日幣,姑且稱這個為高標,再甚者,如果開的起七八九百萬日幣以上,就是頂標了,一般普通的日本工程師大約要工作四五年才有機會到頂標的薪水。整體情況跟台灣有點像,台灣大部分的工程師起薪大約一百萬台幣左右,但台清交資工畢業去竹科第一年就有機會年薪一百五以上,所以起薪跟學歷和能力還是有關係的。

履歷

履歷是找工作的關鍵。因為我都是找英文職缺,所以履歷就採英文履歷的標準寫法,如果找日文職缺,日本的履歷寫法又非常不一樣了。我有習慣把 Resume 不同版本都放 Github 留檔,所以大家可以參考一下我當時的履歷長什麼樣(Link),關於怎麼寫履歷網路上已經有非常多資源,我就不老生常談。不過履歷我前前後後修了超過一個多月,過程中有一直給學長姐還有老師審視,一直修到我滿意的版本。

雖然已經很多前輩提醒過了,但我還是要再次提醒,履歷寫什麼真的就會被問什麼,不熟的東西不要放,放上去的東西就要有辦法講的天花亂墜。大多數況下,我的履歷寫的內容都會被問,有時候還會被問比較早期的經驗,因為已經很久遠了,那時候沒準備,回答起來也是很卡,此外先前我把自己 C++ 的程度定義在 Proficient,但後來被考幾次之後,索性改成 Experienced,某個語言或技術沒寫超過十萬行有意義的程式碼,或是貢獻過超大型專案(百萬行等級)之前,都不要說自己「會」比較好。

面試

如果想找英文職缺的軟體工程師,至少英文不能講太差對吧(笑)。我覺得以資工的訓練來說,通常我們英文不會太差,畢竟寫程式本身就是英文,第一手網路資源往往也是英文,平常有參加開源專案或是一些國際社群也會用英文溝通,但我覺得台灣人聽讀基本上沒問題,但要開口就困難了,因為台灣沒有講英文的環境。英文要能說的順就是要刻意練習吧,我是因為去米蘭交換,都在跟外國人混,每天都在講英文,雖然不是講麼高深厲害的英文,但至少可以善用兩千單順暢無阻的表達自己的想法和意見。

我自己面試的經驗,大多數情況招外國人的英文職缺,裡面工程師也都是外國人,講英文其實講得很舒服,大多數英文程度都比我還很好多,少數情況面試對像是日本人,這些日本人也都有留學經驗,英文講的也不差,不過也有一些例外,如果一家公司想收外國人英文又講的不好,基本上就會直接被我排除了。我認為英文溝通最困難的部分是聊一些政治、文化、興趣或是辯論或談判,相較之下用英文去講自己的學經歷和「程式怎麼動」是非常簡單的話題,我相信只要多練習,不用到托福 100 都可以講得很順暢。

正常日本面試是一定要穿得很正式得體,所以一開始我面試的時候還會至少穿個襯衫,後來我發現面試官基本上都外國人,大家也都很隨性的,即使對像是日本人也是比較歐美風格,所以面試的時候就隨便穿就可以了。

之前永昱有建議我要同時找國內公司,就算不當保底也可以當練手,因為在沒面試經驗情況下去找國外工作很容易被電,其實滿合理的,一間公司要用外國人的話,人選自然必須是高過於一般水準。但其實我隨便丟基本上都沒拿到台灣的面試機會,不過就算有拿到面試,基本上心態也不正確,後來我覺得有點沒必要,如果像我一樣已經一心只想出國的人,台灣的缺就不用丟了,除非是國外或台灣都可以的人,則可以都試試。

面試過程中有陸陸續續刷了一些 LeetCode,不超過 30 題,主要都是 Easy 搭配一些 Medium 和兩三題 Hard。整體下來 LeetCode 類型的白板題只有少數公司會考,我感覺我刷 LeetCode 沒啥實質幫助,但對於維持寫程式手感還是有不少幫助。一些公司考實作能力,比方說現場實作一個簡單的 LRU Cache,或是出作業回去做,像是寫一個功能完整的 Restful Server,或是考你會不會讀程式碼,可以說經歷不同的面試真的大開眼界,所以主要還是考長時間的實力累積,不是短時間衝刺能準備的。

關於準備面試,jserv 開的「資訊科技產業專案」看了我覺得挺有幫助的,我覺得或多或少都能從中提取經驗。另外我覺得多找老師、學長姐或朋友請教和討論也非常有幫助。

一個感觸很深的部分是,不管我有多少實習經驗,或是做過多少 Side Projects,雖然有總比沒有好,但事實就是這些對於公司而言都是家家酒,正職需要的經驗和 know-how 遠遠比那些小專案能學的還多,像是我過去寫了一些 C++,但那些對於資深工程師來說就是 hello world 而已,或是我的研究是平行化 JavaScript,但我對 Parallelism 和 Concurrency 了解的也只有皮毛。所以我很同意永昱說的,事實上我就等於什麼都不會,不用想著自己會什麼,因為實際上如果一家公司願意收一個新人,那看中的絕對不是他目前會什麼,怎樣說服對方自己是一個受過資工紮實訓練的畢業生以及展現自己的潛力比較重要。

整體來說面試就是不斷學習吧,面試個五六次之後,我連一些適性問題都可以輕鬆回答,一開始我覺得最困難的問題莫過於「為什麼想來日本」,我總不能說因為我女友在日本吧 😂。後來我想出了一套強而有力的說詞,我自己都覺得沒破綻,簡單來說就是想出國看看,日本有很多朋友,日本離台灣很進隨時可以回家看父母,從小就喜歡日本文化等等如此這般,總之是一個不會被質疑的好理由。我覺得面試就是多是幾次就會越來越順了,我大概投了二三十家公司之後才終於拿到第一個面試,前面就算有回應也都是書審直接拒絕,找工作真的要沉住氣,開始拿到第一個面試之後狀況就會慢慢好起來的。

找工作過程

以下簡述我找工作各公司的經歷,雖然我研究所是系統軟體研究室,但我主要都鎖定 Full Stack Engineer 或 Backend Engineer,只有這兩個職稱有拿到面試機會,其他我也投了亂七八糟的 Developer 或 Engineer 都是沒消息。以下介紹都是我至少有拿到面試機會,或是我覺得值得提的公司,更多是投了完全沒消息或被拒絕的公司,除了幾個有名的大公司我是直接去官網看職缺,大部分都是每天滑 LinkedIn 看有什麼工作機會。

平淡無奇的失敗案例

MercariLineRakuten 是幾個知名收外國人的企業,新人基本上都有機會。Mercari 從三月就開始新卒招募,其中包括外國人,我線上測驗一題都沒寫出來直接被淘汰。Line 我三月底投了外國人新人缺,四月底收到線上測驗考題,五月中通知可以進入下一階段面試,但這時我已經接了 Mujin Offer ,就直接放棄面試,我覺得 Line 感覺拖拖拉拉的,我女友投日本新卒的設計職缺也是流程拖很慢。Rakuten 我忘記是那個方式進入到面試流程,因為我網站投、Connect Job 上面也有投,台灣的獵人頭也有丟,總之後來有拿到一個 Rakuten 的 Junior 職缺面試,面試流程跟這篇文章講的一樣,先是一題超級 Easy 的線上題目,我覺得完全沒有鑒別度,然後總共兩關只聊天的面試,第一關是三個外國工程師問一些履歷相關的經驗,第二關則是兩個日本主管發問,有問一些背景相關,更多是適性問題,像是怎樣去學習新知,碰到問題怎樣解決這種,我第二關回答的時候講的挺順的,我本來以為穩了,不過最後樂天沒被錄取,我也不知道原因。

Amazon 和 IBM 我不管怎麼投就是沒有回應,嘗試各種職缺,甚至還找了內推都沒用。SmartNews 找了內推也沒下文。TeamLabs 寫完線上測驗也是無聲卡。Hennge 應該是不錯的公司,但是他們要求新人要先參加他們全職實習計畫才考慮收為正職,後來拿到因為已經找到工作就直接不考慮,不過他們的實習計畫每年有好幾梯次,有考慮未來去日本發展的學弟妹可以趁早做規劃。Ridge-I 這家公司要先考線上測驗,三題 Easy 題,我甚至半小時就寫完,結果結果線上測驗沒通過,我也是整個傻眼完全不懂為啥。Ascent Robotics 是做工廠機器人相關,跟外國 CEO 談完之後,就被無聲卡了。Preferred Network 要先寫線上測驗,但他的題目太鳥(太複雜且沒意義),我直接放棄不做。NABLAS Inc. 是一間很像國網中心的 AI 研究導向公司,公司就直接設在東大對面,我覺得是一間挺好的公司,想鑽研 AI 技術或是高性能計算都可以考慮,第一輪面試是了解公司概況,二面會有一個三小時技術面試,然後就會決定是否錄取,薪水應該介於高標左右,但我那時候已經拿到 Mujin Offer 就直接放棄二面了。此外,我也有遇到一些很鳥的公司,像是 CEO 英文不好還想收外國人(重點是那是英文缺),或是 CEO 自己都不會介紹自己的公司,如果 CEO 自己都不能賣自己的公司,我不知道要應徵者怎樣去想進那家公司,也有一些公司只開的起不足六百萬,這些都直接被我淘汰。

順帶一提,過程中投了台灣外商 N 公司想說當練手,結果被電爆,我投了平行化相關的職缺,我以為會像一般的考法就是考考演算法,結果先考 C++ 類別基本操作的除錯,然後考 OpenMP 使用,我回答不出來所以提前結束面試,原本似乎還會被問 GPU 程式設計的問題。我覺得我的程度完全沒被考出來,在我認知中 OpenMP 要用的時候不就是查一下語法,GPU 計算我每次也是抄範例來改。最好笑的是,最後考官問我是不是沒修過平行程式,好險他沒仔細看我履歷,如果他知道我是平行程式助教,還拿到傑出助教獎,不知道作何感想,也好險他沒認真看履歷,不然不就丟了我教授的臉了。另外 N 公司的小主管面試的時候也不開鏡頭,我第一次看到這麼不禮貌的面試官,過程中還一直催說這題一般人大概 10 分鐘可以解出來之類的,那次體驗是我這次找工作下來最差的。

值得說的失敗案例

Japan Computer Vision 是我找工作過程中第一個拿到的面試機會,是在「矽谷輕鬆談」的 Slack Channel 找到台灣的工程師幫忙內推。那時候我投了非常多公司都沒下文,因為這個內推拿到了第一個日本的面試機會,讓我信心增加許多。這家公司很好玩的地方是,明明是日本公司,但裡面都是講中文的工程師,後來發現這種現象在日本不少見,可能是中國人遍布全世界的關係吧。應徵職缺是 Full Stack Engineer,一面是兩個前端工程師考 JavaScript 的一些特性和操作,二面是兩個後端工程師一個考 DP 一個考實作實現多執行序操作的 Key Value 資料結構。兩次面試我都沒表現好,我碩論都在研究 JavaScript 但是我發現我懂得 JS 還是比較片面,然後演算法一向是我的弱點,被考 DP 直接掛,雖然後來我依舊始終沒去練 DP 就是了 🤪。這家公司是軟體銀行底下的新創,我感覺應該是滿不錯的公司,職缺沒有直接招新卒,新人如果能進去薪水應該是高標到頂標之間。

Boostdraft 是一家規模六七人的新創公司,主要產品是給律師用的法律文件專屬編輯器,我認為這是非常有前景的產品。我總共面了三次,第一次跟 CEO 聊天,第二次 CEO 考偏字串處理的演算法,被問了一個我沒想過的問題,如果我要寫測試要怎樣設計測試才能最有效驗證程式的正確性,這不單單只是回答寫 Unittest 而已的問題,第三次則是由另外一個工程師考演算法。第三次面完之後我就被拒絕了,我想這家公司還是想收資深工程師來當即戰力吧,我是相當看好這家公司的前景,程度夠強的人也許可以考慮看看,薪水我猜應該是高標左右。

Asprova 是一家做工廠人力排程軟體的公司,新卒起薪頂標之上(八百萬到一千萬),可以參考這篇這篇文章。這家公司的人英文都不好,雖然願意招收不會日文的外國人,但最好有日文底子或是抱著之後一定要學會日文的心態。面試這家我是挺感動的,我的面試流程跟網路上分享的都不一樣,一面就是直接跟主管面,主管基本上不會英文,我跟他大多數時間是靠 DeepL 翻譯溝通,因為溝通效率有點差,我跟他總共面了快三個半個小時,是我有史以來單一個人面試時間最長的,過程中考了閱讀程式碼的考題,給了一大串程式碼,讓我花半小時看去分析這段程式碼的記憶體配置。主管人挺好的,可以看得出他求才若渴,即使有語言障礙也被深深打動。後來我又面了兩次,或著說跟兩個不同的工程師聊天了兩次,一次是中國人一次是新加坡人,主管好像交代他們只需要跟我聊天不需要考 Coding。我認為 Asprova 對面試者是非常有誠意的,願意花很多時間去跟你聊天,我也在聊天過程中知道這間公司不適合我,後來就婉拒後續面試了。簡單來說我考量點有兩個,一個是這家公司產品偏向成熟,目前主要都是偏向維護,比較少創新,另一方面這家公司需要講日文,我認為溝通都有障礙的情況下很難把事情做好。

Cogent Lab 是一間應用 AI 來處理文件有點規模的新創公司,這家公司也都是外國人,英文都偏英式。一面簡單跟工程師聊天聊了一下背景,接下來出了一份作業,簡單來說是用 Node.js 實作一個 Restful Server,在做這份作業時要考慮一下系統架構,包含要支援多執行序、串接 DBMS、加入 Message Queue 等等,對方給了兩週的實作時間,實際上我大概花了三四天,並且在這份作業中第一次接觸 Docker Compose,我寫的作業可以在這邊參考。二面就是直接針對實作來做討論,我覺得是好玩的,針對架構做討論,然後被要求做當場一些修改,或是去修正沒想到的錯誤,我覺得比起直接被考演算法,這種考實作系統的考法對我來說比較沒壓力,兩小時算是很輕鬆的度過。不過二面完之後就收到拒絕信,有可能是我寫的作業程度不夠,或是我有那邊不合格吧,但我感覺主要原因還是他們比較想收資深工程師。

Paidy 是一家做金融支付的公司,這家也都是外國人,我面試的 Backend Engineer,一面跟主管聊天了解一下彼此背景,然後對方出了一份作業,也是實現一個 Restful Server,然後要求要用 Rust 和 Functional Programming 來實作,我大學之後就再也沒寫過 Rust 了,而且我以前寫 Rust 的時候也沒寫多執行序程式,寫這一份作業對我來說還是有趣的,我等於學習了怎麼用 Rust 去寫並行程式,我對我寫的作業還是挺滿意的,雖然我覺得我的 Rust 應該寫的很爛,然後可能 FP 大概也沒怎麼用,但以一個專案來說應該是完整的,功能都正常運作,還附帶完整的測試。這時候其實我已經拿到 Mujin Offer,但因為我覺得這作業挺好玩的,我還是花了不少時間把作業寫完,不過交了之後連下一個面試都沒有就直接被拒絕了,可能是光看作業覺得我程度不夠吧。這家我感覺應該也是挺值得加入的公司,有規模的金融公司的 Backend 絕對不會無聊,背後技術主要是 Rust + Go,我猜薪水應該也給到高標到頂標左右。

拿到 Offer 的案例

Monoid 是一間軟體顧問公司,是由一群中國留學生所創,正職員工五人,成立沒幾年靠著接案營收達兩億日圓,成員學歷都挺高的,新創小公司能有這麼高的營收我覺得他們絕對有一定本事。面試就一關,大約一小時多,問了一些基礎的程式觀念和演算法而已,剩下時間都在了解公司,我其實有點訝異流程這麼快,但他們好像已經先調查過我,包含我寫的 Blog 和 Github,所以面試可能只是做最後確認。面試完不久我就收到正式 Offer,薪水為高標水準,這家公司願意接受 Offer Compete,他們似乎開的起更高,有點不怕開不起薪水,只怕你不夠格的味道。我滿感謝這家公司的,我五月初收到 Offer 後瞬間讓我充滿信心,因為不論如何這下我已經確定能去日本工作,何況薪水還挺好的。

Mujin Corp. 是做工廠機器人的控制器和管理平台的公司,我一開始應徵的是 Full Stack Engineer 後來經 HR 協調改成 Backend System Engineer。一面是跟 HR 聊天了解一下公司,中間大約等了兩個禮拜,我還以為這家沒了,結果好像是他們內部溝通流程的問題,接著二面試跟部門主管面試,直接省去寒暄廢話,一開始就直接考 C++,只考了如何實現 LRU Cache,我感覺並沒有太大的困難和陷阱,程式考試大概 40 分鐘就結束了,接下來我大概跟主管聊了 40 分鐘了解他們的技術以及我能在裡面做什麼以及學什麼。二面結束之後有一個回家作業,有 48 小時可以去完成。我覺得二面算是普通程度和個性測驗,關鍵是接下來的作業,這份作業我認為鑒別度十分強,我自己都一度想放棄覺得會被淘汰。簡單介紹一下這個作業,他們公司內部有用到一個機器人相關開源專案,作業的第一步是想辦法把這個專案 Build 起來,困難點是這個專案不是 Tensorflow、Chromium 之類的專案,有一大堆文件可以查,這個專案基本上他的文件就是程式碼本身,我被規定在指定的 OS 上去把他編譯出來,過程中會遇到一大堆編譯錯誤,我必須靠著經驗去摸索還有排解各種問題,作業說明也只有簡單一句話說想辦法把他編譯好,有點像在公司被丟了一份工作,要在沒人指導和幫助的情況下,獨立搞定出來,過程中我一度卡了七八個小時完全沒進展(要知道我只有 48 小時),真的會讓人很想放棄,所幸後來還是搞定了。想辦法編譯出來之後,接下來就是簡單實作一個 Restful Server,然後會需要用到前面編譯的程式來做一些工作。可以說編譯的部分就是整個作業最難的地方,後面的 Server 實作反而沒啥難度。從本來都快放棄,到後來提早交卷,主管似乎很滿意我的作業成果,原本可能還會有個面試討論作業內容,但似乎就直接跳過,順利拿到了 Offer,Mujin 一開始 HR 就有跟我說新人起薪大約六百到九百萬,我實際拿到的 Offer 也確實有頂標,還有其他附帶好處,例如加入 Mujin 申請永久居留直接加 20 分(日本申請永久居留有一個分數表,滿 70 分工作滿三年可以拿永居,滿 80 分甚至一年可以拿永居),而且在 Mujin 我就可以繼續做系統軟體,整體而言我都覺得是非常好的機會,於是拿到 Offer 不久就直接簽了。

結論

目前我在德國度假,回過頭看,這一切都非常不可思議,若不是因為女友關係,我也從沒想過人生第一份正職就直接在東京開始,作為一個沒有任何有利背景的海外新卒,我很幸運能在三個月內找到滿意的 Offer,我曾經想過為了能在日本工作,就算薪水只有均標到高標之間也可以,但最終很高興能遇到賞識我的公司並給了待遇很好的 Offer。

我覺得有時候就是要勇敢去做,所有人聽到我一個新卒想要在日本找到工作都覺得沒什麼希望,但即使看起來沒什麼希望,我相信只要義無反顧的往前衝就會有機會。我也很慶幸自己專業是資工,找的職位是軟體工程師,我相信當今世界,只要有心,任何地方都找的到軟體工程師的職位,這也是我找工作過程中最大的優勢。

找工作的過程中我也學到很多,不管是怎樣面對外國人的面試,或是在寫不同公司的作業,我特別喜歡出有趣作業的公司,這讓我很享受求職的過程,不僅寫的開心也學到新的東西,我也很感謝過程中有提點我不足的面試官,讓我可以持續的改進。

現在唯一一個小小擔憂的點是上工預計是三個月後,我只希望這段期間不要有任何變數,讓我可以順利上工開始東京的生活。最後希望這篇文章能幫到日後也像我一樣想要去日本找軟體工程師職缺的新人,