最近雅虎北研解散的消息觸動(dòng)了各大互聯(lián)網(wǎng)公司HR的神經(jīng)。公司里一下子面試的任務(wù)多了起來。正好借機(jī)會(huì)總結(jié)一下自己畢業(yè)后作面試官以來參與若干場技術(shù)面試的一點(diǎn)心得,分享一下。
當(dāng)好一個(gè)面試官其實(shí)也很不容易,不但要練就一雙火眼金睛,把優(yōu)秀的人才和水貨在短短的面試的幾十分鐘里分辨出來,同時(shí)面試官本身就是候選人觀察公司的一個(gè)窗口。在面試中,面試官還要注意很多接人待物的細(xì)節(jié),既能彰顯公司求賢若渴、對人才的尊重,又能將公司的技術(shù)水平和文化氛圍展露一二,以求給候選人留下良好的印象。
社招某種意義上比校園招聘更困難。面對形形色色的社招候選人,首先一個(gè)要想清楚的問題就是我們到底該招什么樣的人?簡單的說就一句話,適合自己公司的人。每個(gè)公司都有獨(dú)特的文化和特定的業(yè)務(wù)需求,更有各自的業(yè)務(wù)發(fā)展階段。就算同樣是招程序員,也應(yīng)該因地制宜,有所側(cè)重。拿我現(xiàn)在所在的公司(某大型外企駐華研發(fā)機(jī)構(gòu))、所在的行業(yè)(瞬息萬變的互聯(lián)網(wǎng))來說,我覺得最重要的就是下面幾點(diǎn):
第一,聰明。作為大公司,尤其是外企,總部的制約總是一定程度的存在,互聯(lián)網(wǎng)行業(yè)更是一個(gè)日新月異的行業(yè)。這時(shí),項(xiàng)目背景和知識(shí)遠(yuǎn)沒有能力靠譜。如果一個(gè)人的工作業(yè)績,是知識(shí)日積月累的沃土上自然的發(fā)芽、開花、結(jié)果,那么在充滿未知、充滿變化的工作中,一旦項(xiàng)目發(fā)生較大變化,那么適應(yīng)新任務(wù)、新角色、新挑戰(zhàn)時(shí),就很容易出現(xiàn)較大的落差,往往工作效率顯著下降,更嚴(yán)重的甚至只能一拍兩散。公司花這么大的力氣組織招聘和培養(yǎng)人才,如果僅僅因?yàn)轫?xiàng)目和行業(yè)的變化就發(fā)生大規(guī)模離職,想來從公司角度是非常不劃算的。所以,在我參與的面試中,我比較提倡招募聰明人,要招比自己聰明的人,招能適應(yīng)各種新技術(shù)、新行業(yè)、接受新挑戰(zhàn)的人,招和自己不一樣的人。當(dāng)然,這也是由公司特點(diǎn)決定的。我們公司組織機(jī)構(gòu)調(diào)整、項(xiàng)目變化頻繁,公司規(guī)模很大、業(yè)務(wù)范圍很寬,對正式員工相對較負(fù)責(zé),內(nèi)部培訓(xùn)較完善,裁人比較慎重,發(fā)生各種變化時(shí)內(nèi)部換崗機(jī)會(huì)多。其他公司未必可以參考,但可以結(jié)合自己的需求和特點(diǎn)對號(hào)入座。
為了測試一個(gè)人的聰明程度,我通常會(huì)給他一道算法類的題目,讓候選人嘗試給出一個(gè)經(jīng)過優(yōu)化的解。選題時(shí),我通常會(huì)選擇那些不同思路、不同水平下有很多不同的解的題目。我一般并不指望候選人一下子把最優(yōu)解做出來(實(shí)際上也有個(gè)別能做到的特別優(yōu)秀的候選人,但同時(shí)也要小心他以前做過類似的題)。我會(huì)通過交流去嘗試?yán)斫馑膬?yōu)化思路,然后適時(shí)的沿著他的思路給點(diǎn)提示,看看他能不能有什么進(jìn)展。在交流中,我主要觀察一個(gè)人的邏輯思維的嚴(yán)密性、考慮問題是否全面,思考是否迅捷,能不能突破既有思路的框框。我還要觀察候選人能否在解題過程中很好的理解問題,對問題能否進(jìn)行系統(tǒng)性的有條理的分析。俗話說文無第一、武無第二,其實(shí)任何最優(yōu)解都有一些充分限定的條件或假設(shè)作為前提,除非用數(shù)學(xué)公式的風(fēng)格嚴(yán)謹(jǐn)?shù)某鲱},常規(guī)意義的完美解是很少存在的。一個(gè)人,如果能突破常規(guī),能對問題有很好的分析,取得一定進(jìn)展,在有限的時(shí)間和面試的壓力下,我覺得能做到這些已經(jīng)難能可貴了,面試官也并不一定有必要盲目的追求最優(yōu)解。
在這里,也要順道提醒參加面試的候選人。解題時(shí),要留意面試官的問題和提示(如果有的話)。我記得見過一些候選人在面試中完全封閉在自己的世界里,從面試官的角度來說,他們完全沒有任何進(jìn)展的憋在那里,甚至在面試官主動(dòng)幫助他的時(shí)候也沒有取得任何有意義的反饋??v使候選人天賦異稟、聰明絕頂,但如果在面試中與面試官都無法順利協(xié)作,那么實(shí)際工作中又會(huì)如何呢?面試官既然花費(fèi)時(shí)間參加面試,從內(nèi)心深處都是非常希望找到合適候選人的,面試官也希望被面試的你通過面試。所以,從心態(tài)上不要簡單的把面試當(dāng)作一個(gè)非黑即白、相互對立的考試。從某種意義上說,我更不僅僅是一次考試,他更像相親,呵呵。
第二,技術(shù)深度。作為軟件工程師,畢竟還是一個(gè)技術(shù)性崗位。不管你有多聰明,如果個(gè)性和主觀意愿上你并不能在技術(shù)上鉆研到一定深度,那么公司將來派你沖鋒陷陣時(shí)就要考慮一下了。畢竟就算對你來說是新領(lǐng)域,從公司角度看,還是需要你在最短的時(shí)間幫助他們提高產(chǎn)品技術(shù)水平,鉆研到一定深度,在殘酷的市場上競爭時(shí)沒人看你是新手、老手,更沒人會(huì)等著你慢慢成長。所以如果應(yīng)試者沒有追求卓越的習(xí)慣,不能在有限時(shí)間將你學(xué)習(xí)和掌握的技術(shù)鉆研到足夠的深度,那么雇傭你的公司將喪失在殘酷的市場競爭中生存的機(jī)會(huì)。所以,我覺得公司要招的人是這樣的:他們有追求卓越的意愿,有獨(dú)立探索的精神,不斷學(xué)習(xí)和自我進(jìn)步;他們哪怕從事的是全新的領(lǐng)域,只要給他一點(diǎn)合理的適應(yīng)和探索的時(shí)間,他都可以做的比很多人、比其他公司更好。
在技術(shù)深度方面的面試中,我通常會(huì)以候選人以前參與的項(xiàng)目、讀過的書或者熟悉的編程語言,圍繞著這些話題來出題。面試官當(dāng)然不可能什么都懂得很深,所以面試題也不需要過于刁鉆、古怪。拿以項(xiàng)目背景為主的話題為例,可以通過不斷深入的去了解對方的角色和職責(zé),看看他對項(xiàng)目中的各種技術(shù)、架構(gòu)和具體實(shí)現(xiàn)是否熟悉。如果發(fā)現(xiàn)系統(tǒng)設(shè)計(jì)上的瑕疵或需求上的挑戰(zhàn),還可以更深入的探討,看看候選人的反應(yīng)。有些候選人號(hào)稱是核心開發(fā)人員或者項(xiàng)目主管,但實(shí)際上問他很多細(xì)節(jié)問題根本回答不出來,這種候選人或許浮在上面做管理工作太多、技術(shù)上不是特別擅長,要么就是簡歷中水分太大并沒有多少真金白銀。談?wù)勈煜さ木幊陶Z言或技術(shù)書籍也是不錯(cuò)的選擇,但要注意別考很偏的問題,因?yàn)槟鞘窃诳贾R(shí),不是考能力。知識(shí)對于聰明人來說是可以學(xué)習(xí)的,面試中要側(cè)重對知識(shí)的運(yùn)用。很多技術(shù)涉獵不深的程序員,常常是知其然不知其所以然,更談不上活學(xué)活用。工作年限較長的程序員,又做不到知其然也知其所以然的,恐怕是難以承擔(dān)重任的。很遺憾在這里不能通過面試題和案例具體舉例,以后方便的時(shí)候再跟大家交流吧。
第三,技術(shù)溝通能力。拋開個(gè)性因素和常規(guī)溝通技巧不談,良好的技術(shù)溝通能力在日常工作中實(shí)際上非常重要。我們需要優(yōu)秀的工程師不但能孤軍奮戰(zhàn),也能團(tuán)隊(duì)協(xié)作:需要大家能在交流中抓住問題要旨,在交流和對話中完全沒有溝通障礙的有效率的可以并肩戰(zhàn)斗的伙伴。而良好的技術(shù)溝通能力,實(shí)際上往往需要很多方面的綜合素質(zhì):“即時(shí)反應(yīng)能力、很強(qiáng)的技術(shù)理解力、系統(tǒng)性的思考和分析能力、總結(jié)和概括能力以及具象化的展示和表達(dá)能力”,實(shí)際上,這樣的人當(dāng)真是很難得的。在面試中,面試官可以關(guān)注候選人在交流中所表現(xiàn)出來的行為特征,比如木訥、啰嗦、跑題、搶話、傲慢、聲音?。ú蛔孕牛┑鹊取τ斜容^嚴(yán)重的溝通缺陷的候選人,縱使其它各項(xiàng)面試表現(xiàn)良好,也要格外慎重,否則極有可能會(huì)拖累團(tuán)隊(duì)的效率。
第四,代碼。歸根到底,程序員特別是基層研發(fā)人員是用代碼說話的職業(yè)。我很難想象一個(gè)事業(yè)上成功的優(yōu)秀的程序員,居然不能在面試中寫出清晰、嚴(yán)謹(jǐn)、高效的代碼。我個(gè)人是建議算法題和代碼題分開來考。代碼題一般重點(diǎn)考察兩點(diǎn):候選人的代碼風(fēng)格如何,包括函數(shù)和變量的命名,程序邏輯是否存在大量的冗余,同時(shí)注意候選人的一些個(gè)人的編程習(xí)慣;此外,還要重點(diǎn)考察候選人的程序邏輯上是否嚴(yán)密,對輸入有無斷言或正確性驗(yàn)證,對各種邏輯上的邊界條件能否正確處理,寫好程序后有沒有一個(gè)自我測試的過程,能否通過合適的測試用例驗(yàn)證程序的正確性。即便對于那些面向基層管理職位和架構(gòu)師職位的人我也是一視同仁的,在我看來沒能力用代碼說話的技術(shù)人員,是很難做好基層的項(xiàng)目管理、研發(fā)管理等職位的(個(gè)別妖孽除外)。歸根到底,代碼是程序員的基本功,一個(gè)初等數(shù)學(xué)亂七八糟的人,我們也不能指望他會(huì)成為微積分的大牛。
第五,品味和興趣。通常,當(dāng)我開始了解一個(gè)候選人的技術(shù)品味時(shí),他已經(jīng)通過了面試而且面試成績還不錯(cuò)。通常我會(huì)問問候選人在業(yè)余時(shí)間讀了什么技術(shù)書籍、探索了什么有趣的新技術(shù),或經(jīng)常去什么網(wǎng)站學(xué)習(xí)。一個(gè)人的技術(shù)水平的提高,除了來自工作時(shí)間公司的項(xiàng)目實(shí)踐,也來自業(yè)余時(shí)間個(gè)人涉獵,這時(shí)一個(gè)程序員的興趣和品味決定了他的視野和成就。作為面試官,一方面通過交流,我希望能向候選人學(xué)習(xí),參考他公司之外的學(xué)習(xí)之道;另一方面,我也希望更全面掌握他的知識(shí)結(jié)構(gòu)和興趣愛好,看看有沒有給能給面試加分的或者適配于工作需要的地方。
好了,今天先分享到這。有什么不當(dāng)和疏漏在所難免,歡迎業(yè)界朋友多多指教!