跟專業訓練同樣重要的條件──解題能力:軟體開發見聞錄#2/葉光釗
很多未來的職場新鮮人都想問:「高科技公司到底要什麼樣的人才」;然而這個問題很難回答,一來是因為技術環境變化太快、二來則是有些能力並非只靠專業訓練就能獲得的。
正在筆者辦理M社退役手續、準備下台一鞠躬的同時,也正好是本屆實習同學工作告一段落的時候。跟很多未來的職場新鮮人聊天,他們總有個共同話題是:你們這些高科技公司到底要什麼樣的人才?
研發工程師要什麼東西,才能進入這個人人稱羨的行業?是C++、JavaScript、還是Java?是前端(front end)還是後端(back end)?就像考前猜題,有個方向才好準備啊。
我必須老實說,雖然在這一行打滾很久,但卻沒什麼自信能給出標準答案,甚至也不知道有沒有標準答案。談技術,我懂的東西現在工程師都不談(你聽過OOP嗎?);談資質,我也不能說我招來的個個都是明星球員。技術日換星移,人才來來去去,不變的東西真沒幾樣。
不過,仔細回想,的確還是有一項能力,是M社自始至終都算是很重視的,就是「解題能力」。這個詞很抽象、在各行各業的定義我想也不同;既然我又不寫教科書,這裡並不打算深入研究。
這次我想提的,是一個還蠻特殊的例子,來說明M社的角度。話說回來,還是要聲明,我在M社也只看到這一例;但是因為太具指標性,所以值得說一說。
兩種表現
幾年前,我在該社的美國Redmond總部剛好有個機會,參與一個實習空缺的人員招募工作,是個「實習產品經理」(PM intern)的缺,所以照例不限背景。
他們的面試方式也很妙,就叫各候選人直接參與一個功能工程小組(feature crew);小組由一個產品經理(PM)、一個軟體開發工程師(SDE)、一個軟體測試開發工程師(SDET)所組成,並開始進行程式碼審查(code review)和除錯(debug)討論,看看這些新手能提出什麼高見。
我看了兩個人,前一個是科班出身,也看得出來是老手(雖然還是學生)。除錯的重點一下就點出不是「boundary condition」(邊界條件)就是「exception handling」(例外狀況處理)可能有問題,直接就在電腦上設立中斷點(break point),兩三下就追蹤出錯誤所在,沒什麼意外。
第二位就好玩了:那個男生的背景是音樂理論作曲,程式語言只會BASIC(這是誰過濾的啊?),但除錯的程式卻是用C++寫的;他雖然看得懂大致結構,可是並不懂語法細節。
令我印象非常深刻的是,他一邊在牆上畫圈圈,代表一個迴路的完成,一邊問SDE邊界條件到達了沒;就這樣,他在整個白板上畫滿了圈圈,而在最後一個圈圈的時候,只畫了二分之一,他就對主考官說,「這裡的條件不對」。
真不愧是藝術家,把整個過程搞得像表演一樣。大家猜猜,最後M社用了其中哪一個?為什麼?
答案揭曉
就如同很多人可能會猜測的,當時公司的確是選擇了那位音樂系的學生。不過原因並不是他的背景、或是他比較會表演,更不是為了更有戲劇性。
主要是因為他展示了一項M社很重視的能力:將解題過程以視覺化(Visualization)方式呈現出來,並且藉由觀察圖形不平衡、不完整、或是不一致的地方找出關鍵點,再進一步求出解決方案。
根據以往的經驗,這種人少之又少,所以當下就讓他簽了聘用同意書;不但如此,雖然他還是學生,但公司給了他相當高的薪等。
為什麼這種能力很重要?我不知道有沒有教科書做這方面的理論探討,但單從我自己用人的經驗來看,這樣的人至少有兩個優點:
有能力解決更複雜的問題:我們常看到他們將困難問題,轉換到另一個相對比較容易求解的領域,然後在那裡解決問題;
這樣的人比較有能力解決不同領域的問題,可以勝任組織裡不同的角色。M社裡很多這樣的例子,不過牽涉到商業秘密,就恕我不細談了。
至於這樣的能力如何養成,這就有兩派說法了:一派人認為這是一種天賦,學不來的,完全是 「稀缺資源」,找到一個少一個;所以碰到了完全不囉嗦,不需看背景、剛畢業更佳,優先高薪聘再說。
包含我在內的另一派人,認為這種能力人人都有,就看有沒有被誘發出來;如果有足夠多的時間跟具有同樣解題能力的同儕切磋,這種能力是可以發展出來的。當然,兩種說法見仁見智。
所以啦,以我之見,各位未來的IT職場新鮮人,不要盡是在電腦前面盯著螢幕,也要拿起紙筆,磨練一下自己的解題能力吧。