嵌入式學習指南

才智咖 人氣:3.27W

僱傭合適的人對於Fog Creek軟體公司來說是非常關鍵的。在我們這個領域,有三類人可以挑選。在一個極端,是哪些混進來的,甚至缺乏最基本的工作技巧.只要問這類人兩三個簡單的問題,再讀一下他們的簡歷,就可以輕易地剔除他們。另一個極端的型別是才華橫溢的超級明星這些人僅僅為了好玩就用匯編語言為PalmPilot(一種手掌電腦)寫了一個Lisp(一種人工智慧程式語言)編譯器。在這兩種極端型別中間的是一大群不能確定水平的候選者,也許他們中的某些人能幹些什麼?這裡的關鍵是明白超級明星和那一大堆屬於中間型別的人的區別,因為FogCreek軟體公司只僱傭超級明星。下面我要介紹一些找出超級明星的技巧。

嵌入式學習指南

Fog Creek公司最重要的僱傭標準是:

有頭腦, 並且完成工作

就是這些了。符合這樣標準的人就是我們公司需要的員工了。記住這條標準。每天上床前背誦這條標準。我們公司的目標之一就是僱傭擁有這樣的潛質的人,而不是僱傭懂某些技術的人。任何人所擁有的某些具體技術都會在幾年內過時,所以,僱傭有能力學習新技術的人,要比僱傭那些只在這一分鐘知道SQL程式設計是怎麼回事的人對公司更划算一點。

有頭腦確實是一個很難定義的品質。但是讓我們看一些在面試時能提問的一些問題,通過這些提問,我們可以找出擁有這種品質的人。完成工作非常關鍵。看起來有頭腦但是不能完成工作的人經常擁有博士學位,在大公司工作過,但是在公司中沒有人聽他們的建議,因為他們是完全脫離實際的。比起準時交活兒,他們寧願對於一些學院派的東西沉思。這些人由以下特性而可以識別出來。他們總是愛指出兩個根本不同的概念間的相似性。例如,他們會說“Spreadsheets是一種特殊的程式語言”,然後花一個禮拜寫一篇動人的,智慧的白皮書。這篇白皮書論述了,作為一個程式語言,spreadsheet關於計算語言特性的方方面面。聰明,但是沒用。

現在,我們來談談完成工作但是沒有頭腦的人。他們愛做蠢事。從來也沒有考慮過將來得靠他們自己或者別的什麼人來亡羊補牢。通過製造新的工作,他們成為了公司的負債而不是資產。因為他們不僅沒有為公司貢獻價值,還浪費了好員工的時間。這些人通常到處貼上大堆的程式碼,而不願意寫子程式。他們是完成了工作,但是不是以最聰明的方式完成工作。

面試時最重要的法則是:

做決定

在面試結束時,對於被面試者,你不得不做一個直截了當的決定。這個決定只有兩個結果:僱傭或者不僱傭.回到你的電腦前,立刻用電子郵件通知招聘負責人你的決定。電子郵件的主題應該是僱傭或者不僱傭。接著你需要在正文中寫兩段來支援你的決定。

沒有其他的答案。永遠不要說,“僱傭你,但是不能在我的團隊中”。這是非常粗魯的,因為你在暗示應試者沒有聰明到能有和你一起工作的資格,但是以他的頭腦適合進入那些天生輸家隊伍。如果你發覺自己被誘惑,想說出那句“僱傭你,但是不能在我的隊伍中”,那麼就簡單的把這句話變成“不僱傭”再說出口。這樣就沒事了。甚至如果某個人在特定領域很能幹,但是在別的隊伍中將會表現不好,也是不僱傭。事物變化的如此之快,我們需要的是在任何地方都能成功的人。如果某些情況下你發現了一個白痴專家(擁有某些特殊能力的白痴),這個專家對於SQL非常,非常,非常的精通,但是除此之外什麼也學不會,不僱傭。在FogCreek公司他們沒有將來。

永遠不要說,“也許,我吃不準”。如果你吃不準,意味著不僱傭。看,比你想象的容易的多。吃不準?就說不!同樣,如果你不能作出決定,那意味著不僱傭。不要說,”嗯,僱傭,我想是這樣的。但是關於...,我想知道...”。這種情況就是不僱傭。

最重要的是記住這點,放棄一個可能的好人要比招進一個壞人強(譯者按:中國有位哲人說過,寧可錯殺一千,不可放過一個,呵呵)。一個不合格的求職者如果進入了公司,將要消耗公司大量的金錢和精力。其他優秀員工的還要浪費時間來修復這個人的錯誤。如果現在你還在猶豫,不僱傭。

