顯然很多電腦系學生其實不會寫程式,哪怕是「FizzBuzz」這樣的小程式:列印1到100,碰到3的倍數列印「Fizz」,碰到5的倍數則列印「Buzz」,碰到3和5的共同倍數則列印「FizzBuzz」;這麼簡單的程式,甚至也可以考倒他們。
3. 技術電話面試(Technical Phone Screening)
如果你接到要和你約時間的電話,由工程師和你一對一面試,那麼你已經順利到達第三關;在這一關,你終於可以和一個「活生生的人」對談了。
在這個技術電話面試的過程當中,仍然是做題目;但跟上一個階段的線上測試所做的題目和流程相較,有著很大的不同。
通常工程師打電話過來以後,會花五分鐘的時間做自我介紹,然後給你一個電腦網址,請你登錄上去,然後你就必須當場做線上的測試題目。
通常對方會給你一個小時的時間,要求你解一些算法問題,一般是兩到三題。不同的是,你需要一邊講電話,一邊在電腦上寫程式;題目的難度會是中等偏難,考驗你演算法的功力、以及對資料結構的理解程度。
在這裡跟各位分享一個真實故事。
軟體高手Max Howell寫了一個叫做「Homebrew」的軟體管理系統,並且在開源軟體網站GitHub公佈,讓大家免費下載使用。由於這個軟體寫得非常好,所以90%以上的Google工程師都在用、也都知道他的名字。
Max Howell在2015年去Google求職,順利到了技術電話面試這一關;結果因為他沒有準備好,刷題刷的不夠多;而且最重要的是,他的演算法功力並不好,所以被拒絕了。
他在自己的Twitter上面寫道,Google工程師在電話面試完之後告訴他:
「我們有90%工程師在用你寫的軟體,但是你沒辦法在白板上寫出反轉二元樹(invert binary tree)的算法,所以⋯⋯。」
所謂「白板」(Whiteboard)的意思是,在連線的電腦上直接寫算法;當你在你的電腦上寫的時候,負責面試的工程師在他的電腦上也可以同時看到。
就如同面對面的考試,主考官要求你在白板上或是一張白紙上寫程式。這個和一般軟體工程師的實際工作方法是不一樣的。
軟體工程師習慣在電腦上寫程式,一邊寫的時候,一邊可以利用電腦的輔助功能,查詢一些資料,就好像所謂的開卷考試(open-book tests)。如果你突然要求習慣開卷考試的學生不能開卷,只能在一張白紙上、或是在白板上答題,他就完蛋了。
這一關和上一關線上測試不同的地方,除了題目偏向算法以外,還有一個重點:線上測試是由電腦來考你,但是技術電話面試是由現場的資深工程師來主考。
如果你刷題刷的夠多的話,就可以把答案背下來;那麼當電腦主考時,你可以亳不猶豫的把答案寫下來。
但是當主考官是一個活生生的人,你飛快的把答案寫下來,他就會發現你已經做過這個題目了,這反而會影響到他最後讓不讓你過關的決定。
有好的溝通能力,就能幫助你順利過關。
因此,你在寫答案的時候,要慢慢的、一行一行的寫。在你寫的過程當中,要透過電話和主考官保持溝通,告訴他你為什麼這麼寫、你的邏輯是什麼,甚至可以穿插一些問題,向主考官確認你的理解對不對。
在這個技術電話面試階段,你跟主考官的溝通和邏輯表達能力,就變得非常重要了:有好的溝通能力,就能幫助你順利過關。
4. 經理電話面試(Manager Phone Screening)
經理電話面試主要是由產品或是開發經理主持,時間大約一個小時。雖然和你進行電話面試的還是一些技術經理,但在這個階段的面試通常與技術無關。他們會透過電話詢問你一些行為問題(behavior questions)、以及對公司文化的理解程度。
要順利通過這一關,就必須到企業網站去瞭解該企業的價值觀和企業文化;在回答時要多使用關鍵字(Key Words),來體現出和企業相同的價值觀。
例如,當主考官問到你如何面對挫折、困難或失敗的時候,他並不是真的對你的故事有興趣,而是在從你的回答之中,找尋與價值觀有關的關鍵字,看看你能不能融入該企業的文化。
5. 現場面試(On-site Interview)
如果你接到了現場面試或是視訊面試邀約的電話,恭喜你,你已經走到了面試最後一關。最後的這一關時間很長、很累,但是只要不犯錯,你有九成九以上的機會被錄用。
即使只是對一個新手工程師面試,這些大公司通常會派出五、六個面試官,耗時五、六個小時。面試官裡面有一半是經理、一半是工程師,幾人穿插其間、反覆進行技術電話面試和經理電話面試的步驟;只不過這次不是透過電話,是面對面的進行。
由於所耗費的資源巨大,有的企業也以視訊來取代現場面試。這對企業來講也是一種降低成本的做法;因為如果是現場面試,企業還要提供往返機票和食宿的費用。
特別值得一提的是,許多非美國本土的應徵者擔心英文不流利、有口音,其實這些都無所謂。
進行到這個階段,表示他們對你的技術能力和價值觀有很大的信心;但是最後還是要進行面對面的面試,以確保你在壓力下仍然維持很好的表現,這也表示他們對於雇用技術人員非常慎重。
有的企業在現場面試結束之後,還會安排一個員工和你一起用餐,這個額外環節叫做午餐測試(lunch test)。藉由用餐時候比較放鬆的情況,觀察你的行為和日常生活的細節;所以應徵者即使在面試過後的午餐時間,也不能夠鬆懈。
6. 決定和選組(Decision and Team Match)
大部分的公司在這個階段都是內部作業,應徵者不會參與。
所有面試同一個應徵者的主考官和面試官,會成立一個雇用委員會(Hiring Committee),然後聚在一起開會做最後的決定。
順利通過上一個階段現場或視訊面試,應該有九成九以上的機會被錄用;那麼剩下1%的可能會被刷掉,就發生在這個時候了。
參加這個會議的人,首先檢視應徵者的簡歷。說來有趣,應徵者的簡歷到了這個階段才會被「人」檢查和審核;看看簡歷內容和面試過程的觀察是否一致,也順便檢查電腦審核有沒有忽略或疏漏的地方。
如果一切順利,決定錄用這位應徵者,那麼前面過程參與的經理或工程師(大部分來自招聘部門),就要決定是由哪個部門來錄用。這個討論就是所謂的選組(Team Matching)。
結論
這些軟體巨擘在招聘人才上制定這麼複雜的流程,耗費這麼多資源,絕對不是因為「美國時間」太多;相反地,就是希望確保人才的成功率,減少因為用錯人造成的資源浪費。
身為應聘者,Jimmy花了六個月的時間專心求職,包括去摸索出這些流程,找尋網上可用的資源,不斷自我鍛練,不斷闖關,才能夠得出這些寶貴的結論。身為父親,我也等於親身參與了這段艱苦的過程。
若非親身參與,我都不敢相信,美國高科技企業會為雇用一個應屆畢業生耗費這麼大的功夫。我的心得是:
- 從招聘軟體技術人才的態度之嚴謹、資源之耗費、以及流程之複雜,就可以看出為什麼美國能夠執高科技的牛耳;因為,人才正是成功的基石。
- 台灣要轉型升級發展AI及大數據產業,需要把軟體技術人才的引進與培育,當作最重要的起點。企業和政府在吸引人才上不下功夫、只談期待,是遠遠不夠的。
這篇文章順道也分享給在美國求學的年輕人,希望他們在預備求職的道路上得到指點少些挫折。讓像我這樣的家長,能瞭解孩子們即將面臨的挑戰,進而給他們更好的精神支持。