對於履歷的來源,我想要補充一點,如果可以的話,盡量運用人際網絡將徵才的訊息透露出去。依據經驗,透過人際網絡所找到的對象,通常會比由人力銀行之類的管道來得精準。這些對象可能更符合你的需求,而且比較能確保品質。

測驗的效果有限,直接面談可以發掘更多
挑出適合的可能人選之後,接下來,雙方敲定時間後,便可以安排面談。有些公司針對面談會安排滿長的時間和內容,例如包括一些基本資料的填寫、智力測驗、心理測驗、外語測驗(通常是英文),最後才是面談。

規模小一點的公司,可能就沒有這麼複雜的安排。之所以會有像智力測驗和心理測驗之類的測驗,當然是依據人力資源的專業而設計出來的,目的當然是希望可以確保應徵者的智力達到一定水平,而在心理的傾向上也符合你希望徵才的類型。

不過,以我的觀點,這兩類的測驗對軟體公司而言,可能不是絕對必要的項目。因為以智力而言,從專業技能來考驗應徵者,倘若能夠過關,那麼相信應徵者的智力應該不會太低。而心理傾向是一件複雜的議題,從簡單的測驗中能做出的觀察和推斷可能也有限,其效果或許還不如從面談中所發掘出來的應徵者人格特質。

演算法或資料結構等考試,實質意義不大
那麼需不需要專業技能的考試呢?例如請應徵者當場解答一些演算法或資料結構的問題,或者當場請他寫下解決你所指定問題的程式碼。的確有一些公司會這麼做,但我覺得聽起來好像很嚴謹,但實質意義不大。

原因在於,像演算法或資料結構這樣子的測試,比較偏向於在學校的課堂中就會接觸到的東西,你應該從他的學歷就能夠推斷他是否具備這方面的能力,即使他忘了,他也應該查了書本或甚至網路上的資訊就能回憶起來,能不能即時在面試前的測驗中完成,應該不是太重要的事情。

就在寫下此文的同時,我問了坐在我旁邊的某英雄級程式人,某個資料結構進行某個操作時的時間複雜度是多少,他張大的嘴巴答說:「我忘了耶…要重新再回憶一下才行」。這位英雄,人既聰明、學生時期的研究也做得好,程式也寫得很快,但如果你在面試考題裡出了這一題,很有可能就把他給刷掉,而損失掉一名戰將。

選人的條件很多,終究要有所取捨
面談前的測驗、面談本身究竟應該扮演什麼角色,以及從什麼角度切入來和面談者互動,話說回來,終究還是跟你想尋找什麼樣類型的程式設計人員有關。

在此之前,其實我們沒有談到設定用人的對象。但總要決定你要找什麼樣子的人,才知道應該如何跟他談。所以在討論面談的過程之前,先讓我們來看看你可能會怎麼決定你的目標對象,以便決定該如何進行面談。

在考慮招攬新的人手進來加入團隊時,你必須先設定好目標對象,你可能會考慮到以下幾個因子:(1)對特定語言的熟悉程度(2)對特定領域知識的熟悉程度(3)學習新事物的能力(4)獨立解決問題的能力(5)溝通協調的能力(6)對軟體工程的熟悉程度(7)電腦科學背景知識的熟悉程度(8)對軟體開發、程式設計的熱情(9)有多聰明。

你可能會同時列下很多重要的因子,但是完美的事物終究是不存在於這個世間的,完美的人才也未必會投履歷到你這兒來,所以在不可能滿足所有條件的情況下,必須有所取捨。

與其寄望新人什麼都懂,不如著重對方是否具備快速上手的能力
許多用人單位主管,換句話說,也就是開發團隊的管理者,會將(1)對特定語言的熟悉程度和(2)對特定領域知識的熟悉程度,擺在最優先考量的位置上。這並不是說不對,而是這兩件事情,有時候反而是比較容易解決的。

什麼意思呢?如果你的應徵者滿足其餘的條件,但是就是不熟悉你們正在開發的專案所用的語言,其實考慮錄取他,請他快速學好目前正在使用的語言,或許是一個比較好的選擇。

領域知識亦同,例如你們正在開發一個視訊解碼的程式碼,與其計畫找一個對此視訊解碼相關知識已經十分熟悉的人,或許找到一個其他方面都夠水準,可以很快學會該視訊解碼知識的程式人,還會來得比較快。

最近我們找了一位學校剛畢業的新人加入我們的團隊,他完全不會Java,也沒有Web程式設計的經驗,不過我們還是順利讓他在報到的一週內開始上工,開始撰寫Java-based的Web應用程式。

我們的目標並不是要找一個十分熟悉Java程式語言的人,而是在一開始便能夠快速適應,然後投入開發的人。

這樣子的例子說明了,其實並沒有必要在語言是否熟悉上,做太多的限制和考量。你只需要考慮,他能不能很快上手。

這也就是上述列出的各種考量因子裡會有「學習新事物的能力」這一項的原因。說實話,一個開發團隊想要招攬新人手,無論如何,找進來的人,總是會有各種可能不熟悉的事物。

想要找一個一進來就每件事情都懂的新人,應該是非常的困難,所以,「學習新事物的能力」就很重要。與其寄望他一進來就什麼都懂,不如期望他即使不會,也能很快學會。

而且,更重要的是,軟體開發本來就是一個多變的行業,即使一個人熟悉你們現在做的東西,或許到了明年,你們要開發的東西不同了,要用到的技術也不同了,甚至是全新的技術時,是否具備「學習新事物的能力」就很重要。

了解電腦科學的基本原理,跟上新的技術不會太困難
對軟體開發而言,具備「學習新事物的能力」,代表可以在短時間內了解一項新事物,例如新程式語言、新的開發平臺、新的觀念、新的技術等等,同時可以很快地掌握到核心精神,並且加以運用在實際的開發中。

我不知道「學習新事物的能力」是否可以系統性地訓練,但無庸置疑的,擁有這樣子的程式人在你的團隊中,是一件很棒的事情。

而「電腦科學背景知識的熟悉程度」代表著他受過基本的、廣泛的電腦科學的訓練,他對諸如演算法、資料結構、程式語言、作業系統、電腦網路、編譯器、資料庫之類的學科有一定的了解。

這並不是說他必須仍然牢記課堂上所學的東西,而是他必須對該學科有個大體上觀念的認識,例如現代作業系統分時多工的排程,以及多程序、多執行緒並行執行時的同步問題以及解決機制。

這些電腦科學的基礎訓練除了有助於他在解決問題時,不會做出太偏差的判斷(例如,不知道一個臭蟲可能源自於競速條件,所以才會偶爾發生,難以重複複製),同時也有助於他學習新的事物。

因為,電腦科學的理論大體上變動十分緩慢,卻是構成各種具體技術的根本,我們可以說即使有新的技術問世,幾乎也是萬變不離其宗。了解電腦科學的基本原理,要跟上任何新的技術或發展,就不會太困難。這是我之所以認為「電腦科學背景知識的熟悉程度」必須納入考量的原因之一。

專欄作者

熱門新聞

Advertisement