Aaron Swartz:我是怎麼招聘程式設計師的

發表於2011-03-15

原文:Aaron Swartz,編譯:陳皓

很早以前就想寫一篇和麵試相關的文章了,今天在網路上看到一篇關於如何去面試程式設計師的英文文章,發現其中有很多和我共鳴的東西,所以仿照其標題通過自己的經歷寫下了這篇文章。(編注:這篇文章是國外HR解析程式設計師面試,伯樂線上曾編譯一篇加拿大程式設計師關於面試的文章:《國外程式設計師是如何準備面試的》。)

工作這麼多年來,即被面試過,也面試過他人,對於程式設計師的面試,經歷過很不錯的面試,很專業的面試,也經歷過一些BT和令人不爽的面試,我個人覺得一個好的面試,面試官是很重要的,所以,本文想從“面試官”的角度來闡述一下。於是,有了下面這樣一篇的文章,希望本文對你的職場經歷有用,特別是那些正在招聘和麵試程式設計師的朋友,我覺得這篇文章會對大家有很多啟示。此外,做為被面試的人,你可以看看本站一些和程式設計師相關的文章。

對於招聘方來說,在招聘程式設計師的時候,我估計面試應聘者時,最主要想知道的是下面三件事:

1. 這個程式設計師的是否夠聰明?

2. 這個程式設計師能否把事情搞定?

3. 這個程式設計師能和我的團隊在一起工作嗎?

 

我相信,這是所有團隊經理招人要考慮的三個問題,所有的問題也基本上圍繞著這三個問題。有些時候,你也許覺得程式設計師的技術技能可以同時解決這三個問題,一個技術能力優秀的人必然是一個聰明的,可以搞定事情的人,當然也就能和團隊一起工作了。是的,感覺看起來是這個樣子,但其實並不是這樣的。有些人的確很聰明,但卻不能處理好工作上的事情,這樣人應該是你的朋友,你的顧問,但不應該是你的僱員。有的人為人很不錯,和團隊所有人都合得來,但並不是很聰明,但工作很刻苦很努力,這樣的人可以成為你的下屬,比如某個下屬骨幹的助手,或是整個團隊的助手。如果某個人不能和團隊一起工作,無論其有多聰明,解決問題的能力有多強,你都不應該和他在一起工作。人個認為,團隊的和諧是一切事情的前提。

對於傳統的面試招聘過程,基本上來說都是下面這樣的樣子的:

1. 閱讀應聘者的簡歷,讓應聘者做個自我介紹。

2. 問一些比較難的非常細節的技術問題,以一問一答的形式。

3. 給面試者一些和幾個程式設計難題。(比如某些怪異的演算法題)

 

我個人覺得這種面試方法很可笑,也很糟糕,尤其是後面兩點。通常來說,這樣的面試只會讓你面試到一些“書呆子”或是一些“技術痴迷者”,下面讓我來一條一條地剖析一下這幾條的弊端。

1. 你很難從一個人的簡歷或是自我介紹上了解一個人。因為這些都是當事人自己寫的,或是自己闡述的。所以,這並不是很準確的,通過簡歷,你只能知道很簡單的事情,這對於是否能招入團是遠遠不夠的。而在面試的開始,讓應聘者做自我介紹,只會讓面試者以很正式的態度來面對整個面試。一但面試過程很正式,很嚴肅,就會讓人很拘禁,其實,這並不是我們想要的,我要的是應聘者真實和自然的表現,從而才能瞭解到最真實的東西。

2. 問幾個技術難題。比如:我個人經歷過的——“ps的-a引數是什麼意思?”,“vi中刪除換行符的命令是什麼?”,“C++的關鍵字 explict,mutable是用來幹什麼?”等等,等等。以前做為一個應聘者來說,我非常討厭這樣的問題,因為這樣的問題查一下手冊就知道。難道他要招的是一個字典手冊?不是一個人?對於這方面,重要的不是知識,重要的是其查詢知識的能力。

3. 給應聘者一個或幾個很難的演算法題,給上十幾分鍾,然後讓面試者把虛擬碼或是程式碼寫下來。這樣的做法是相當可笑的,不能討論不能查資料,讓人在一種壓力狀態下作答,這根本就不是實際工作中的狀態,而我們的面試也就成了一種刁難(我最變態的經歷是,當我把寫在兩頁紙上的程式碼上交上去後,面試官把其交給旁邊程式設計師輸出電腦做校驗,結果程式設計師說,編譯出錯。於是,面試官說,“很遺憾,可能你寫的程式還不多”,相當可笑)。對於這點來說,重要的不是那個解題的答案,而是解題的思路和方法。

