從Intel到Google
從Intel到Google、從硬體工程師到軟體工程師,工作上很多事情變得不一樣,有些到現在還是不習慣。 以下列出幾點比較不一樣的,也給那些考慮來灣區工作,或從硬體轉軟體的人參考。
對我來說,要準備硬體工程師的面試十分困難,因為考題的範圍很廣,也很難預測,不同的領域考題也截然不動。剛畢業面試Intel研究部門時,要準備固態物理跟半導體元件物理;後來去光罩組面試,要準備光學物理;再後來去記憶體組面試,要準備機率與統計,以及記憶體相關知識;最後在疫情間去面試蘋果螢幕相關的組,要準備訊號與系統,以及螢幕相關知識。要準備這些面試,不會有什麼題庫網站,只有翻開以前大學、研究所的教科書,重新溫習。但範圍之大,也不可能一頁一頁,像準備期末考一樣練習題目,只能大方向,確定觀念正確而已。事實上我在Intel時,因為我們也知道題目的困難,所以我們組在面試時,就是發回家作業,然後被面試者要在一小時在完成作答,再把考卷寄回來。
身為面試官,硬體的面試也很難準備。我們不能考工作上,太過瑣碎以及機密的東西,只能翻開以前大學、研究所的教科書,從裡面出題。但範圍之大,也不可像考期末考一樣,考計算複雜的題目,只能大方向,找考觀念的題目,但是不能是以前出過的題目。現在回想起來,面試官跟面試者真的是命運相仿,兩方都在溫習以前的課本,都在裡面試圖找出那些有點難,又不是太難,剛剛好可以考出觀念,又可以在時間之內回答的問題。
軟體面試可不一樣,輕鬆得多了!尤其像是Meta、Google等大公司,幾乎都會出LeetCode題庫網站上面的題目。不管履歷上寫的是熟稔React、Java還是SQL,題目都是要你寫程式算出車子從A到B的最短路徑,不會特別問你特別領域的知識。都只考題庫的題目是好還是壞?探討這個問題可以自成一篇文章。 軟體大神Max Howell,曾開發被廣泛運用、著名的程式包管理系統「Homebrew」。然而在2015年Google的面試時,因為不認識每個主修程式的學生都知道的「二元樹」是什麼,而被淘汰掉。Max一氣之下,在Twitter上寫下「Google:雖然我們90%的工程師都在用你的軟體,但因為你不曉得二元樹,所以你滾吧!」。兩年後,他承認他有點意氣用事,坦承大學是化學主修,不是讀軟體的,所以不曉得二元樹是什麼,但他也強調Google實在還是應該雇用他,因為他很會開發軟體。這則事件眾所皆知,也因起網路上正反相方的激烈辯論:到底應不應該考演算法和資料結構,儘管工作上幾乎用不太到?快十年後的今天,面試的方式幾乎沒有變化,似乎「守舊派」還是獲勝了。我想理由不外乎有幾個,一是如果不考這些,似乎也沒有其他更公平的考法。二是贊成的人認為,演算法和資料結構雖然工作上不一定會用得到,但可以評估面試者的邏輯能力,某種程度上可以預測未來寫出來程式的水準。
身為考官,出軟體面試題目也比出硬體的容易的多。面試者有LeetCode題庫可以練習,考官也有公司的題庫可以選題。譬如,Google裡有個面試題目系統,裡面有上百題題目,搭配詳解跟問題技巧,譬如當面試者卡住時,如何給適當的提示,引導面試者答題。如果題目被面試者外洩,也可以在系統上回報,該題目就不會再被使用。所以在Google身為考官不用去想題目,只需要選題目,確定其他考官沒有選到類似的題目即可。我相信其他大型軟體公司也是類似的作法。
順帶一題,Google的面試題目是由Google裡面的志願者提供的。在Google有許多小型的軟體、工具或是工作並沒有專門的組負責,它們必須由志願者維護或參與。Google為了鼓勵志願活動,促進學習與團隊合作,又不希望志願工作做得三心二意,開始了一個叫「20%」的企劃。如果志願活動是屬於「20%」的企劃,那參與這種志願活動的志願者,必須撥出個人工作時間的20%,做該志願工作,當然前提是自己的主管必須同意。Google的面試題目許多就是由這「20%」的企劃創作出來的。