從為IBM招聘實習生中學到的經驗

發表於2010-10-13

如果你是一個正處在相同情形下的學生,如果正打算向一個類似IBM這樣的公司申請實習,讀了這篇文章你就會知道該怎麼做了。

以下是原文:

幾個月前我曾在部落格中公佈了IBM要招聘兩個實習生來填補它的長期(帶薪)實習職位空缺。現在好訊息出來了,經過廣泛的篩選和一系列繁瑣的手續(跨國事務總是這樣),最終有兩個學生成功的加入到了我們實驗室的DB2團隊。

如果你想知道這兩個學生是誰,他們是羅馬尼亞的Marius Butuc和來自巴西的Henrique Zambon。他們都是很棒的小夥,你們可以在Twitter上關注他們(如果你是說葡萄牙語的,你也許會覺得Henrique的資訊會更有趣些)。

選拔過程

我們從世界各地收到了想申請這個實習職位的100位學生的簡歷。我們邀請了其中50位最有潛力的申請者進行了首次電話交談,我就是想給每個人一次公平的機會(當然了,我也不想讓那些很顯然不能得到面試機會的人還抱有任何幻想,對於剩下的申請人我們都通知了他們在初選時沒過關)。

在初次面試進行之前,我給這50位預選通過的候選人佈置了程式設計作業。他們可以開發一個CSV到HTML的轉換器,或者一個使用Twitter API的客戶端搜尋工具,或一個S3上傳工具。

很顯然沒有一道習題是關於火箭科學的,我們只是想用一種途徑來證明這些學生的程式設計能力。大部分的候選人選擇了CSV到HTML的轉換器。一部分人選擇了Twiter客戶端,很少人選擇S3上傳工具(有個野心勃勃的候選人竟然把3道題全做了)。

在認真檢視了他們的編碼後,我對所有交了作業的候選人進行了技術面試。在這首次的面試中我問了他們每個人一系列非常技術性的問題,某些時候我們也會討論他們的作業。大多數的面試都持續了一個小時左右。

首輪面試結束之後,我選出了10個最有潛力的候選人給了他們第二次的電話通知,我也通知了餘下的人將不會再進行面試。

第二輪面試時我的經理加入了進來,一起對每個候選人進行電話交談,談話不大牽涉候選人的個人技能。這第二次的面試是要看看他們的軟實力,瞭解一下他們的興趣愛好,看看他們的綜合心理狀況。

這種面試很重要,它能讓我們更進一步的瞭解候選者。我們的目的是想知道這些充滿渴望的候選人對什麼感興趣,看看他們對程式設計的熱情有多少,發現一些他們的跟程式設計並不十分相關的其它技能。我們也會跟他們討論一下如果他們被選中後將會參與的專案、我們的團隊合作方式(我們更像一個敏捷開發的新團隊,而不是人們對IBM的老舊印象),我們還和這10位候選人都詳細討論了下一步我們將做些什麼。

至此Leon(我的經理)和我最終討論了哪兩位申請人應該被選中。十位候選人都很優秀,我們要做出選擇並不是很容易。我們仔細研究了整個過程中的細枝末節,從他們的簡歷、過往經歷,到他們的作業上的表現,他們知道的(人類的和程式設計的)語言,他們對這幾次面試的看法。

經過反覆的考慮,我們最終選擇了Marius和Henrique。(也許你會奇怪,那個把三道題全做了的學生也是來自羅馬尼亞呀,如果能保證Marius和Henrique成功的獲得實習資格的話,他將是我們的第三選擇。)

從面試了這麼多候選人中學到的東西

* 當你突然從世界各地收到100個非常優秀的學生的簡歷時,你會馬上發現,要想去判斷一個人的真實能力是異常的困難。光從紙上看每個人都優秀的不得了!這就是我為什麼必須用一些特殊的東西顯示出他們之間的區別,而不能只依據他們的課題表現和學習成績(下面我還要更詳細的說這個問題)。

* 程式設計作業對確定一個人的真實能力有巨大的幫助。有些做的最好的作業是來自理論表達能力很弱的人。你可以很清楚的看出誰才是程式設計師或有潛質將來成為電腦科學家的人。如果沒有這個作業任務,選拔工作會困難的多,所以我很願意找出一點東西讓申請人去做做。

* 有一點很意外,即使是非常好的學生,看起來對一些相對直接的演算法問題也會感到困難,不如其它型別的問題感到輕鬆。一些問題就像:紅-黑樹是什麼?有什麼用處?你能向我解釋一下P vs NP的問題嗎?(請注意,這些都是相對開放的問題,通常我會接著問一些特定的問題來評估候選人的理論知識背景—也就是他們對這些問題的思考方式。)

* 大多數的學生並不瞭解現實生活中的程式設計活動。特別的,他們似乎並不是十分關注時事,大多數人從來沒聽說過例如SVN, GIT, MVC, ORM, Agile programming,或 NoSQL等東西。

* 通常,質量偏差的候選人的簡歷上列出的品質我們看起來都有些誇張,而對於優秀的人的反而顯得有些低估了。(這有點像某種形式的達克效應(Dunning–Kruger effect)在起作用。)

* 有些候選人,利用遠端電話面試的便利,試圖使用Google來搜尋答案,當我問到了他們不太熟悉的知識時,我確實聽到了他們敲擊鍵盤的聲音,嘴裡回答,“嗯…這個…”,跟著一個20秒的停頓,然後把從維基百科上找到的東西全都貼上出來。很容易就能看出裡面的貓膩,這種不誠實的表現最終會給候選人帶來不好的印象。

* 招募人是件難事。需要花費大量的時間和精力;要做出理性的決定是件很有挑戰性的事,因為大多數情況下真的需要你拿蘋果和橘子做比較。

什麼樣的簡歷能打動我

* 開源軟體的參與者(一個GitHub的連結立即能引起我對這個候選人的興趣)。

* 簡要但明瞭的描述在學校課程之外為外界公司曾實現過的專案(在業餘時間或實習期間)。

* 對程式設計社群類的社會媒體的參與。是否有StackOverflow身份?跟程式設計相關的Twitter賬戶?或者跟這個主題相關的部落格?雖然這些事情單獨看起來並不能說明某人是個好程式設計師,但這些卻是一個適當的指標來說明一個人至少熱衷於這個學科。是否出席行業相關會議也是一個很重要能說明對這個領域的興趣的指示。

* 知道不常見的程式語言。基本上每個人都在簡歷上寫了Java,然而,只是這些還不最夠吸引我這個面試官的眼球。(該死,連Python也開始變得很平常了。)如果候選人聲稱自己會Haskell, Scala, Clojure,OCaml, Scheme, Factor, Io, J,等等…這絕對能吸引我。同樣,這也並不能保證其人就是個好的程式設計師,但這很可能就說明了他們對這個職業有高於常人的興趣,或者在大學裡這些語言都學過(這也許是個不好的訊號)。

我不確定你能從這篇文章裡得到些什麼,但是把上面描述的整個招聘過程當成一個有趣的事情分享給大家是有價值的。如果你是一個正處在相同情形下的學生,如果正打算向一個類似IBM這樣的公司申請實習,讀了這篇文章你就會知道該怎麼做了。如果你發現自己是一個處在相似情況下的面試官,你會在這篇文章裡發現很多相關的觀點。

 

VIA: IT外刊評論

相關文章