我以前經歷過很多的面試,當技術人員來和我做面試的時候,我發現,“技術人員的思維”對於某些人來說根本分不清面試和考試,在潛意識裡,他們在很多時候不是在面試這個人,而是在刁難這個人並以此展示自己的技能。我個人認為我是一個好的程式設計師,但我可以告訴你我無法通過那樣的面試,因為那樣的面試是為他們自己準備的,而不是為應聘者準備的。

 

那麼,我又是怎樣去面試的呢?

一、確認簡歷。首先,閱讀一下別人的簡歷是需要的,從簡歷上,工作經歷,專案經歷,技術技能這三個事情是你需要了解的。一般來說,你可以先通過電話確定一下他的工作經歷,專案經歷和技術技能,然後,如果他和你需要的人條件相符的話,可以叫到公司做面對面的面試。千萬不要把別人叫來,你又說你的經歷和我們的工作有差距之類的話。(我有過一次面試經歷,公司我不說了,反正是那個號稱需要有良好溝通的公司,面試了我9次左右,從一般的程式設計師,PM,經理,到總經理,而最後一次直接告訴我,我以前的經歷和他們的要求差距很大。我不禁要問了,前面若干次的面試他們都在幹什麼呢?)

二、面試開場。其次,把人邀請來公司面試,應聘者到了公司來面試,有一點很重要,那就是你一定要讓整個面試過程變得很隨意,很放鬆,就像普通的聊天和一般朋友間的交流一樣。這樣應聘者才會放鬆並拿出真實的樣子來和你談話和聊天,你才能在很短的時間內瞭解得更多。讓應聘者放下心理負擔,讓其表現得自然一些,這是招聘方的責任。千萬不要說,別人太緊張發揮的不好,有時候,招聘方得想想自己的問題。

面試開場的時候,千萬不要讓應聘者介紹自己,因為,應聘者早就給你發過簡歷了,而你也給其打過電話了。另外,應聘者對這個面試慣例通常都會準備得非常不錯的,另一方面,這會讓整個面試過程太正式太嚴肅了。所以,不妨問問應聘者是怎麼過來的?最近怎麼樣?還可以和應聘者談一個大眾話題,比如喜歡什麼體育,音樂,電影,社會熱點什麼的,自己也別板著個臉,說說笑笑,試圖讓大家都放鬆下來。另外,通過這些閒聊,你可以知道他/她的與人交往能力和一些性格。另外,不要讓桌子放在你和應聘者之間,把環境搞得隨意一些。

三、多讓應聘者說說他的經歷。接下來,如果你要覺得這個應聘者是否是一個可以解決問題,是一個可以把事情搞定的人,不用問他/她會做什麼,直接問問其做過什麼?幹過什麼事?對於一個好的程式設計師來說,很難想像其沒有相關的實踐,就算你是在大學裡,你也應該做過什麼。如果你有解決問題的能力,那麼,很顯然,今天你應該解決了很多問題,也搞定了很多事情,聽聽應聘者說一說他的那些事。(不要使用一問一答這種方式,應該讓應聘者多說,而多聽,多想)

在他講他的專案的時候,通常來說你要注意下面幾點:

●溝通表達能力。應聘者能不能把一個事情講清楚。如果這個人聰明的話,他就可以用最簡單的語言把一個複雜的事情講清楚。而且,這是一個好的程式設計師最基本的能力。而且,你可以在應聘者一邊描述其經歷的時候,你可以和應聘者有一些的良好的來來回回的交談,這樣就可以知道,他的溝通能力和溝通方式,從而瞭解他的性格。

●角色和位置。也許他參與了一個很大的專案,但只是做了一個很簡單的模組。所以,瞭解其在專案中的擔任的角色和位置是非常必要的。當應聘者說到“我們”或者“大家”之類的詞彙時,一定要向下細化和明確。

●做出的貢獻和解決了什麼的問題。這個很重要,通過了解這個,你可以知道面試者是否聰明,是否有能力解決問題,是否有好的技術底子。

