微軟老兵看軟體開發#1:視覺化解題能力的重要/葉光釗
筆者曾和很多未來的職場新鮮人聊天,總有個共同話題是:「你們這些高科技公司,到底要甚麼樣的人才?」
筆者曾和很多未來的職場新鮮人聊天,總有個共同話題是:「你們這些高科技公司,到底要甚麼樣的人才?」、「要具備哪些能力,才能成為研發工程師,進入這個人人稱羨的行業?」、「是C++、JavaScript、Java?」、「是front end(前端)還是back end(後端)?」、「就像考前猜題,有個方向,我才好準備啊。」
筆者必須老實說,雖然我在這一行打滾很久,卻沒甚麼自信能給出標準答案,也不知道有沒有標準答案。要談技術,我懂的東西現在工程師都不談了(你聽過OOP嗎?);要談資質,我也不能說每一個我招募來的人都是明星球員。
技術日換星移,人才來來去去,在軟體開發這一行,不變的東西真沒幾樣;不過,仔細回想一下,的確還是有一樣能力,微軟自始至終都算是很重視,那就是解決難題的能力和技巧。
視覺化的解題能力
解題能力這個詞很抽象,我想各行各業的定義也不同。既然我不寫教科書,這裡並不打算深入研究解題能力的定義;不過可以分享一個還蠻特殊的案例,來說明微軟對解題能力的看法。話說回來,還是要聲明,我在微軟也只看到這一例;但是因為太具指標性,所以值得說一說。
幾年前,我在微軟Redmond總部剛好有個機會,參與一個實習空缺的招募專案,是個實習專案經理的缺,所以照例不限背景。
微軟總部的面試方式也很妙,就叫來應徵的候選人直接參與一個功能工程小組(feature crew),這個小組由一名產品規劃經理(Program Manager,PM)、一位軟體開發工程師(Software Development Engineer,SDT)再加一位軟體測試開發工程師(Software Development Engineer in Test,SDET)組成,進行程式碼審查和除錯討論,看看準新人能提出什麼高見。
技術日新月異,經常改變,但解題能力的重要性不太會變化。
當時我看了兩個來應徵的人,第一個是科班出身,雖然還是學生,看得出來是個程式設計老手。討論除錯重點時,他一下就點出來:若不是邊界條件處理(Boundary condition[footnote]作者註:程式流程的設計,在處理一連串資料的時候,很容易在資料集的起始或結束內容處發生問題;是軟體除錯的重點。[/footnote])有問題,就是例外處理(exception handling[footnote]作者註:程式流程的設計,在處理一連串資料的時候,很容易在資料集的起始或結束內容處發生問題;是軟體除錯的重點。[/footnote])寫錯了;然後他直接就在電腦上設定中斷點。毫無意外,兩三下他就找到出問題的地方。
第二位就有趣了。那個男生的背景是音樂理論作曲,只會寫BASIC(是誰做初步篩選的啊?);然而要除錯的程式語言是C++。這位同學雖然看得懂程式的大致結構,可是看不懂語法細節。
我印象非常深刻:他在白板上一邊畫圈圈,每個圈圈代表一個迴路的完成,一邊問SDE邊界條件到達了沒;就這樣把整個白板畫滿了圈圈。在畫最後一個圈圈時,他只畫了一半,就停下來對主考官說,這裡的條件不對。
真不愧是藝術家,把整個過程搞得像表演一樣。
大家不妨猜猜,最後微軟雇用了哪一位同學?為什麼?
相信各位聰明的讀者都猜對了,當時的確是選擇了那位音樂系學生。不過雇用他並不是因為他的背景,或是他比較會表演,更不是為了他在面試過程中的戲劇性表現。主要原因是他展示了一項微軟很重視的能力:將解題過程以視覺化(Visualization)方式呈現出來,並且藉由觀察圖形的不平衡、不完整或不一致的地方,找出關鍵點,進一步求出解決方案。
擁有視覺化解題能力的人,往往能勝任組織內部多種不同角色。
根據以往的經驗,這種人少之又少,所以公司當下就讓他簽了任職同意書;不僅如此,雖然他還在學,公司也不吝嗇,給了他相當高的薪等。
為什麼視覺化的解題能力很重要?我不知道有沒有教科書針對這個問題進行理論探討,但單就筆者自己的用人經驗,這樣的人至少有兩個優點:第一,有能力解決更複雜的問題。我們常看到他們將困難問題轉換到另一個相對比較容易求解的領域,在那裡解決問題。第二,這樣的人比較有能力解決不同領域的問題,可以勝任組織內部的不同角色。微軟裡頭有很多這樣的例子,不過牽涉到商業秘密,恕我不細談了。
如何養成這種能力?
至於這樣的能力如何養成?有兩派說法:一派人認為這是天賦,學不來的,完全是「稀缺資源」,雇用一個就少一個;所以碰到這樣的人完全不必囉嗦,不用看背景,剛畢業更佳,先高薪聘進來再說。另一派人,包含我在內,認為這種能力人人都有,就看有沒有被誘發出來。如果有足夠多的時間,經常和具有同樣解題能力的同儕共同切磋,這種能力是可以發展出來的。
兩種說法,見仁見智;所以以筆者之見,各位未來的IT職場新鮮人,不要老在電腦前面盯著螢幕,也要拿起紙筆,練習一下視覺化解題的能力吧。