你的工作就是最好的面試
大約是1996年春天,我在韋恩州立大學(Wayne State University)正忙著寫碩士論文。一天,收到了一封電子郵件,來自Richard Brodie,我依稀還記得上面寫著:
"I'm the creator of Word. I found your resumes……are you interested in a contract position at Microsoft (我是Word的發明人之一。偶然看到了你的簡歷,請問你對一個在微軟工作的合同制員工職位感興趣么)?"
他叫我寫了一個程序 (好像是二叉樹排序),我寫好之后email給他。幾天之后,他又安排了微軟的一個電話面試,主要詢問了一些關于項目、程序設計語言方面的知識。不久,他說我還得親自去面試,同時把去微軟公司總部Seattle的來回機票寄給我了。
說實話,當時我試圖用Word 軟件寫畢業論文,功能很多,但是并好用,我后來是在一個很舊的Macintosh機器上用Mac的軟件寫完了論文。在這之前,我已經得到了幾家軟件公司的 Offer。并且因為以前有過在一個大型公司工作不愉快的經歷,我對大公司的興趣倒不大。但是又一想,免費的機票、還有Microsoft 的名聲,于是我抱著去看看的心理就上路了。
那天清早,我從底特律經匹茲堡飛到了西雅圖,由于時差的關系,到達時還是早上。Richard 接了我,從機場到微軟的路上,他和我聊了我在國內做過的項目。聽說我們在目標碼上漢化了SCO Unix(由于沒有源代碼,我們反匯編Unix的代碼,然后在上面修改,讓漢字能顯示出來,比較Hacky)。他吃了一驚,拍拍我的肩膀說,那你做這個工作是沒問題的了。
我進了微軟17樓的門廳,覺得氣派不小,一個叫Gary的人把我領到他的辦公室,屋里堆滿了各種各樣的玩具,一個大盒子上好像還有日語寫的“棋盤”二字。寒暄之后,他就直奔主題。
他問道:“在一個含有DBCS的字符串中,如何從當前的位置向字符串頭退一個完整的字符?”
讀者看到這個地方可千萬別笑,當時的不少文字編輯器不能處理這些問題,編輯的光標時不時會跑到一個漢字的中間去。我在黑板上寫算法,他在旁邊提問。這個問題的關鍵是了解DBCS (雙字節字符集系統) 中 leading byte和trailing byte的區別,然后向字符串開始處搜索。寫完大概的算法后,又繼續把所有細節都實現了,然后討論了優化的問題。最后,他好像挺滿意。
(現在想不起來午飯是如何解決的了,一般情況下吃午飯時也要安排面試,問一些和技術有關的問題)
第二個見面的叫Daniel,看樣子像中國人,他叫我做了幾個指針的程序,大概是把單鏈表倒過來之類的。然后要我分析各種算法的優劣。這一關很順利就過了。
第三個見面的叫Matt,他跟我談了他們正在做一個叫Outlook的email和個人信息管理程序,遠東版(Fareast, 中日韓語言)進度很慢,需要做不少處理雙字節的工作,以及各種和中日韓環境有關的問題。我問他:“你們為啥不用 Unicode , 我覺得Unicode一出,就再也不用DBCS了。”他有點尷尬地說,我們的程序是建立在一個叫MAPI 的平臺上的,它還不支持Unicode。正說著,門外一陣騷動,有人推門進來說:“哥們,快去……”。征得我的同意之后,Matt 帶著我來到一個大廳,一幫人圍著看一個人在被剃光頭,有人還在起哄。被剃者面帶微笑,巋然不動。Matt介紹說,他叫Mike,是Outlook的開發總經理 (development manager)。他和大家打賭,如果在某月某日之前整個團隊的bug數量減少到一定數目,他就以光頭回報。
看完剃頭事件,我從堆滿飲料的冰箱里拿了一聽Mountain Dew,繼續面試。Matt叫我實現標準函數itoa()功能,就是把數字轉換成為字符串輸出。或許是累了,或許是Mountain Dew里大量的咖啡因起了作用,我覺得用簡單的循環方法太平常了,就寫了一個用數學函數的做法。他說,這是我第一次看到這樣的解法,你為啥不用簡單的方法?你知道數學庫函數有多慢么?其實,我當時的想法是想用這種解法向面試官證明自己懂得挺多的,現在看起來比較幼稚。J
下午,Richard送我到機場附近的旅館,路上他問,要不要在西雅圖一帶兜兜風?我說,我覺得我肯定會來這里上班的,以后有的是機會,這次就不用了。吃晚飯時,我還買了一份報紙,拿了幾份房地產的廣告,和中西部的價格比較了一下,當時比較的是租房子的價錢,不是買房子的價錢。
回到底特律一兩天后,Richard來email說,前兩個面試都挺好,好象第三個面試官有些看法……又過了幾天,他說,你可以來上班了。于是,我就推掉了其它公司的offer,來到了微軟公司所在的雷德蒙,在微軟里開始為遠東版的Outlook進行開發。我那時的Email 地址前有一個“v-”,表示vendor。
當時我面試的公司中,我記得只有微軟是要求我當場寫程序,而且要寫得非常完整的程序,不是講一講大概的想法就行了。
我還記得曾經有公司問我“你如何定義成功?”,這個問題真是難以回答,我真想親自問一下提問人的標準答案是什么。還有一個公司還叫我做了兩個小時的心理測試問卷,其中問到:“古今中外,你崇拜的人是誰,為什么?”我心想如果寫中國的古代高士,那太難解釋清楚了,于是我轉而描述了某位美國開國元勛,而且盡量小心不要把他的事跡和其他開國元勛的事跡混淆起來。大概他們分析出來我的心理還算主流,不久之后我也得到了這家公司的入職邀請。
當時一個在芝加哥的公司聽說我不想接受他們的offer,問我為啥?我說西雅圖氣候宜人,而芝加哥太冷了,他們就說,這樣,你的薪水上還可以再加上幾千元,這樣芝加哥的冬天就比西雅圖還好過了,如何?我想了想,還是直奔西雅圖而去。現在回想這些面試過程中的趣事,還真是挺有意思的。
不久,Outlook97和它的遠東版本也如期發布了,我寫的代碼也在其中。Outlook 的員工特別興奮,喝了不少酒,也互相澆了不少香檳,把團隊中的每一個同事都扔到辦公樓外的大水池中。后來整個樓道的地毯和墻都是濕的,最后Outlook 團隊不得不取消團隊聚餐,用原定聚餐的預算來打掃“戰場”。
在微軟上班差不多一年后,我成為了微軟正式職工,沒有經過面試。第二天上班的時候,我把交給“v-xinz”的任務都轉到“xinz” 的賬戶名下,就繼續干活了。當時Outlook 的總經理叫Brian,他經常采取一些“非常規”的辦法勸說在那里實習的學生直接成為正式職工,好像Daniel 就是先做了實習生,后來退學后直接轉正的。我問我的老板,不是說成為正式職工要5到6 個人面試么?他說,別浪費時間了,你的工作就是最好的面試。
作者介紹:
鄒欣,現任微軟亞洲研究院技術創新中心開發經理,主要負責研究成果向產品的轉化。他于1996年加入微軟公司,前后參與了 Outlook, Product Studio, Visual Studio等產品的開發工作。他利用業余時間寫了《移山之道―― VSTS軟件開發指南》(2007年),《編程之美――微軟技術面試心得》(合作,2008年)。他還在清華大學軟件科學試驗班講授《現代軟件工程》課程。鄒欣于1991 年獲北大計算機軟件專業學士學位;于1996 年獲美國韋恩州立大學計算機軟件專業碩士學位。