●演示。如果可能,你可以讓應聘者展示一些其寫過的程式碼,做過的設計,或是直接給你看看他寫的程式的演示。(從設計上,程式碼的風格,重用性,維護性上你可以瞭解很多很多)

●基礎知識。瞭解該專案中應聘者使用的技術的一些基礎知識,比如,通過整個過程,你可以問一些網路,語言,面象物件,系統的一些基礎知識。基礎知識是非常重要的,這直接關係到了他的能力。

●流程和工具。瞭解應聘者所熟悉的專案的流程(銀彈,瀑布,敏捷,……),還有流程中的一些工件(如:需求文件,設計文件,測試方檔等),以及在開發過程中使用的工具(記憶體測試,程式碼檢查,BUG報告,版本維護,開發除錯……)(關於程式設計師的基本技能,你可以參考——《程式設計師需要具備的基本技能》)

有人會說,應聘者的經歷可以被他自己編出來的,他可以把一些不是他做的事說成是他做的。是的,的確是有這種可能。不過,不要忘了,一個謊言背後需要用更多的謊言來圓謊的,所以,你不必擔心這個問題,只要你在應聘者的描述過程中逐步求精,細化問題,你會知道應聘者是否是在編故事的。

千萬記住下面幾點:

* 談話風格要隨意和自然,不要正式。

* 在瞭解應聘者以前做過的事的時候,不要太投入了。因為招聘方也是技術人員,所以有時候,招聘者自己會因為應聘者所做的專案中的技術太過迷人而被吸引了。

* 要注意引導應聘人。相信我,應聘的程式設計師十個人有八個人講不清楚以前做的是什麼。因為他們直接跳過了專案背景和要解決什麼樣的問題,而直接進入具體實現。

* 不要一問一答,應該多讓應聘者說,這樣才能多全方位瞭解一個人。

* 瞭解一個人的過去,瞭解一個人做過的事情,比其會做什麼更重要。

* 瞭解一個人的性格,想法,思維和行為,比了解其技術技能更重要。

* 溝通能力,表達能力,語言組織能力,理解能力,等方面的能力,關係到了是否能和別人一起工作。

* 基礎知識比知識的點滴要重要得多。你可能不知道其個C++的關鍵字,但你應該要知道C++的繼承和多型。

* 技術技能固然很重要,但比其更重要的是這個人獲取知識的能力,學習能力是在計算機這樣變化飛快行業中必需具備的。

* 是否可以進行培養,比掌握的技能更重要。

 

四、實際參與??這一步可能是很不好實施的。因為,這需要一些應聘者付出一定的時間,如果是畢業生,那沒有問題,先讓他來實習一段時間。但如果別人有工作,就不好了。也許你會說,這就是試用期的用處了。不過,我個人覺得,你得要尊重應聘者,人家把那邊的工作辭了,來你這邊工作,三個月試用期間,如果沒有什麼原則上的問題,你作為一個招聘方又反悔了,這樣做很是相當的不好。如果發現這樣的事,只能是招聘者自己的問題。

在面試過程中,一些招聘者會讓應聘者們一起做個遊戲,或是搞個辯論比賽,或是現場組個團隊幹個簡單的事情,有的甚至讓應聘者請一天假到自己的公司裡來和自己的團隊一同工作一天,並要完成某個事情(甚至給其設定上deadline),並通過這些來考量應聘者的實際參與能力。

是的,如果沒有一起工作過,沒有一些實際的事情發生,單靠幾個小時的面試很難了解一個人的。設定上這些面試的環節,在最短的時間內來了解應聘者的一切,對於招聘方來說無可厚非。而且有的時候也能得到不錯的效果。在這裡,我只提一點,有時候這樣的週期拉得很長,讓應聘者付出了很多,反爾會讓應聘者產生反感和厭煩情緒,從某種意義上來說,這實在是對應聘者的不尊重。

對於這一點,我一直持疑問的態度,所以,我在其後打了兩個問號。老實說,對於實際參與這一環節,我個人的意見是適可而止,因為時間太短了,無論你怎麼做你都無法瞭解完整。即然無法瞭解完整,那就獲取你最需要的吧,就是本文開頭的那三個問題,以及上面所述的“第三點”(瞭解應聘者的以往經歷)。

也許這個文章中有一些你不同意的觀點,沒問題,歡迎批評,如果你有更好的做法,我也想聽聽,不妨在這裡留個言。

 

相關文章