在CSDN論壇上,曾有一篇主題為“這裡90%的程式員根本就不算程式員”的熱帖,談到並不是每個作業碼的人就是程式員,那些不熱愛開發行業的人根本不算程式員。並列舉了許多“偽程式員”的行為特徵。
無專屬偶,國外一家技術公司RethinkDB在其官方部落格上也談到這個問題,抱怨了找到一個真正符合要求的程式員是多麼艱難。外刊IT評論編譯了這篇博文,全文如下:
我們積極的對外招聘已經有四個多月了,如果要問從這次經曆中有哪些收穫,我只能說,我終於明白,Jeff Atwood在FizzBuzz這篇文章裡說的並不是玩笑話。(譯者:這篇文章裡說程式員不會編程)。
在新成立的公司中,我們RethinkDB公司因面試過程最為苛刻而出名。這是事實——我們對面試過程不會有半點鐘妥協。我們期望通過最大範圍的篩選來建立一個高品質的Team Dev。對於這個初衷,我在之前的一些文章裡提到過多次。在過去的幾個月裡,我們遇到不少人認為我們的要求高的有些離譜,以為我們是在招聘同時具有量子力學和計算科學雙學位的火箭專家。這是誤解。我們只希望招的能編程的程式員。
為了滿足福士的好奇,我們公布了一些煙霧測試 (Smoke Test)過程(smoke test),這個過程只是半個小時內的一次電話交流,大概20個候選人中有19人通不過這個測試。(這些候選人都是經過簡曆審查篩選出來的)。我們並沒有要求他們對一個複雜的演算法提出解決方案。我們並沒有讓他們去做腦筋急轉彎問題。我們並沒有讓他們做複雜的指標演算法和操作。就像下面的這個問題,絕大多數的應聘者都不能正確的解答,甚至做滿半個小時,甚至給了大量的提示的情況下:
請寫出一個C函數,實現反轉一個單向連結資料表的功能。
就這樣的一道題。我們選了一些簡曆寫的讓人不可抗拒的應聘者(包括做核心開發的,編譯器設計的,還有一個哲學博士學位的),沒有人能正確的編寫出來,不管給他們多少時間。
我們當然也問了些其它問題。把N個元素插入到一個Vector裡(或者ArrayList,或其它的你所選擇的語言裡被稱作動態數組的東西),最壞的最複雜的一種運算情況是怎樣的?我們並不是考察應聘者對這個資料結構的瞭解程度,我們只是希望他們用自己的見解闡述一下。我們會告訴他們vector的內部工作原理。你們知道嗎,我們甚至接受O(N log N)次這樣的答案。
如何?一個讀-寫鎖?我們並不要你通過電話編寫出這樣一個程式。只是說說方案,如果你的方案裡能提到饑餓矛盾問題(starvation issues),那我們就算你中了頭彩了。我們真的希望老天能不拘一格降人才,可是我們真的沒有找到這樣的人。
我們試探著詢問多任務啟動並執行合作模式和搶先模式的區別。我們試探著詢問條件變數的工作原理。20個人中有19個人從頭至尾一句話都沒說出來。
為什麼我們會詢問這些很特別的問題?因為這些知識對一個大學畢業生來說是他們所學的全部課程中最核心的部分,因為這些知識在我們的日常工作中會以這 樣或那樣的形式被使用。而且,在這四個月的招聘中,我們發現,如果你能理解線程和協調進程的區別,你就能知道如何反轉一個連結資料表,如果你對條件變數有了基 本的瞭解,你就能獲得更多的機會在眾多的應聘者中證明你是個更好的程式員。很多的人都做不到這些。
我們希望所僱傭的程式員擁有比我們上面所說的技能更多的能力,而且我們不認為這些要求很過分。只是希望你們對基礎知識有紮實的掌 握,有潛力去完成艱巨的任務,對你們所開發的程式有虔誠的熱愛。引用我的同事第一次聽到FizzBuzz裡的言論時的反應:“如果他們不能編程,他們能幹什嗎?”挑選簡曆需要好幾個小時,每個應聘者需要20多分鐘進行煙霧測試 (Smoke Test)。然後面試過程每個人需要45分鐘。整個過程差不多要15個小時的工作。這佔用了一個懂技術的工程師大量的時間去發現一個可用的候選人。
真正的程式員,請你站出來!
原文連結:http://www.rethinkdb.com/blog/2010/06/will-the-real-programmers-please-stand-up/
譯文連結:http://www.aqee.net/2010/07/19/will-the-real-programmers-please-stand-up/
本文出處:外刊IT評論[http://www.aqee.net/]