這是一部講述金山企業史的書籍。作為中國最大的通用軟件企業,金山歷經坎坷,走過了風風雨雨20年。這是怎樣的一個團隊呢?我們從程序員的素質要求一窺金山團隊。本文選自該書。
“技術立業”最終依靠的是優秀的技術人員。經過19年的沉淀和積累,金山目前程序員已經超過1000名,其中包含大量對技術執著甚至是狂熱的編程高手。
金山具有濃郁程序員文化,求伯君和雷軍都是程序高手出身。因此,對于程序員的要求會更高。金山是如何定義并打造這些優秀程序員的呢?
在求伯君看來,優秀的程序員至少要具有以下品性:第一,要能吃苦。寫程序是一個很辛苦的活,熬夜,加班,吃方便面是經常的事情;另一種苦是,以前盜版嚴重,在中國做程序員工資不會很高,“沒法高,高了養不起。”第二,要有天賦。“在中國,有天賦的程序員很多。”第三,是信念。“失敗時要能堅持。像我就寫了很多失敗的軟件。”第四,要愛這一行。“不給錢都愿意寫。”第五,是團結。“現在程序都很龐大,以光盤為單位。沒有合作精神,一個人做不出什么好軟件。我們當時單槍匹馬可以成英雄,現在已經不行了。”第六,要逢上機遇。“我是趕上了電腦剛進入中國,一切都是空白的機會。”
修為一:堅韌不拔
寫程序往往是一個漫長的過程,沒有任勞任怨、吃苦耐勞和不甘寂寞的精神,在日復一日寫代碼的過程中,很容易中途放棄。金山的程序員被要求的第一個修為就是個性執著、堅韌不拔。那些最優秀的程序英雄們都已經用他們的切身經歷說明了這一點。
從2003年夏到2004年底,開發網游《封神榜》的烈火工作室一直處于緊張研發的階段。原詞霸事業部的程序高手、現任烈火工作室總經理的劉鵬說:“烈火17人兩個春節都沒有休息,五一、十一、周六、周日全都在拼,歷經13個月。最終公開測試時,烈火也才達到32人,完全是一幫沒有游戲制作經驗、只有夢想和激情的人組建的團隊。那時候大家只有三種工作狀態:坐在辦公桌前,坐在會議桌前,躺在辦公桌下”。劉鵬還透露了一個“秘密”,就是當初沒有招聘一個女孩,在后半夜悶熱的辦公區大家都是光膀子度過的。
對技術的狂熱追求的同時,往往也伴隨著最艱苦卓絕的開發過程。“很多人把寫程序看成是一種生活技能,而不是真心喜歡。這種后果會導致很難堅持。一些開發人員在面臨選擇的時候常常會選擇眼前利益以及輕松的工作。但總體上來看,做一個程序員能吃苦是必要條件之一。”雷軍說。
修為二:知識全面
計算機技術日新月異,優秀的軟件企業不是在和同行賽跑,而是在和時間賽跑。微軟在全世界已經設立了一大批的研究院鉆研那些未來可能會引領潮流的新技術;GOOGLE允許員工每周花20%的時間拋開手頭工作,從事自己感興趣的技術研究。
對于程序員而言,在具備堅韌不拔的精神之外,技術全面、涉獵廣泛也是必須具備的修為之一。特別是金山業務線偏多,既有辦公、殺毒、詞典等通用軟件,又有網游的娛樂軟件,還有愛詞霸社區等網站產品,各產品對技術的要求跨度很大。2003年,為了集中優勢兵力打《劍俠情緣網絡版》這場殲滅戰,雷軍抽調了其它部門8個技術總監中的5個加入到珠海網游研發隊伍。他們雖然做的是普通程序員的代碼撰寫工作,每個人都能迅速上手投入到工作當中。最終,《劍網》一舉成名。
對于金山的普通程序員而言,哪些技能是必備的呢?雷軍在接受《程序員》雜志采訪時說:
“從技術人員的角度來看,我覺得最重要的是數據結構,它最能體現開發人員的基本素質。
首先是標識名的命名習慣。標識名命名習慣決定程序后期的可維護性。現在我們看到很多參加奧林匹克競賽的程序員,常常能非常快速的寫程序,但是做出來的軟件很難維護,這就無法應用到實踐的工程和項目當中。
第二是數據結構的定義和常量的定義,這兩者對于開發人員來說是良好的編程習慣。數據結構的定義很大程度上決定了程序的可維護性和可擴展性。
接下來第三點是算法的說明、描述及測試子程序。
第四點,我們在強調BugFree,也就是調試能力以及編寫無錯代碼的能力,一定要常常不忘做邊界條件判斷。
高級一點的開發人員,要注重第五點,程序框架設計的合理性。
第六點是程序的運行效率,這對于一個開發人員來說,已經到達一定高度了。更高的境界則是在開發程序的時候,還需要具備產品規劃的能力,換句話說,良好的編程習慣能幫助你走向成功。”
修為三:完美主義
“優秀的程序員,其實并不在于技能的熟練掌握,而是需要有良好的素質,有追求完美的精神。真正的好程序員不是為了完成任務,也不是為了交付產品而工作。他們想要發揮自己的極限,盡自己的最大努力把程序做得更好。”雷軍說。
“熱愛編程、個性執著、追求完美”是金山對程序員的要求。完美主義并非要求“十全十美”,而是在現有的基礎上實現“更好”。在雷軍看來,優秀的程序員都應該是完美主義者。
在金山,從求伯君、雷軍等曾經是程序高手的管理者,到董波、陳飛舟、賴立高、吳越等等,在他們的程序生涯中,都是眼睛里容不得丑陋代碼的完美主義。此外還有許多程序員,也許平時不修邊幅,可以整個冬天都穿同一件夾克,但他們的程序卻整潔得讓人嫉妒。
不放過任何瑕疵,有任何問題都要修改。陳飛舟曾經有一段時間,在珠海金山的樓里面三個月沒有出來過,便是為了讓金山毒霸的藍芯引擎更加完美;金山毒霸的劉海峰,曾經無數次修改程序乃至一個月沒有回家睡過覺,直至被稱為鐵人。正是這些對程序品質的無止境追求才使得金山歷史上不斷涌現出深受用戶歡迎的軟件和游戲產品。
任何事情其實都有一個度,完美一樣有度。所以,追求完美,是指不斷提升拿捏完美的“度”,不斷提升程序質量的“度”,是在追求一種不同的境界。
修為四:團隊協作
隨著技術發展越來越快,程序越來越龐大。單槍匹馬、拿著10萬行代碼闖天下的個人英雄的時代已經過去了,團隊協作成為程序開發的基本要求。單個的程序高手也許能夠創造出奇跡,但是不一定能為企業創造出好的業績。如何讓大面積的程序員都成為高手,對以技術立業為核心戰略的金山而言是至關重要的問題。
并非每個程序員都有天賦異稟,因此通過培訓、學習來提高編程實戰、團隊協作能力是必不可少的環節。從2007年3月開始實施的程序員“魔鬼訓練營”計劃就是一種非常獨特的培訓方式;此外,新組建的金山實驗室也已經開始探索軟件開發的前沿技術,研究成功將給全公司共享。關于程序員訓練營和實驗室,前面已有詳細描述,在此不再贅述。
在自己就曾經是程序員的求伯君看來,程序員團隊的管理其實并不容易:“第一,你要尊重人家,知識分子都有一種‘臭脾氣’;第二,要給程序員一個能夠發揮的環境,不能卡得太死。寫程序和寫文章一樣,思路打開了,一天都用不了;沒有靈感,一個月也不一定能寫出來。”
令求伯君和雷軍驕傲的是:珠海金山的程序員隊伍非常穩定,在金山四五年以上的優秀程序員非常多。這不僅是金山倡導的程序員文化、互相學習的文化有關,也與金山研發基地的地域選擇有關——這或許是諸多對金山研發隊伍之所以穩定的分析報道中最容易忽略的因素。
一個優秀的、具有團隊協作精神的研發團隊,既要有足夠的培訓提升能力,又要有和諧舒適的工作氛圍讓人身心愉悅從而保持隊伍的穩定——金山的經驗值得借鑒。