為什麼新人不會程式設計

發表於2011-06-18

我們都生活在一個這樣的噩夢中:一個新手開發人員前來工作,你歡迎他的參與,卻發現他達不到你對進度的要求,而且他的提問也顯示出他對基礎知識的無知。即使他最終把工作完成了,編寫的程式也很笨拙,需要更能幹的人從頭重寫。然而錄取他的面試官們或人力資源部門(如果你的公司中也有這種官僚體制的寄生蟲的話)卻信誓旦旦地表示,他們只聘用精英人才。

這是一個大問題,尤其是現在,有愈演愈烈的趨勢。每天我都從招聘人員那兒收到騷擾郵件,每個IT公司都極度渴望聘請程式開發者,但是優秀的程式設計師是不可替代的。一個優秀的程式設計師可以輕易完成相當於一個平庸的程式設計師五十倍的工作,而拙劣的程式設計師最終只會產生消極的生產力(參見《一些鮮為人知的程式設計真相》)。因此,對任何公司來說僱傭這樣的人都 是一個可怕的錯誤;對新創公司來說,這簡直就是具有毀滅性的公司殺手。既然這樣,為什麼這種情況出現得如此頻繁呢?

就如同有很多殘留問題困擾著現代軟體工程一樣,這都是微軟的錯。當微軟還是一個人人都暗自想去工作的邪惡帝國時,就以用令人絞盡腦汁的問題面試而著名。例如:為什麼井蓋是圓的?當然,他們也問剛畢業的大學生一些關於電腦科學理論的問題,如:請寫一個二分查詢程式。

每個IT公司都希望能像微軟一樣,甚至Google也這麼希望過,直到目前大家都想成為Google歌這樣的公司。因此這種相互模仿的面試傳統就延續了下來。看看這兩個關於面試問題的最新資訊,一個來自準員工,一個來自谷歌面試官。這裡引用了兩句谷歌面試官說的話,很有啟發性。“我甚至不必說這是一個很好的標準。”和“如果 有任何值得欣慰的地方,至少我們再也不問複雜的謎語問題了,那個實在是相當令人反感。”

令人高興的是,Google似乎有點意識到他們的招聘方法存在問題,可惜的是他們沒有設法解決。Jean Hsu也撰文表明她對技術面試效用的疑問。根本問題是,目前通過行業標準化的軟體面試所需要的技能並不是一個優秀的軟體開發人員所需要的技能,或許這其中有某些相關性,但這個相關性就跟奧克蘭突襲者隊挑選出跑得最快的人,卻無盡沮喪地發現國家橄欖球聯盟並不是一個跑步比賽是一樣的。

事實上更糟糕。因為至少接球員是需要跑的,而我卻可以無所畏懼的向你保證,沒有哪個被聘用的軟體工程師必須寫一個二分查詢程式。這就如你選擇承包商一樣, 因為他們知道怎樣用煤、鐵、爐子和風箱來鍛造和澆鑄鋼材。事實上他們只需要知道最近的一家家得寶(全球最大的家居建材零售商,美國第二大零售商)的地址, 以及用在那裡買的鋼材來做什麼用。

你通常試圖在僱員身上找尋的東西,Joel Spolsky曾給出了準確的解釋,即:就是聰明(Smart)並且能做事(Get things done)的人。(大學院校中到處都是具備前者而不具備後者的人。)不過,首先你必須構建一些其它的能力,也就是說不能完全不具備任何能力。你會驚奇的發 現,如此多的完全不勝任的應聘者出現在技術面試中。谷歌的二分搜尋大概是打算作為他們的“FizzBuzz”(分支切換)——一個你進入谷歌大門必須越過 的障礙。這個“FizzBuzz”在真正的面試開始前佔據了足足五分鐘。

那麼,一場真正的面試包括什麼呢?請允許我提出一個愚見:不聘用沒有任何成就的人。證照和學位從來都不是成就,我是指有實際使用者的真實專案。現在 Google App Engine和Amazon Web Services提供免費的第三方服務,而且要註冊成為一名Android開發人員,並在Android Market釋出程式也總共只需25美元。在這樣一個世界裡,任何軟體開發人員沒有藉口說他沒有自己製作的網站、應用程式或服務。(編注:因此,新人在參加全職工作前,去承接網站開發專案或者軟體開發專案,從中學到的知識和積累的經驗,對新人而言是一項非常寶貴的財富。)

舊的面試體系以有限的資訊為基礎,你只能通過應聘者的簡歷瞭解他們。但是,如果你只面試有成就的人,你將會有一個更寬廣的平臺來開展工作。避開 “FizzBuzz”,直接讓應聘者展示他們的程式碼,並解釋他們的設計決策,如果讓他們現在重新做的話,又會有什麼不同。你在一旁觀看時,讓他們實現一個 或者兩個功能,這樣你就能知道他們實際上是怎樣工作的以及他們在工作中的想法。這才是你想從一場技術面試中得到的,而不是通過一些過時的演算法和資料結構來對此進行估量。這個世界總在不斷前進。

 

原文:Jon Evans 翻譯:敏捷翻譯唐瑭

如需轉載,但請註明原文/譯文出處、譯文超連結和譯者等資訊,否則視為侵權,謝謝合作!

相關文章