《程序員》:研發中心招聘的背后
(2004.05.19) 來自:《程序員》雜志
記者/閆輝
最近,一篇報道微軟亞洲工程院招聘不到合適的開發人員的新聞引起了很大反響。報道發到網上后,很多人認為這是微軟傲慢的表現。事實上,恰逢記者也在采訪現場,除了此篇新聞的作者過度粉飾數字之外,其大眾媒體的定位也決定了其無法深入報道張宏江院長更為看重的原因所在。
作為新成立的微軟亞洲工程院,已有十多個新項目和產品開發列入日程,短短的一段時間便需將人員擴充為百人之多。張宏江說:“過去的五個月中,我們管理人員用了大部分時間在人員招聘上,我們希望吸引更多的優秀軟件人才加盟。”
與此同時,位于南京的趨勢中國研發中心在招聘中也遇到了挑戰。從上海開往南京的火車上,趨勢的CTO陳怡芬同意南京研發中心的研發人員數目擴充一倍,面對這樣一個機遇,研發中心的負責人陸劍峰既興奮又忐忑不安,因為要短時間內招到如此多優秀的人才,面臨的壓力也不小。為此,他還專門從總部請來了幾位研發高級副總裁和全球產品部用戶界面總監Amy Ma來鼓氣和傳授經驗。
對此,很多人耿耿于懷:中國如此多的開發人員,難道就選不出區區幾十人嗎?
當然,這些國際性的大公司對人員的挑剔是重要的因素,因為他們都遵循“寧缺毋濫”的原則。然而,當我們了解了這些企業的需求之后,你會發現,其實很多人并不是栽在了網上四處流傳的號稱可以考察智商的“微軟面試題”上,而是很多顯而易見的基礎知識讓他們被拒之門外。靜下心來,仔細的分析一下,或許可以為自己的明天找到更好的彌補之路。
基礎知識要扎實,會編程和懂編程差距甚遠
衡量一下,你能把用C#編程和懂C#編程區分開嗎?
事實上,能寫C代碼和真正寫一段C程序有相當的差別,這并不是說程序員所寫的代碼有錯誤或者不能運行,而是程序整體的架構就不對。軟件設計工程師應該知道他寫了某段程序對緩存的需求有多高,對CPU和GPU要求是怎樣,這些都應該是在他寫程序的時候大腦中非常清晰的。如果對整個系統的了解不透徹,就無法回答面試中的很多問題。張宏江說:“很多人只是將語言純粹當作一個工具來使用,而產品開發所需要的素質遠不止于此。”
現在的高校在講授計算機課程的時候太分散,沒有按照系統的知識傳遞給學生,因此教學中需要把這些課程結合在一起,學計算機也應該像學數學一樣,一環扣一環,把整個體系搞清楚,把軟件開發當作一門學問,而不是當作一種工具來學。當然,用培養科學家的方法培養工程師也會有問題,有些人會朝做虛的方向發展,他會蔑視內存管理這些東西。張宏江說:“我在微軟看到很多大師,這些人厲害之處在于他們對系統的理解,所以寫出的程序才能這么漂亮。”所以,張宏江建議現在的學生應當系統地學習計算機課程,并通過理解將各種內容融會貫通起來,甚至可以通過項目的形式來實踐書本中的零散知識。
加強軟件工程的思想
提起軟件工程,不同的人大腦中會有不同的想法。而對于研發中心這種以產品開發為中心的機構來說,軟件工程并不只是CMM類的學術詞匯和質量體系認證,而是軟件工程化的開發流程。也就是說,軟件設計人員需要了解如何把軟件需求變成一個軟件功能,如何把功能再分解成模塊,以及評估每個模塊的開發所需要的時間和優先級。他需要很清楚,哪些功能是必需的——沒有這個功能就無法稱之為一個產品;而哪些特性是比較吸引用戶的;哪些在時間緊迫的情況下是必須要放棄的。
趨勢科技工程與信息部全球執行副總裁梁國屏表示,在全球的研發體系中有專門的管理流程。一個想法要首先變成一份市場需求文檔,要評估整個市場份額和趨勢所占的比例,產品規格說明書也要確定,項目經理做項目計劃,產品設計計劃,測試計劃,產品開發完成后還要做評估。而在這整個過程中,編碼時間只是占據項目時間的1/6左右。
張宏江說:“如今的產品開發都是很大的工程,不可能是一個人對整個程序了如指掌,所以應該以軟件工程的理念去做。每個軟件設計的人員不但知道自己需要做什么,還需要了解自己在整個軟件開發流程中起著什么作用,如何與其他同事配合工作,共同解決問題。適時的把“架構師”的概念融入整個流程。”
培養團隊合作意識
在面試過程中,面試官會有意試探其對周圍事物和人的評價,從中可以看出此人的團隊合作意識。微軟亞洲研究院在初期招聘時曾經遇到這樣一件事情,有一個公司的上下級同時來應聘,在雙方互不知曉的情況下,面試官分別請他們對對方進行一番評價。結果上司大罵了一頓員工,員工也大罵了一頓老板。最終上司被否決了,員工被錄用,之所以錄用這個員工也是因為急需人才。但后來,這個員工在與團隊其他人員合作上出現了問題也離職了。
對于剛從學校畢業的學生,這方面的意識也比較薄弱。一些軟件開發高手在學校就做了很多單機軟件,但更多表現的是個人英雄主義,而在公司,一定要和其他人合作,研發中心很看重其個性是否過強到無法與其他人合作。比如,看到自己設計的東西,別人給一個建議,就認為別人是給他挑刺,這無疑增大的合作的難度。陸劍峰說:“學生要進公司,需要加強自己的團隊合作精神。趨勢即將推出的百萬程序大賽要求必須3-5名學生組隊參加也是因為這種原因。”
需要強調的是,過度的自信也可能造成團隊合作能力的下降,陸劍峰介紹,曾經有幾個軟件工程碩士畢業后到研發中心,自己非常自信。做項目的時候,雖然看到一些工作很難,很多東西自己還在學,但并沒有和經理談,最后沒有做下來,造成了工作的拖延,這也是缺乏團隊合作能力的體現。
團隊合作也包含著對溝通能力的要求。尤其是對于跨國企業的軟件研發中心,多地域的合作開發并不少見。南京趨勢就曾經和美國的研發中心聯合開發某個產品,由于時差的關系,雙方可以輪流開發,順利的情況下縮短一倍的開發時間,但最關鍵的是溝通,如果有一個問題沒有溝通好,可能某方反而會浪費一天的時間。
優秀的項目管理經理
和測試工程師難尋覓
在這些研發中心的招聘中,很多職位的空缺并不在于開發工程師,而是在于項目管理經理和測試工程師。
由于國內規范的產品開發公司很少,能夠勝任項目管理經理的人屈指可數。對開發人員來說,管人并不難,但中國的開發人員更習慣于接受上級的領導,而對于并不具有人事權的項目管理經理來說,能夠管理起一個開發團隊就不是一件容易的事情了。目前微軟亞洲工程院的項目管理經理多為從美國微軟總部回來的經驗豐富的華人擔任。
測試人員的缺乏也令很多研發中心無奈。在中國,軟件測試經理這樣的人幾乎可以忽略不計。而且對于程序員來說,大家還沒有完全接受軟件測試的工作,一般就是認為測試就是按照一定的流程進行操作找錯誤而已,其實這只是一個測試執行的過程,真正的測試工程師是要能夠設計出各種各樣的測試工具,并使用這些工具對所開發的軟件進行測試。“微軟工程院的測試人員面對的是絕對有趣也非常有挑戰性的工作。”張宏江說。
事實上,很多大公司都在找測試工程師,如果開發工程師能夠很成功的轉型,未來的發展也非常有前途。趨勢中國研發中心的代理測試部經理以前曾做開發部經理,他表示,做開發做到最后會有很多重復性的工作,學到的內容無非是更多的API或者網絡協議,而做測試,沒有什么固定的東西和流程可以遵循,可供發展的空間更大。測試一段程序,如果沒有一定的開發功力,找問題會非常困難。為此,趨勢中國研發中心還和南京大學軟件學院進行合作,將自己的經驗做成教材,開設了軟件測試的專業。
抓住機遇 提高素質
其實這個事情我們應當放在一個大的背景下來看,隨著全球產業一體化的發展,給中國的軟件產業帶來了越來越的機會,高級軟件人才的需求越來越大。同時,國內研發中心也將越來越多,微軟對產品開發的投入自然無需多講。陸劍峰也說:“研發在趨勢公司的地位很高,公司的CEO張明正自己就說對工程師很寵,我們每年幾百萬美元的研發費用很少被砍的。”
放眼望去,中國軟件產業要發展,必須要在軟件產品開發方面走的更好,而這就需要大量適應產品開發的程序員。不僅中國的軟件公司在擴招,同時,一些跨國軟件企業不斷的在中國設立軟件研發中心,甚至包括一些印度來華的軟件企業,這對中國的軟件開發人員來說不啻于一個好機會,但真的把握住這樣的機會,重視提高這些企業所看重的某些素質,這無論對自身還是整個中國軟件產業都是非常有益的。
微軟亞洲工程院稱自己最需要的三類人才
軟件設計工程師
微軟的軟件開發流程與其它軟件公司并無太大不同:需求分析-設計-實現(編程)-測試-發布。但微軟更強調人員的合作和成長。微軟要求軟件設計工程師的基本技能出眾并善于學習,溝通能力、協調能力出類拔萃,還要求他們“具備‘架構’的概念”,能適時用 “架構師”的角色去了解整個流程,從而主動發現問題并協同解決問題。
軟件測試工程師
“給你一臺冰箱,你將如何測試它?”
這是微軟亞洲工程院招收測試工程師時的一道題目。遵循兩條不同的思路,此問題可以有兩個答案:一是檢驗冰箱的外觀有否破損,門能否打開,冷凍室、冷藏室的實測溫度是否符合標稱,溫控裝置能否正常發揮作用,燈光裝置是否正常……二是為冰箱設定最低溫度并使之持續運行,記錄其所能正常運轉的最長周期,接入電源并在不同電壓下觀察冰箱的穩定情況,切斷電源并檢查冰箱的保鮮時間……只有同時答出這兩個答案的應聘者才能通過這一關的考驗。微軟亞洲工程院需要那種對軟件產品測試工作情有獨鐘,能獨力編制測試計劃與相應工具,并能與產品部門的同事密切配合、高效溝通的軟件測試工程師,他們能透徹地理解微軟產品,并可以完成產品開發、測試兩部分的工作。
Program Manager
有別于其它軟件公司的Project Manager負責制,在微軟的軟件開發過程中,由Program Manager分配資源、控制進度、管理流程。應聘者不僅要技術過硬,還要有很好的情商,如親和的性格、極強的協調和溝通能力、能迅速把握用戶需求、深諳項目的分析、設計與進程管理,對于新技術和產品有著超乎尋常的敏銳嗅覺并能迅速深入其中等等。