不管怎麼看, Google 都是軟體工程師最夢寐以求的頂級公司之一,其高薪、免費食品、校園般的環境、創建的各種有趣技術,吸引了各方人士前往求職。但在另一個重要面向,該公司可能已經自打嘴巴其求才若渴的形象:傳奇般困難的面試過程。
Google 目前正在挨告,是來自一些沒得到工作的求職者有關年齡歧視的訴訟。 Google 回應這些官司是「毫無意義」的指控,這些控訴確實可能沒有意義,但有些程式設計師確信該公司的嚴格招聘流程,非常偏愛那些剛從學校畢業而無業界經驗的社會新鮮人。
針對其臭名昭著的面試過程,自由程式設計師 Michael Geary 接受 Business Insider 記者的訪問表示:「即使已經以外包程式設計師的身分為該公司服務了 5 年,根本就不想在 Google 全職上班。」
Google 知道他是 Google Maps 專家
回到 2007 年年底,Geary 已經在一家名為 Zvents 的草創公司工作了一段時間,該公司創建了區域事件日曆(後來被 StubHub 收購)。
他的工作是為事件創建地圖,因此他成為運用 Google 地圖的程式設計專家。做為一個友善、樂於助人的人,他花了很多時間在 Google 地圖的郵件列表(mailing list)上,解決其他程式設計師遇到的問題。隨後 Google 也注意到了他,於是聘他來協助該公司建立 2008 年美國總統大選的選舉地圖。
雖然他住在山景城的 Google 總部(Googleplex)附近,但他卻是被掛在華盛頓特區工作的團隊底下。這個團隊喜歡他的工作成果,他也喜歡與他們合作,續簽了 5 年的外包合約,剛好就在這個時間點時, Google 把這個計畫拉到了公司內部。
當時他面臨一個人生的抉擇:是趁機申請轉 Google 的正職,或者繼續用外包的形式合作下去?
最後他選擇了繼續維持外包的身分。
「我聽說過他們的面試流程,」Geary 說到,「這個流程似乎是針對大學剛畢業後的社會新鮮人而精心設定的,當你剛畢業時,你有很多演算法,有很多資料結構,而且你會在白板上進行快速的思考,就像你在學校做的一樣。但這跟真實業界寫程式是完全相反的,因為有更多其他的事務會被捲進來,比如在我實際二十多年的工作職涯裡,我從來沒有用過白板,我就是直接在我的電腦上作業,但在面試中,卻得全部在白板上進行。」
他對這個過程表示擔心:「對演算法細節的測驗,不得不在白板上現場編寫紅黑樹, 這有利於剛從大學資訊科學相關科系畢業的學生。」
許多人都對 Google 的面試過程充滿疑問
Hacker News 是專屬程式設計師討論感興趣新聞文章的網站,最近上面有一篇由 Pierre Gauthier 發表的網誌,他擁有 37 年的程式撰寫經驗和 24 年的研發總監經歷。
TWD Industries(一間資安公司, 知名產品是 Remote-Anything )的創始人兼 CEO 的 Gauthier 寫道,他從來沒有主動向Google 求職過,而是被邀去申請工程總監的職位,所以他同意接受了Google 面試官的電話面試。他在文章裡貼出了他在那場電話面試,對方的問題以及雙方的對談,還有他的內心話。
基本上,應試人員會被詢問一系列的技術問題,而每一題被認為只有唯一的「正確」答案,他說。根據網誌,他提到:「Google 的代表說,這個職位需要管理和最新的編碼技能(罕見的混合),但是很顯然縱使有超過 20 年管理經驗、近 40 年的程式語言經驗是遠遠不夠的:因為我沒有給出『正確答案』。」
大家可能很好奇究竟是怎樣的題目問答,可以「考倒」一名這麼多年經驗的資深工程師?筆者就翻譯其中的 3 題成中文給大家:
{
什麼是 Linux inode?
Gauthier:任何特定檔案系統上獨特的檔案識別符(file identifier)。
面試官:錯了,它是檔案的後設資料(metadata)。
Gauthier:inode 是在一個檔案系統上識別一個檔案的索引(index),您可以從這個索引查詢到大小、時間、所有者、權限等檔案屬性(attributes);您甚至可以在某些檔案系統上的 inode 添加自己的屬性。
面試官:錯了,不是「屬性」,它是「後設資料」。
Gauthier 的內心話:喔?「後設資料」比「檔案屬性」是更貼切的詞,真的嗎?(譯註:這個詞語的差別也跟不同時代大學教學用詞的差別相關,後設資料本來是圖書館用的詞,2000 年以後因為數位化潮流才進入電腦世界。)
}
{
為何快排(Quicksort)是最好的排序法?
Gauthier:這不是永遠成立的,也不會永遠合適的。
面試官:Quicksort 有 big-O 最佳的效能。
Gauthier:「big-O」忽略了資料儲存設備的延遲(latency)、拓樸、容量、可用記憶體甚至在特定運算設備上的實作中,涉及到每道 CPU 指令的計算成本,僅僅計算了演算法操作的數量! 沒錯,「big-O」可以是設計演算法時高價值的指示,但是最佳性能和擴展解決方案取決於具體問題和環境的特定規格。
面試官:你答錯了,快排項目你已經給我大大的零分。
Gauthier 的內心話:Google 營運所倚靠的 Linux 核心就選擇了堆積排序法(Heapsort)而不是快排,目的是為了低記憶體的使用量與更可預測的執行時間。(譯註:這內心話,筆者略譯了美國學術界的菸草醜聞比喻,因為華人圈無該背景知識,不好理解。)
}
{
有一個 16 位元、10,000 欄位的陣列,你要如何最有效率地計數這些位元(bits)?
Gauthier:你只要以 64 位元的 word 為單位來操作位元移位(shift bits),也就是 Kernighan 演算法。
面試官:錯!
Gauthier:還有更快的方法,是用 64 位元的 word 與位元遮罩(mask),但我沒有辦法透過電話解釋,我必須實際寫程式碼。
面試官:正確的答案是使用查詢表(loopup table,一般縮寫為 LUT),然後加總出結果。
Gauthier:是在哪種 CPU 上?何不在一個 benchmark 測試中比較我的程式碼和你的程式碼的效能?
面試官:這不是這個測試的重點。
Gauthier:所以這個測試的重點是什麼?
面試官:我必須檢查你知道正確的答案。
Gauthier 的內心話:這廢話還要繼續多久? 8 位元 LUT 只能依序處理一個 byte 接著一個 byte(一個 byte 就是 8 位元),而用 64 位元遮罩的方法,一次就可以處理好 8 個 bytes(現代的電腦主要是 64 位元電腦,一個運算周期,就可以算好 8 個,比起 8 個周期才計算完來得快)。除此之外,如果不考慮可移植性,現代 CPU 指令甚至允許你用 10 倍的速度去一次處理好 128 位元。由於今日的電腦還達不到 64 位元 LUT,哪一個才是更快的方法是毫無疑問的。
}
基本上,這段摘錄的問答,反映出現在 Google 的面試官在乎教科書上的單一標準答案,像 AI 談話機器人一樣,執著於特定的詞語(「講話」跟「說話」、「吃飯」與「進食」差在哪裡),而忽略詞語所代表的真實意義。更進一步 Gauthier 的技術解決方案更為務實、優秀,完全把 Google 面試官的「正確」答案碾成碎片,可是他在 10 題裡只有 4 題拿到分數,不及格,恐怕 Larry Page 來現在的 Google 應試,也會不及格吧?
此外還有一個有名的故事,是 2015 年 Google 拒絕了一位名為 Max Howell 的程式設計師。 Howell 因創建名為 Homebrew 而聞名於世(設計給 Mac OSX 的軟體套件管理程式,用來簡化原來繁複的軟體安裝過程)。 Howell 曾在這則 twitter 上大吐苦水:「Google:我們的工程師中有九成的人使用你寫的軟體(Homebrew),但是你沒有辦法在白板上反轉二元樹,所以他媽的!」
他後來在該篇推文的回應中解釋說:「我今天早上被拒絕了,這就是我那時直率的反應。」而這則 twitter 像是病毒般地被廣為流傳,引發許多程式設計師的諸多有關白板理論派 vs. 實際寫程式 coding 派的討論。
Howell 告訴 Business Insider 的記者說:「對我來說,這個情況好比:Google 非常、非常需要一個水電工人來解決漏水的問題,所以我以自豪的 20 年經驗帶著所有對的工具(有些還自己開發的)前往;然而,他們卻要我在捲袖子開始施工以前,堅持我先坐下來考過流體力學才能進行。」
快樂的結局?
諷刺的是,Gauthier 在 Hacker News 上發表文章的前一周,製圖團隊的產品經理聯絡 Geary 確實想要聘請他,並試圖讓 Google 贊助這個職位,但被拒絕了(譯註:Google 不再外包這個工作)。雖然他現在依然不想要在 Google 工作,但是 Geary 回顧當時為何不向 Google 求職:「這可能是我自己的問題吧」,也就是說 Geary 離開 Google 了。
在此同時, Max Howell 投效了蘋果公司。 Gauthier 也更新了他的網誌文章,提到在這篇文章發表後,收到了大量的工作機會(他不需要,因為他是一間公司的 CEO),和收到許多履歷(想為他工作)。他認為自己公司的「後量子」(post-quantum)安全技術比今日的學術研究更加先進,「Google 卻這樣冷落我,我可沒有要找工作,我可是 18 年前就創立了 TWD 呢。」(譯註:跟 Google 同年創辦。)
當 Business Insider 的記者要求 Google 回應有關面試偏愛大學畢業生的批評,Google 的發言人回應:「從成千上萬的面試中,我們每年僱用了成千上萬的工程師,從大學剛畢業生到有幾十年經驗的人都有,這個過程是出名的嚴謹,但應試者回饋給我們一致的肯定。當然在許多面試裡,有一些應試者是很不高興的離開,我們希望聚集更多來自不同年齡、背景的優秀人才來本公司工作,所以非常感謝他們的回饋。」
- Google’s nit-picky interview process is a huge turnoff for some experienced coders
- Google’s “Director of Engineering" Hiring Test
- Inverting Binary Trees Considered Harmful
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!