如果你是FogCreek公司的面試官,當你拒絕了大量的應聘者時,不要為FogCreek公司將因此僱不到任何人了而憂慮。這不是你的問題。這是招聘負責人的問題。這是人力資源部的問題。這是Joel(譯者注:FogCreek公司的老闆,本文作者)的問題。但不是你的問題。不停地問自己,哪種情況更糟糕?一種情況是我們變成了一個龐大的,糟糕的軟體公司,充斥著許多腦袋空空如可可果殼的傢伙,另一種情況是我們是一個小而高品質的公司。當然,找到優秀的應聘者(並聘用他們)是很重要的。找到有頭腦而且完成工作的人是公司中的每個員工的日常工作之一。但是當你作為JoelCreek公司的一員真的開始面試一個應聘者時,要裝作現在正有很多優秀的人想打破頭擠進FogCreek公司。總之,無論找到一個不錯的應聘者是多麼的難,永遠不要降低你的標準。

但是你如何作出僱傭或者不僱傭這樣艱難的決定?你只要在面試過程中不停地問自己:這個人有頭腦嗎?這個人能完成工作嗎?要作出正確的回答,在面試時你必須問對問題。

開個玩笑,下面我要問個有史以來最差的面試問題:“Oracle8i中的資料型別varchar和varchar2有什麼區別”這是一個可怕的問題。掌握這種瑣碎的技術細節和FogCreek公司想僱傭你之間沒有任何聯絡。誰會去記這種東西?如果有線上幫助,你可以在15秒內找到答案。

實際上,還有更差的問題,等會兒我會談到的。

現在我們要談到有趣的部分了:面試時提哪些問題。我的面試問題清單來自於我去微軟公司找第一份工作的經歷。這裡實際上有幾百個微軟面試問題。每個人都有偏愛的問題。你也可以發展一套自己的面試問題以及面試的個人風格,這樣你就可以比較容易地作出僱傭/不僱傭的決定。以下是我成功使用過的一些面試技巧,在面試前,我讀一遍應試者的簡歷,然後在一張紙片上隨便寫以下我的面試計劃。這個計劃實際上就是我要問的問題清單。以下是一個例子(用來面試程式設計師的):

介紹

應試者參加過的專案

無法回答的問題

C語言函式

你滿意嗎?

設計問題

挑戰

你還有什麼問題?

在面試前,我非常,非常當心,避免自己先入為主。如果在面試前你就已經想當然地認為,一個麻省理工的博士一定是一個有頭腦的人。那麼在接下來的一小時的面試時間內,無論那個麻省理工的博士說什麼都不能改變你的最初印象。如果在面試前你就認為這個應試者是個傻瓜,那麼他面試時說什麼也無濟於事。面試就象一個非常精巧的天平。

一小時的面試結束後就要對一個人下結論是不容易的(但是你又必須在面試結束後得出結論)。一些不起眼的細節可能會影響最後的結論。如果你在面試開始前對於應試者有了一點了解的話,就好比天平的某一端加上了重重的砝碼。這樣面試本身就會變得沒有用處了。以前有一次在面試前,一個招聘負責人跑進我的房間說,“你肯定會愛上這個傢伙的!"對一個男孩?天哪,這簡直讓我發瘋。我本來應該說,“嗯,如果你這麼確定我會喜歡他,為什麼你不乾脆僱傭他,何必讓我浪費時間來面試?”但是那時我還太年輕幼稚,所以還是面試了那個人。當這個傢伙開始說一些蠢話時,我對自己說,“哇塞,這應該是個例外情況,也許是大智若愚。”我開始帶著玫瑰色眼鏡看他了。

於是我以說“僱傭”結束了面試,雖然他是一個糟糕的面試者。接下來發生了什麼事?除了我,其他的面試官都說,不要僱傭這個人。教訓是,不要聽別的人的話,在面試應試者前不要四處打探這個面試者的情況。最重要的是不要和別的面考官談論應試者,除非你們都已經作出了獨立的判斷。這才是科學的做法。

作為面試步驟的第一步,介紹的目的是讓應試者放輕鬆。我通常花30秒鐘,講一下我是誰,接下來面試會如何進行。我總是使得應試者確信,我們關心的是他(她)如何解決問題的,而不是他(她)的最終答案是對還是錯。順便說一下,面試時,你不要和應試者隔著一個桌子坐著,否則在你和麵試者之間就有了一個障礙,並且暗示著一種比較正式嚴肅的氣氛,這樣應試者就很難放鬆了。更好的辦法是把桌子靠牆放著,或者和應試者坐在桌子的同一邊,這樣有助於應試者放鬆。只有應試者不會因為緊張而表現失常,你才能更有效的進行面試.

第二步的內容就是問應試者最近做了些什麼專案。對剛畢業的學生, 如果有論文就問問論文,沒有的話,就問問他們做過什麼很喜歡的大作業.例如,有時候我會問一下,“你最喜歡上學期哪門課程?不一定要和計算機相關的。”事實上,如果應試者回答的課程和計算機沒有關係,我會比較高興。有時候你會發現這個計算機系應屆生選擇了儘可能少的計算機相關課程,但是卻選修了很多和音樂相關的課程。但是他(她)卻說最喜歡的課程是《物件導向資料庫》。哼哼,不錯啊.不過如果你直接承認你喜歡音樂勝於計算機,而不是在這兒胡說八道的話, 我會更高興一點。

