日本一直以來都是臺灣人海外求職的一個選擇。不只是旅遊相當便利,就算要回臺灣,也只花費不到幾個小時。職場的暗黑文化雖然時有耳聞,但也不乏思想較為現代的公司。
我的前公司就是在眾多傳統日商中,少數願意接受開放思想,而且盡力(即便緩慢)在變化的公司。它對新鮮人來說起薪可以,既不操也不黑,卻幾乎沒人認識。
比起交戰守則,這篇更像是遊記。
我會談到我如何從零開始在日本找到一份軟體工程師的工作,想要找到一間穩定 + 不操不黑的公司的人,這篇可能會適合你。
想要看如何在海外拿高薪成為人生勝利組的人則可以左轉。
如果有幸出續集,將會接續分享在東京工作生活了兩年半的零碎記憶,以及為何離開前公司。
《Disclaimer》
任何好與壞都會照實呈現。但一切都是以我的個人觀點出發。不一定適用所有人。
請問你哪位
- 112 BS + CMU MS MechE
- 原本以為會做機構設計、數值模擬,想不到 CMU 把人都變成了軟體的形狀
於是跟著到處投履歷,畢業前共拿到美國三個 + 日本一個 offer
- 美國太多人談了,所以這裡談談日本
怎麼找到這家公司的
2018 年 7 月底,再 5 個月就要畢業,找工作找到焦頭爛額,萬念俱灰。曾經拿到的 offer 又被我拒絕了,著實是窮途末路。靈機一動,在 Linkedin 上順手一搜,找到了一個來自臺灣的日本獵頭,於是丟了 Cold Message 主動詢問職缺。
當時已經過了日本求職季,開缺不多。僅有少數公司長期在找人。而我的前公司 Asprova Corp. 就是其一。
簡單介紹一下。
Asprova 的業務是販賣生產排程軟體,客戶是各大製造商。由於是買斷制的 standalone software,商業模式很類似轉訂閱制以前的 Adobe 或是常見的工程軟體 Matlab/AutoCAD。想當然爾,主要工作內容就是寫新功能、修 bug、測試、發更新版。
特別的是,Asprova 在這塊利基市場的市佔率是日本第一。海外以歐洲的業務拓展最為迅速,中國其次。開發則是 100% 在日本總部。
創業二十幾年來幾乎沒有遇到強勁的對手,也因此「穩定」成了一項優點,同時也是我離開的原因。
官網上的 Job Description 幾乎沒變,簡單翻譯一下,省下大家 Google 的時間
- 職位:開發工程師
- 職務內容:開發 Asprova APS
- 資格:一到二個月之內能夠理解 100 萬行以上的 C++ 原始碼,或者在競賽中曾取得良好成績
- 國籍不拘,但入職之後需要學習日文,並以日文工作
最重要的待遇沒公開,但當時的數字是年薪 700 多萬日圓(本薪 + 分紅)。日幣真是難懂,直接換算的話是美國新人的一半,可是跟 Line 福岡比差不了多少,試一下不吃虧,對吧?(入職兩個月後漲到 8 位數,有續篇的話再說明發生了什麼事)
順帶一提,日本這個級距的年收,總稅率約 20%,實得(手取り) 80%。
(更:各路大神表示我少算了,實際稅額高於 20%)
さぁ,來面試吧
面試題目對板上各路大神來說完全不難,我寫出細節只是希望盡量還原時空背景,讓各位可以體會我當時的心境。
一面 | 技術面試
如果人在日本,會在公司進行。而我約了線上面試,時長約 1.5 小時。前一小時是 LeetCode,最後半小時是基礎技術問答 + Q&A 時間。
由於我完全不會日文,面試採英文進行。面試官是個新加坡人,難度是 LeetCode Easy。哈!我已經面過好幾家,Easy 等級的題目秒殺吧。遺憾的是,我高興得太早了,面試工具是早年公司自己開發的平台,只支援 C++03。
只支援 C++03。只支援 C++03。只支援 C++03。
Okay cool,我們的好朋友 std::unordered_map、美妙的 move semantics、以及其他 C++11 的酷東西都是不存在的。這在我心裡立了第一個 red flag。
(進公司之後發現一半的開發者只會用 C++03,另外一半只會一點點 C++11。確認過日期,是 2019 年沒錯。)
接著,面試官開始說明題目,是常見的找出重複值。Checkpoint 有兩個:100 萬筆資料,3 秒以內跑完;另一個是同樣 100 萬筆資料,0.3 秒內跑完。
好了,你可以開始寫了。
題目描述很明確,不需要問 Clarification Question。按照標準流程,我開始描述我打算怎麼處理這個問題。
面試官打斷了我:你不需要說話,寫就好了。
扎扎實實的文化衝擊。也許是我 too young too naive。好吧,我閉嘴。
又一個 red flag。
既然要找出重複值,用 Hash Table 簡單明快。但等等,他剛剛說 C++03......。當時的我沒有自信可以現場刻一個 Hash Table,退而求其次用 std::map,這是個 O(NlogN) 的解。殘念,2.7 秒,沒有通過第二個 Checkpoint。
到這大約過了 10 分鐘。我打算用剩餘的時間思考,如何不用手刻 Hash Table,又能跑到 0.3 秒以內。然而掙扎了 30 分鐘,面試官看不下去,主動給我提示:最佳解的複雜度也是 O(NlogN)。
真的假的?!
經過我腦中的種種掙扎,最後我才發現 sort + linear search 可以跑進 0.3 秒內,順利通過這關。理由是 sort 可以省掉 (de)allocate 記憶體的時間。
現在回頭看,完全不是個太難的問題,但還是請容我找點藉口。
因為時差的關係,必須要在晚上 10 點面試,加上前面兩個 red flag 造成的心理衝擊,著實讓我腦子的運轉速度低了不少。
不論如何,這關算是過了。
後續的技術問答不難
- 知不知道 Hash Table 是什麼
- 請舉一個 Hash Function 的例子
- ......
最後面試官介紹了公司人員、業務內容,而我簡單的提問之後結束這一回合。
從一面可以看出,這間公司的面試流程相當制式。就像大學聯考,給你寫考卷、問答題,不需要溝通,一切都有標準答案。在公司待半年之後,有跟主管反應過這個面試流程有不少改善的餘地,但也許是我日文太差,也許是我講得不好,總之沒成功說服他。
二面 | 技術面試
同一個面試官。跟一面一樣有一題程式測驗,只是省略了後面半小時的 Q&A 部分。溝通部分也跟一面一樣,說明完題目之後不需要說話,寫題目就好。
有了上次經驗,我算是懂他們的路線了。特地加強認識了一下 C++03 與 11 的不同。這對於出生在 C++17 的我來說有點煎熬。
結果完全沒用到。
這次是 Graph 題,Easy 水準。只需要自訂的 struct Node + BFS,跟標準的 LeetCode 題目有 87% 像。少踩了 C++ 版本差異的坑,二面樂勝。
三面 Onsite | 技術面試 + 主管閒聊
也許是日本的極致現場主義作祟,CEO 覺得不管怎樣人都一定要見個面,故安排在東京辦公室進行。只有一場,時長三小時,跟各大公司比簡直一片蛋糕。而面試以來感受到的第一個 positive signal,就是公司出錢飛我到東京辦公室面試!
這邊不得不提一下芝加哥 O'Hare 機場真的塞爆。明明已經落地了卻在機上等了一個多小時才成功下機,直接完美錯過下一班飛機。下一班往東京最早是隔天。幸好原本就有多排一天的緩衝時間,才沒有錯過面試。
這是我第一次去日本。從機場的整潔到商旅的空間利用,無處不讓我讚嘆。工整、細緻、優雅,跟在電視上看到的一樣!
不過我沒空管時差,也沒空好好欣賞。下機之後趕往新宿赴約,跟獵頭約好要協助我買一套新的西裝去面試。還沒賺到錢,就先噴了 3 萬日圓。
現在想想根本是多餘的,因為公司根本沒有期待我穿西裝。但當時不知道,也傻傻的沒問,只覺得既然是日商,那麼穿一套西裝不會錯。
至於獵頭為什麼還要陪我買西裝?我認為他應該是覺得這人可以當朋友,所以提供特別服務吧。事實上,我們到現在也還是好朋友。真的很感謝他的幫忙。如果有人想要找日本工作的話,我也可以協助介紹一下。
拉回正題。終於到了辦公室門口,裝潢是簡潔的工業風。進去之後被帶進一間會議室。進門第一眼看到的是張會議桌,約能坐 6 人。長桌盡頭有個大螢幕,可以接上電腦投影。透過背後的一大片落地玻璃,能直接看到走廊。玻璃上掛了塊白板,彷彿在暗示我這家公司鼓勵溝通。真是諷刺,目前為止的面試中我可沒感覺到。
目前為止頗有現代科技公司的感覺。第一印象還可以。
此時面試官 T 走了進來,是個高高瘦瘦,斯斯文文的日本人,也是公司的 CTO,aka 我未來的主管。他遞給我一份約 10 頁的面試文件。第一頁是題目,剩下的全是某 C 類別的實作內容。
雖說是英文面試,但 T 的英文不算太好,常常雞同鴨講。
總而言之,有 1 小時左右可以詳細閱讀,接著再回答第一頁的問題。
- 請畫出 C 的資料結構
- 請說明 C 如何執行插入/搜尋/刪除
- C 有不少 member variable 是指標,請說明透過指標存取跟直接存取物件的不同之處
- 請說明 C 如何做到既能儲存字串,也能儲存整數
最後的問題給了我一個猜想:會不會 C 其實很像 std::variant?詳讀之後我驗證了這個猜想。不同的是,C 是一個樹狀的 std::variant,每個物件都可以擁有子物件。
不過比起這個,更令我在意的是滿滿的 legacy 感以及 anti-pattern。我也真的看到了 new 和 delete,手動管理記憶體。
這裡有另一個位仁兄分享他在日商看到的程式碼長什麼樣子,雖不中亦不遠。
我以為這是壓力測試。測試我在面試中,同時面對複雜的考題以及 legacy 的時候能不能依然保持冷靜,清楚解讀程式碼的功能。後來我真正看到那號稱 100 萬行 codebase 的時候才發現是我想多了。
Anyway,讀完了,也回答了問題。T 對我的回答有 2 成不滿,不過算了。T 雖然身為公司 CTO,自己也有 50% 時間在開發,但從對答中我能感覺到他並沒有完全理解我說的東西。追加確認了一下,發現他應該沒有沒有讀過 CSAPP。這個基礎上的認知差距,我不覺得有辦法在面試中說明完整。
T 又追問了一個設計問題:給定一個 struct S,如果要把大量的 S 物件存成 binary file 的話,該怎麼設計。這邊沒有太特別的事情,就不贅述。
最後的 Q&A,我確認了公司的規模約 50 人(全世界),也確認公司會全額補助我學日文。
與同事們挨拶
結束後,T 帶我穿過一道門,出現在眼前的,是傳統的方格辦公室。這才發現,原來外面有裝潢的空間,是用來見客戶的,裡面這樸實無華的才是真正的辦公空間。開發成員不多,少於 10 人,其中只有一半是日本人。大多是不善言辭的類型,很符合大眾對於 Geek 的刻板印象。一面的新加坡面試官也在其中,他可以說是開發部中最健談的人。
當晚,CEO 與 CTO 帶我到五反田一家小而美的壽司屋吃晚餐。每一道壽司,都與爭鮮的壽司相去甚遠(請原諒學生時代的我,說到壽司只能想得起爭鮮)。中途,服務生送上了三隻生大蝦,蝦肉真新鮮,又甜又彈牙。我不知道該怎麼樣評價一家壽司屋,但我心想,有這種生大蝦的店一定不凡。
我偷瞄了帳單,三個人將近四萬日圓。即便對現在的我來說,這也算得上一餐豪華美食。更別說當年窮到脫褲子的我有多驚豔。
猶豫
隔了幾天,我收到了錄取通知。年薪就是一開始聽說的 7xx JPY/year,沒有日商常見的包吃包住,只有通勤補貼。同時,我手上有來自美國的另外 2 個錄取通知。頓時為現在充滿選擇的自己感到些許的驕傲。
客觀上來看,這個選擇相當簡單。美國其中一個 offer 位處矽谷,不僅提供 2 倍多的薪水,還極有可能在幾年內上市(也確實在今年上市了)。反觀這家日商,在面試中立了數個 red flag,薪資也不比人高。倘若真有贏面,就贏在地點吧。
對大多數人來說去矽谷準沒錯。但有太多事情不能用錢,或者任何單一因素來衡量。而我當時正處在這樣一個不簡單的狀況中。
煩惱至極的我,決定採取科學方法。我找來身邊一位朋友當我的黃色小鴨,告訴他我有什麼選擇,一邊分析有什麼優劣,最後詢問他我該怎麼選。
旁人的眼光是透澈的,他只說了一句:我覺得你已經做好決定了。
他是對的。
我早就知道我會選什麼,只是心裡還不願意接受,還在嘗試說服自己而已。
一周之後。我回信給 Asprova,告訴他們,我願意加入。
還有下篇的話,將會描寫更多實際的工作體驗,以及在東京的生活。
如果有人特別想知道哪一塊的話可以告訴我,我會盡可能說明。