當面試有工作經驗的人時,你可以讓他們談一下前一份工作。

我問這個問題的目的是在尋找一樣品質:熱情。在應試者談到他(她)最近做過的專案時,你觀察到以下跡象都是不錯的:

談到他們做過的專案時變得熱情洋溢;他們的語速更快,語言更生動活潑。這說明他們對某些東西有興趣,有熱情(因為現實中有許多人對所做的專案根本漠不關心呢)。即使他們激動地表達對做過的專案的負面感情,這也是一個好的訊號。“我曾經為上一個老闆安裝FooBarMarkII,但他是個傻瓜!”表現出熱情的人就是我們要僱傭的人。差的應試者對工作根本就不關心,所以根本不會激動。一個非常好的訊號是當應試者很激動地談論上一份工作,以至於暫時忘記了他們正在被面試。有時候應試者剛開始面試時表現的很緊張,這是很正常的現象,所以我通常忽略不計。但是當他們談到單色計算藝術(ComputationalMonochromaticArt)時,這個傢伙變得極端興奮,一點都不緊張了。不錯,我喜歡這樣的應試者,因為他們關心他們做的事。(什麼是單色計算藝術?拔掉你的電腦顯示器的電源就可以看到了)

能認真地去解釋事情。某些人被我拒掉的原因就是他們不會用普通人能明白的語言去解釋他們做過的專案。很多工科專業的人總是以為所有人都知道Bates理論(譯者注:BatesTheorem,一種經濟學的理論)或者Peano公理組(譯者注:Peano"sAxioms,數論中的一些定理)是什麼。如果應試者開始滿口行話了,讓他們停一停,然後你說,“能幫我個忙嗎?就是為了練習一下,你能把剛才說的用我老祖母也能理解的話說一遍嗎?”但即便如此,有些人還是繼續用那些術語,而且根本沒法讓人明白他們在說什麼。天哪!

如果這個專案是一個團隊專案,看看他們是否在有承擔領導責任的跡象?一個應試者可能會說:“我們用的是X方法,但是老闆說應該是Y,而客戶說應該是Z。”我會問,“那麼你怎麼做的?”一個好的回答可能是“我設法和團隊中別的人開了個會,然後一起搞出個辦法...”壞的回答看起來象,“嗯,我什麼也不能做。這樣的問題我解決不了。”記住,聰明並且能完成工作。要搞清楚某人是否能完成工作的一個辦法就是看看他(她)過去是否傾向於完成任務。事實上,你可以主動要求他們給你個例子證明他們能擔任領導作用,完成任務。-例如克服公司的陳規陋習。

現在我們談談清單上的第三款,無法回答的問題。這很有趣。這個主意的關鍵在於問一些不可能有答案的問題,就是想看一下應試者怎麼辦。“西雅圖有多少眼科醫生?”“華盛頓紀念碑有多重?”“洛杉機有多少加油站?”“紐約有多少鋼琴調音師?”

聰明的應試者猜到你不是要測驗他們的專業知識,他們會積極地給出一個估計。“嗯,洛杉機的人口是七百萬;每個人平均擁有2.5輛轎車.。”當然如果他們的估計完全錯誤了也沒有關係。重要的是他們能積極地試著回答問題。他們可能會試著搞清楚每個加油站的儲量。“嗯,需要四分鐘給一個儲油罐加滿油,一個加油站有十個油泵每天執行十八個小時...”他們也可能試著從佔地面積來估計。有時,他們的想法的創造力讓你吃驚;而有時,他們直接要一個LA的黃頁去查。這都是好跡象。

不聰明的應試者則被難住了。他們目瞪口呆地望著你,好像你來自火星。你不得不提示:“嗯,如果你想建立一個象洛杉機那麼大的城市,你需要建立多少個加油站?”你還可以提示他們:“加滿一個儲油罐要多長時間?”不過,這些榆木疙瘩腦袋還是隻會坐在那裡發呆,你得拖著他們往前走才行。這類人不會解決問題,我們可不要這樣的人。

關於程式設計問題,我通常要求應試者用C語言寫一些小函式。以下是我通常會出的題目:

將一個字串逆序

將一個連結串列(linked list)逆序

計算一個位元組(byte)裡有多少bit被置1

搜尋給定的位元組(byte)

在一個字串中找到可能的最長的子字串,該字串是由同一字元組成的字串轉換成整數、整數轉換成字串(這個問題很不錯,因為應試者要用到堆疊或者strev函式)注意,通常你不會希望他們寫的程式碼多於5行,因為你沒有時間理解太長的程式碼。