方正的「工廠」

方正的“工厂”

本文寫於1999年。

方正最早的報紙排版軟件NPM,作者只有兩個人,主持開發的是方正研究院現任常務副院長肖建國。NPM在1988年一經推出即被全國半數以上的報紙採用,出盡風頭,時至今日《北京日報》、《人民日報》的部分版面還在使用NPM排版。

1988年,能在DOS平臺上寫出“所見即所得”的圖文混排系統,足以證明肖建國的編程水平是大師級的,而且,NPM為方正所創造的利潤也不亞於後來出名的任何著名程序員的成名之作,但肖建國並沒有出名,也沒找哪家報紙談過自己的程序人生,而是繼續埋頭苦幹,於1993年主持開發完成了方正彩色出版系統,在方正黑白排版市場萎縮之際,為方正培養出新的利潤增長點,使方正牢牢地佔領了彩色報紙出版市場。

這次功成之後,肖建國仍然沒有急著自己出名,因為儘管作為優秀程序員,肖建國的個人能力非常強,但他清醒地認識到:1991年6月12日·北京友誼賓館·方正研究院前身北大計算機研究所全家福。一個長久發展的有規模的軟件公司僅靠發揮一兩個天才程序員的能動性,在未來的競爭中必將敗落。

作坊為什麼不行

1988年,寫出令人自豪和驕傲的NPM,1993年,主持開發成功方正彩色出版系統,肖建國得出的結論不是自己“頂天立地”,方正離開自己不行,而是一兩個人能夠寫出好的軟件,但這個軟件的規模不會很大,當軟件規模足夠大的時候,一兩個人是絕對做不過來的。

背景

北京大學計算機科學技術研究所的前身是北京大學文字信息處理技術研究室,始建於1977年9月,1983年正式成立北京大學計算機科學技術研究所,現任所長是中國科學院院士、中國工程院院士、第三世界科學院院士、著名計算機專家王選教授,副所長是劉秋雲教授。

1995年,與北大方正集團公司聯合成立北大方正技術研究院,並由王選教授擔任院長,劉秋雲、肖建國、陽振坤教授和鄒維副教授任副院長。方正技術研究院負責方正集團的技術發展研究和新產品的研製開發,同時承擔著部分基礎研究工作,為公司的長遠發展積累技術資源和人才資源,成為方正集團的科研開發基地。

目前所(院)內建有博士、碩士研究生培養點和博士後流動工作站,以本所為依託建有文字信息處理技術國家重點實驗室和電子出版新技術國家工程研究中心,下設報業管理、文字與圖形處理、數字媒體、金融信息技術、指紋技術、照排技術等6個研究所,以及彩色系統、地理信息、辦公自動化、出版社管理等多個研究室。全所(院)現有工作人員460餘人,其中副高級職稱以上人員25人,博士22人,碩士180餘人。總建築面積近10000平米,各種儀器設備900餘臺套。

據王選回憶,方正在1988年創業時候,推出的三大產品RIP、NPM和BD書版排版語言,每個產品代碼約在10萬到15萬行,而現在上市的產品程序量則差不多都在50萬到100萬行,方正現在在外面賣的軟件總程序量要超過300萬行。

天才的程序員可以在程序的某些模塊體現出自己高超的藝術性和精巧性,但如此大規模的程序全靠一兩個人去體現自己的技巧是無論如何也行不通的,實際上也沒有那麼多技巧需要施展。程序就是程序,代碼而已,有時候被比喻為藝術,但那只是比喻而已。無論多麼精彩絕倫的算法,對於未來龐大的工程性的軟件來說都只能處於錦上添花的地位,而不再會是主角。

為了說明30萬行代碼和300萬行代碼的不一樣,肖建國打了一個蓋大樓的比方:“從理論上講,一個人也能蓋起一座大樓,只要這個人每天起早貪黑地幹,一年不行兩年,兩年不行三年,總有砌下最後一塊磚的時候,可現實中的大樓沒有這樣蓋的,因為每座大樓都有最後交工的期限,軟件更是這樣,規定時間內不能上市,用戶就會選擇競爭對手的產品。”

“師傅帶徒弟”式的作坊作業,讓方正研究院數字媒體研究所所長助理郭宗明更多憂慮的是公司風險難以控制。“作坊式作業將希望全寄託在一兩個天才程序員身上,一兩個天才程序員發揮得好,做得可能比想象得還要好,但萬一做不出來怎麼辦?萬一這個人跳槽了怎麼辦?”大公司要講可操作性,什麼時候把軟件寫出來了,什麼時候上市,都要使用倒記時的方式。而“作坊式作業不可能做到有計劃,按時推出產品,只能把‘寶’全壓在天才程序員的個人身上,太不安全了。”儘管郭宗明被王選稱為天才程序員,但他一點兒都不想把公司的命運寄託在像他這樣的天才程序員身上。

方正研究院文字圖形研究所副所長李徵認為,不僅不應該把命運寄託在一兩個名程序員身上,甚至壓根兒都不應該鼓勵“明星制”。“今天的程序已經談不上明星了,軟件不等於程序,不等於代碼,軟件是一種商品。它需要有包裝、使用指南、安裝程序、培訓、用戶支持、升級、售後服務等等配件,單純的程序是不能賺錢的,只有成為商品的軟件才能夠賺錢。中國軟件產業發展之初由於軟件過度匱乏,沒有任何包裝的程序也能夠賣錢,而且,還能賣個天價;但那個時代已經一去不復返了。現在再好的程序,如果沒有包裝,沒有市場推廣一定難以獲得大規模的利潤,因此現在已經進入了由名軟件公司取代名程序員的時代。”作為方正核心產品文字排版軟件所的副所長,李徵不寫程序,他將自己定位在軟件開發管理者的角色上。

衡量一家軟件公司是“作坊式”的作業方式,還是“工廠式”的作業模式,並非只看它的規模,並非這個公司程序員少,就說它是軟件“作坊”,那個公司有幾百名程序員,就說它是軟件“工廠”。是“作坊”還是“工廠”不能以人數而論,方正研究院的演進過程很能說明這個問題。

方正研究院的程序員每天都在增多,其直接目的並不是為了形成“軟件工廠”,而是因為軟件規模越來越大,功能越來越多,需要更多的程序員來寫。很多程序員在一起工作不能自然而然地形成“工廠式“的作業模式,方正研究院幾百名程序員聚集在一起,起初的情形用肖建國的話形容就是“由小作坊變成了大作坊,大作坊底下帶了很多個小作坊 ”而已。

程序員多,產品是做大了,但由於程序員之間交流不夠,技術思想、技術手段、實現方法互相配合得不好,致使寫出的軟件產生了許多許多的BUG。甲程序員的模塊要和乙程序員的模塊配合,因為沒有規範和制度確保實現這種配合和溝通,結果造成:甲調用的時候僅憑假設想象乙是怎麼做的,這種假想的結果是有時候做重複了,有時候做錯了,最後,軟件配合起來就不行。肖建國回想當年的情景頗有些感慨:“人員一多,就很難組織。1992、1993年,方正軟件因此出現了大量的BUG,造成軟件從1.0、1.11、1.12到1.03,版本滿天飛,同樣是1.1版,有今天的1.1版,有明天的1.1版,原因是軟件錯誤太多,今天這個用戶來抱怨,打個補丁改了,明天那個用戶又提出了另外一個問題,再打一個補丁交給人家。程序員費了牛勁去改,軟件版本滿天飛,但錯誤還是一大堆。”所謂“軟件工廠”即是一套克服這種協作混亂的管理方法。

王選眼中的好產品

能讓王選看上眼的產品不多,即便是方正研究院的產品,王選認為好的也不多。要讓王選說好,必須同時具備五個條件:

第一是要採用國際最先進的技術和設備開發的產品。“NPM推出以後之所以會風靡市場一個很重要的原因就是它在硬件上採用了當時剛剛面世的黑白高分辨率豎式大屏幕Viking,使中文報紙第一次在計算機上‘所見即所得’。”“1991年的8月30日,我在香港發現了一臺高分辨率彩色照排機ECRM,價錢便宜,報社也能負擔得起,趕緊把它引進到國內,1992年,用上這種照排機的方正彩色系統,給方正帶來很大的利潤,否則僅靠黑白,我們早就萎縮得一塌糊塗了。”

第二是要有自己的創新的產品。“方正RIP擁有9項專利,一項歐洲專利,8項中國專利。1989年,國外中文PS系統用激光打印機出300DPI低分辨率A4幅面樣張,20分鐘出一頁,方正RIP一分鐘出6頁,而且精密照排與激光打印機輸出合用一個RIP,取得了明顯的壓倒優勢。”

第三是貼近用戶的產品。“1988年的方正RIP在字型、傾斜、旋轉、勾邊、陰陽、半陰半陽上的變化,特別貼近當時用戶希望版面漂亮、複雜的心理狀態,從前的鉛排從來也做不到這些變化。另外,NPM使用戶能夠看著屏幕直接修改報樣,讓報社感到耳目一新,為之一振。”

第四是要性能穩定的產品。“1987年的華光系統一開始不太穩定,後來北大開始生產照排系統,市場上有了競爭,濰坊和北大兩個系統都穩定了。”

第五是在較短的時間裡做出來的產品。“時間一拖長,市場就沒有了。”

在王選眼裡,方正1988年創業之初的三大產品RIP、NPM和書版都是符合上述五個條件的產品。

在方正研究院,符合這五個條件的產品,王選認為還有後來陽振坤主持開發的第六代RIP和第七代RIP以及開始由鄒維負責,後來由郭宗明主持開發的點睛動畫製作軟件。但“方正也有不少產品不符合這五個條件,比如不貼近用戶,推出以後改呀改呀改,拖晚了進度,失去了競爭力。有的產品缺乏‘一招鮮’,沒有突出‘賣點’。”

在王選看來,1988年到1992年是方正的創業階段,1993年方正集團成立,意味著方正創業完成,進入了新的階段。“在創業階段,方正人均利潤極高,後來的人均利潤一直沒有超過創業階段的人均利潤和方正在一開始就有三個叫得響的產品有很大關係。”

協作難在何處

深知軟件協作困難的肖建國認為,直到現在中國人還做不了像Windows95這樣大型的軟件。“給再多的錢也做不出來!軟件組織機構越大越難管理,大到一定時候就無法控制了,就會出現管不了,失控的局面。”

為什麼會有這麼難?程序員多起來,自然就要有分工,有分工的時候,心態調整問題就會凸現出來:原先作坊式作業的時候,軟件是一兩個程序員寫的,軟件寫完了,雖然在產權上這個軟件或許不是自己的,但程序員心裡會覺得這個軟件就是自己的,對這個軟件的感情就像對自己的兒子一樣,關於這個軟件一切成敗榮辱都被看成是自己的,在這種心態下,程序員會不分白天黑夜地超常投入。而軟件“工廠”模式的直接結果是一個軟件由幾十個、甚至上百個人寫,軟件寫成以後究竟是誰的?有了榮譽是誰的?都不是太明確。同樣,軟件有點毛病也不專是哪個人的,而是大家的,既然是大家的事情,那就讓大家來做,我為什麼要多操那個心?但“大家”是一個概念,就像可以拿來一個蘋果,不可以拿來一個“水果”一樣,“大家”這個概念同樣落不到實處,而對軟件的責任心卻必須落到實處。在這個問題上,肖建國承認“現在我們這裡的人勤奮程度要比當初差一些 ”。

軟件越做越大,越做越複雜是不可抗拒的世界潮流,一家軟件公司要參與未來的競爭就必須有做大軟件的能力,而做大軟件就必需要有分工協作,決不能因為協作會降低個人的積極性,協作起來會遇到重重困難就否定協作,那樣做等於因噎廢食。因此,問題的關鍵是怎樣在分工協作的模式下,最大限度地調動大家的積極性。

在肖建國看來,要調動程序員的積極性,首先要在分工上做適當的考慮。“不能咱倆合作,所有的設計我都做完了,叫你去編碼,那樣你可能會覺得很枯燥,會感到沒有發揮你的創造能力。”在方正研究院提倡軟件設計部分大家都參與,都有表達創造力的機會。

事物是歷史的,方正的軟件也不例外,有些軟件最初就是一兩個人寫的,這一兩個人會覺得這個軟件是他的,會有很多感情,而後來加入開發的程序員則會面臨心態融合的問題,後加入的程序員會覺得“我寫這個模塊,是分配給我的任務,不用想別的,那就做吧。”碰到這個問題,李徵的方法是給後來的人創造機會,儘量將年輕人推到項目經理、測試經理和支持經理崗位上,讓他們感覺到是他們在控制著軟件的發展,感覺到是他們自己在做主。

溝通的時候,則鼓勵大家把想法都說出來。儘管李徵不鼓勵名程序員,但他從來不把程序員看成只是完成代碼的機器,而是千方百計試圖將新加入的程序員變成集體的一分子,讓他們感覺到共同完成的軟件之中有著自己的一份功勞。

為了培養程序員對軟件的感情,李徵讓程序員開展示會的時候去釘展臺,當程序員看到自己寫的軟件有人買,聽到用戶在議論自己寫的程序的時候,會自然而然地和產品發生關係。

無論在哪裡錢都是非常重要的,但是做軟件僅僅有錢是遠遠不夠的,還需要培養程序員對企業、對產品的感情,這一點李徵深有感觸:“後進來的人是在為已有的軟件加功能,是在維護軟件,他並沒有權改造軟件,只有權改BUG,這樣的工作很繁複,沒有什麼新意,具有犧牲的意義。”為此,李徵堅持給這些程序員高待遇,評項目獎的時候,不分資歷想辦法多給他們一些榮譽。

機制上,郭宗明認為要保證軟件做好了大家全有份,而不光是“頭兒”的事。“我們的項目獎不會是平均的,但每個人都有份,同樣,軟件做不好,大家都‘砸’。”

分工協作遇到的另外一個大難題是溝通問題,解決這個問題最直接的方法是開會。方正研究院的會議現在越來越多,幾個會議室總是塞得滿滿的。組內的人要經常交流,組和組之間、課題和課題之間、研究所和研究所之間要考慮接口問題、配合問題。開會是容易的,通過會議解決問題卻是困難的。討論交流難免會有爭論,這個時候一定要有人站出來仲裁,否則,討論下去永遠不會有結論。

軟件是工程,不是理論問題,所以,能夠也必需通過仲裁的方式解決分歧,而不是通過進一步的研究分出到底誰對誰錯,軟件工程花不起研究的時間。 對此,肖建國把話說得明白無誤:“軟件不是算1+1,1+1你要說等於3,我非和你爭不可,工程問題討論起來,可能會討論明白誰更高明,但很多時候是這樣也行,那樣也行,並沒本質的差別,這個時候再固執地爭論下去就沒意思了。”

溝通困難也有程序員性格和習慣方面的原因,做技術的程序員很容易把自己已經做成的事情看得很簡單,覺得沒什麼好講,“很顯然的事,你怎麼就不明白呢?這還用解釋嗎?”是程序員面對請教最常態的反應,對這樣的程序員,肖建國認為要教育他們願意把自己的想法主動告訴別人,願意去傾聽別人是怎麼想的。對於因為保守,不願意將關鍵算法和技術告訴別人,關鍵時候要挾公司長工資的程序員,肖建國會將他開除。

為了從體制上保持充分的溝通,方正研究院將一個組的人數控制在10個人左右,以控制交流的難度,避免花在交流上的時間太多。

在肖建國看來,合理的協作方式應該是先做和別人的接口部分,後做一個人關在屋裡也能做好的部分,原因是“自己的事可以通過自己的努力,通過自己加班趕進度,總之是自己的時間好控制,而控制別人總不方便。更為重要的是,自己關在屋裡先做,做完以後,發現和別人配合不起來,不僅要返工,還會因為到底是誰的問題和自己的協作者發生分歧和矛盾。”

軟件開發管理管什麼

幾乎所有的管理都先從摸得著、看得見的地方入手,方正研究院對軟件開發的管理也不例外,他們首先抓的是文檔。

在李徵眼裡,如果不寫文檔,就不是一個好程序員,所以,不管這個程序員多麼天才,如果不寫文檔,我都不要。李徵要求“飛騰3.1”的需求分析,就要有三個重要的文檔:

第一份是用Excel做的一張大表,表上規定了:飛騰3.1要做多少個功能;每個功能的來源(是報社的需求,還是出版社的需求,或者是上一個版本遺留的問題);對每個需求的描述和優先級別,以及這些功能計劃由哪些人來負責。

第二份文檔被稱為功能式樣書。它負責一一對應地對上面那張大表上的每一個功能做進一步的說明,詳細闡明功能設計方法和實現方法。如果飛騰3.1有1000個功能,就會有1000份這樣的式樣書,式樣書很詳細,有的會長達幾十頁。

第三份文檔是用Project寫的進度表,規定飛騰3.1什麼時候做設計,什麼時候寫代碼,什麼時候提交單元測試。軟件飛騰了!開發中每個里程碑都在這裡做了規定。

為什麼要寫這麼詳盡的文檔?肖建國的經驗是“寫軟件不能僅憑嘴說,說完了容易忘,而且,講話有二義性,軟件不能有二義性,所以,該寫的東西都要明確寫下來。”肖建國另外一個經驗是:“想清楚、說清楚和寫清楚三者之間有很大的差異性,能寫清楚才算把事情徹底搞透了,很多時候是以為自己想清楚了,其實並沒有想清楚,所以,需要通過寫出來檢驗一下。”

寫這麼多文檔會不會耽誤了寫代碼的時間?郭宗明認為寫文檔的時間必須捨得花。“從國外軟件開發的經驗看,做文檔,寫註釋的時間,就是要比真正編碼的時間長。”

郭宗明感覺廣東話唱歌很好聽,但他建議大家說普通話,因為方言沒辦法交流。“軟件是大眾化的產品,許多快捷鍵都是公認的,開發約定大家也應該共同遵守,界面是什麼風格,變量怎樣命名,浮點數怎樣命名都要按既定的規範,程序員不能自己另起一套,自己另創一套可能對自己來說很好用,但別人就沒有辦法理解,沒辦法交流。”

為統一規範,方正研究院頒發了一套代碼編寫規範,而真正嚴格執行的都是那些飽經教訓的程序員,因為只有他們才清楚為什麼按規範寫程序日後才不會出麻煩,不規範的程序員被李徵稱為“殺手”。“他們知道規範,也覺得規範很有道理,但真正寫程序的時候,就會忘記,因為他們沒吃夠苦頭。這個時候只能通過不斷地檢查他們的程序,強制他們執行規範。”郭宗明發現不寫註釋或者不按規範寫註釋的程序員,會堅決要求他補上,因為郭宗明很擔心:“一旦這個程序員改做別的項目或者跳槽了,留下一堆天書一樣的源程序,誰也看不懂,誰也無法接手,整個項目都會受到影響。”

軟件編譯應當說是相對容易的環節,但就是這個環節上,李徵所在的文字研究所出現過好幾次錯誤。最後,李徵下決心制定了一個非常詳細的編譯規範,規定每一次編譯都要按照這個規範執行。

這之後,李徵覺得軟件公司所做的每一件具體的事情都應該有規範,比方,刻光盤這樣的小事,李徵也專門找人寫了一個規範流程。李徵認為,事事有規範不僅可以避免錯誤發生,實際上還可以節約東撞一下西撞一下所浪費的時間。

規範是協同工作的基礎,真正實現協同工作還需要制度來保證。方正研究院規定項目組的成員一個月必須坐在一起互相彙報一次。

相互彙報有三個顯而易見的好處:一,可以增進了解,有效避免調用錯誤;二,關鍵性算法說出來,大家可以提一些建議,可能會使算法更加優化;三,可以增進協作的氣氛。郭宗明覺得,很多人願意留在方正不是為了方正的錢,而是為了方正的氣氛。“保持心情舒暢很重要,大家彼此處得很好,發現問題會彼此提醒,一個人如果態度很差,大家就會盡可能地躲著他,能繞就繞過去,心裡想的是,反正不是我的問題,跟我無關,能不說就不說了。”

要想溝通協作得好,肖建國認為要從最“根上”考慮,“理想的狀態是,我們三個人一個課題組,進來第四個人的時候,我們三個都要參與面試,誰看不上眼,他都不能進來。”

方正研究院不會將一個模塊交給一個程序員,三個月以後再去檢查,而是在每一個關鍵點上檢查他的工作,不停地對他的工作做需求評審、設計評審、代碼檢查、單元測試等等檢查工作。

需求評審,發現問題,糾正了,後面就不會錯下去,而等到三個月以後,程序員交上來一個亂七八糟的文檔,一個不能用的程序,那時候再後悔就來不及了。

有非常自覺、非常優秀的程序員,但不能因此就相信所有的程序員都是自覺和優秀的,人總是有惰性的,儘管每個禮拜都要檢查評審程序員的工作,好像對程序員不信任似的,肖建國還是堅持在每個關鍵點上檢查工作,“否則,BUG就沒有辦法控制,時間進度也沒辦法控制。”

衝突會發生在哪些環節

用制度和條文將變化較小的事情規定下來是組織管理的基礎,根據條件的變化,隨時隨地解決衝突則是管理的藝術。 管理得好與不好,全在處理各種各樣矛盾衝突時所把握的火候。在方正研究院第一個需要解決的衝突是——選誰做項目經理。

做技術的人很難打心底服氣誰,為了讓大家都服氣,方正研究院過去提拔幹部的標準是讓技術最強的人做項目經理,這種做法大家比較容易心平氣和,但這樣做的通病是技術最強的人往往沒有管理和項目調控的能力,而軟件大規模工程化研發最需要的恰恰不是一個技術骨幹自己能多做多少,而是通過有效的管理,調動大家的積極性,把團隊的力量發揮出來。

選管理型人才做項目經理,如何平衡技術骨幹和做管理的項目經理之間的關係?方正研究院找到的辦法是讓技術骨幹在待遇上得到平衡,讓技術骨幹和做管理的項目經理拿一樣多工資,甚至更多,而且,在技術問題上充分尊重技術骨幹的意見,負責項目管理的項目經理更多是管理軟件開發進度和軟件質量。在算法上,作為管理者的項目經理肯定不如很多年輕人腦子靈,開發人員想的是新技術,項目經理安身立命的依據則是豐富的開發經驗,對軟件的總體把握以及對於規範的清楚掌握,兩者並不矛盾。

為什麼大家都要攻擊方正不符合標準

或許是因為國產軟件在同國外軟件較量中屢遭失敗的緣故,輿論開始對中國人做軟件、中國公司做軟件的能力產生了徹底的懷疑,以至於面對像方正這樣挑戰國外軟件所取得的最輝煌勝利也不敢輕易歡呼叫好了,相反,對於“方正是在靠不符合標準的產品壟斷市場”的言論似乎更容易接受了。

實際情況是,早在Adobe推出PS語言之前,方正已經做了五代RIP,方正的前五代RIP當然沒法符合標準,因為那個時候還沒有標準。1993年,從第六代RIP開始,方正就接受PS語言,從此走向了開放標準。

肖建國說,因為方正在出版領域處於相對壟斷的地位,所以,所有想進入這個領域的競爭對手都要先踢方正一腳,大家異口同聲地指責方正不標準,再加上方正1993年之前的產品,的確不支持PS,這些老的產品有的用戶還在用,沒有升級,這樣兩件事湊在一起容易使局外人信以為真。

信以為真除了肖建國解釋的這兩個原因,還有一個有些人打心底就認為,國產的軟件不可能和國外軟件競爭的心理基礎,所以,方正的成功就只能在能力之外找原因了。

Adobe推出PS語言對方正來說當然不是一件好事,有了PS,競爭對手就很容易在某個點上突破方正在中文出版領域的壟斷防線。在這種情況下,方正憑藉著原來的市場優勢,搞封閉系統也是一條路子,這條路在一開始可能會走得很舒坦,方正產品不支持PS,可能逼著一些用戶要用就全用方正的產品,但這條路會使方正的圈子越做越小。因為排版領域的所有軟件,方正不可能全都做,比如方正根本沒有什麼產品能和CorelDraw這樣的繪圖軟件競爭。既然方正的能力是有限的,方正總有力所不及的地方,那麼,如果方正永遠不接受PS,因為CorelDraw是基於PS的,CorelDraw的功能也就永遠進入不了方正的系統,方正的出版物也就永遠做不出CorelDraw所能夠達到的效果。

封閉妨礙進步,結果是慢慢地萎縮,日本寫研排版就是一個典型的例子。寫研是封閉系統,曾經佔了60%到70%的市場,《人民日報》海外版曾經用的就是寫研系統,《星島日報》全部是寫研的系統,而後來在海外市場上,基於PS標準的方正系統取代了很多寫研的系統。北大方正於1990年開始運籌支持PS語言的RIP研製,1991年初,決定直接瞄準Adobe剛剛公佈的PS2標準,不再跟老的PS1。1993年10月上市的方正第六代RIP支持PS2,而當時國外一些照排大公司還沒有來得及完成從PS1到PS2的轉換,國內一些照排企業由於沒有及時跟上PS潮流市場逐步萎縮,這就是方正在那個轉折關頭的歷史。

既然大家都是基於PS語言的產品,已經刺刀見血真刀真槍地幹了好幾年,殘酷可想而知,肖建國形容這種競爭的殘酷時說:“假如我們的飛騰不是比國外同類產品好,我們就得死,假如我們的RIP不是比別人的RIP有優勢的話,我們也得死。”在RIP上,國外產品沒有任何的漢字門坎。方正要憑實力和他們拼,為了爭取更加廣闊的市場,方正把RIP技術和激光打印機融為了一體。中文排版和語言文化規範有一定的關係。現在凡是需要參加評比的書都必須要拿方正排,因為用國外軟件排出的結果有許多不符合語言文字規範的地方。肖建國認為,方正系統之所以能在有了標準以後還能在市場上站住腳是因為“在標準出現之前,已經有了一些功底,掌握了一些該掌握的技術,保證了在新標準下做出的東西,仍然是地道的、有生命力的。”

面對未來的競爭,王選說,只要找到好的將才,中國軟件完全可以和國外軟件一爭高低。關於資金和人才的關係,王選認為,只要有了好的人才,資金容易找到。

作坊時代已成為領導的技術骨幹,肖建國會給他配一個負責管理的搭檔。“技術骨幹待遇提上來後,他會覺得當不當領導也沒關係。‘我技術上很強,比管我的領導拿的還多。’這樣心態就好了,說話也就心平氣和了。”但肖建國同時希望技術骨幹記住,“技術骨幹所具有的本事是技術上的,行為上還要受管理者的約束。”

真正天才的程序員真要給他官做,他或許還要擔心管理會耽誤了他鑽研技術的時間,所以,在保證待遇的前提下,天才程序員更需要的是給他一個難題來做,讓他跨越那個難題。最優秀的人有一種征服的願望,這個時候項目經理要信任他,不要去幹涉他,放手讓他去做,只要和他講:“這個事情非常重要,我們希望你來解決,而且,我們信任你有這個能力”就行了。

技術和管理並不總是矛盾的,在方正研究院就存在著既是編程天才,又是優秀管理者的人,王選說肖建國、郭宗明都是這樣的人,這樣的人被王選稱為最難得的將才。

無庸諱言,管理和技術更多地還是體現在衝突的一面,有的程序員鑽研某一項技術會鑽得很深,如果這項技術在整個軟件裡面用的並不是太多,這個時候的鑽研就有可能影響整個項目的進度,這個時候項目經理就有責任把程序員從牛角尖裡拽出來。另外,技術人員更注重細節,從用戶方面考慮的要少,怎麼讓沒用過“維思”系統,沒有見過NPM的程序員較多地考慮飛騰向下兼容的問題,對李徵來說是一個不小的挑戰。

作為軟件開發管理者的李徵認為,軟件公司最忌諱的是,一會兒讓這個程序員做這個項目,一會兒讓他做那個項目,而應當讓他在一個方向上長期發展。“如果一個程序員在圖像方面已經有了一些基礎,今後凡是圖像方面的工作都應該交給他做,目的是培養他在圖像方面的興趣,他做多了,經驗自然就多了,反映出來就是能力的提升,成為這方面的專家,別人遇到這方面的問題都來請教他,他就得到了一種榮譽感和滿足感。在文字研究所我們還培養了PS專家、BIG5專家,這樣他們就會覺得自己有責任,有義務要把所擅長的領域做好。”

不但開發人員應該保持一個明確的定位,在李徵看來,一個部門也應該有自己明確的定位。“文字所曾經做過一個MIS系統,事後我想過,從我們這個部門的定位來講,文字所不該做這個項目,那是個大型數據庫項目,數據庫項目並非文字所的專長,為了這個項目,我們生生培養出了一批數據庫的人才,做MIS系統的人才。這個項目是日本的項目,做得非常成功,但為此把我們最優秀的人都派進去了,如果把這些人都用到飛騰上,成效未必要比做這個系統賺得少,而且,這個項目如果讓別的部門做可能做得更好,文字所的主要任務是做飛騰。”

部門經理和項目經理的衝突,從部門經理方面來講,表現為部門經理把持不住自己,總禁不住越級去管理本應該由項目經理負責的項目,直接對程序員指手劃腳,吩咐他們做這做那,這種工作的模式容易產生一系列的問題,項目經理會因此產生“那麼,還要項目經理幹嗎?”的強烈牴觸情緒。

合理的做法是部門經理發現問題先和項目經理講,讓項目經理去解決,如果認為項目經理解決不了或者不合格的話,應該把他換掉,而不是越俎代庖地越級替他做管理。

從項目經理方面講,表現在資源和人力調配上。一個部門的人員、設備和資源都是有限的,而項目經理對好設備、好人員的要求卻永遠沒完,滿足不了要求的項目經理自然就會抱怨部門經理。

對於一家軟件公司來說,最多的衝突發生在開發人員和市場人員之間。市場人員身處第一線,受用戶抱怨最多,市場人員把問題反饋回來,最希望的是問題能及時得到解決。市場人員通常不太懂技術,所以,他們經常提一些不是那麼合適的問題,這樣的問題在開發人員看來是如此的愚蠢,開發人員心裡經常很不耐煩地憤憤然然:“這種問題也來問我?”一來二去,開發部門和銷售部門就產生了隔閡,銷售部門不瞭解開發部門為什麼這麼遲鈍,開發人員覺得市場人員不學無術。

開發人員容易是完美主義者,他們最關心技術,追求使用新技術,市場人員每天都要和用戶打交道,最擔心的是軟件在運行中死機,穩定易用是市場人員最關心的兩點。儘管市場人員不關心技術人員到底使用了什麼新技術,但他總是希望軟件的功能越強大越好,越早推出越好,而技術部門則會擔心,功能多了可能要增加風險,強行加班加點可能會出現問題。

郭宗明承認,有時候軟件升級和軟件中所加入的新功能純粹是為了市場競爭的需要,“競爭對手產品中有的功能,我們沒有,用戶就會問為什麼沒有?儘管用戶實際上用不著那個功能。但用戶會把這個問題當作一個談價格的籌碼向銷售人員提出,這樣市場人員就會逼著開發人員開發這些功能。”

程序員需要教育

提及軟件“工廠”,提及規範管理,很容易讓人將規範與天才對立起來,從而產生規範會不會扼殺了天才,會不會遏制創造的擔心?

回答這個問題,先要弄清楚規範是什麼?對於軟件工程來說,規範是用來保證大規模多人協作開發的一些基本的前提,目的不是為了束縛程序員的天才,它的內容也沒有傷害到最體現程序天才創造的算法上,在規範面前,程序員喪失的只是一些隨意性。

有程序員覺得規範是一種約束,那是因為大家以前在沒有任何規範的環境下隨意慣了,突然來了一個規範一時難以適應而已。其實隨意和天才,和創造完全是兩碼事。

如何克服隨意性,將軟件協作所必需的規範變成程序員的習慣,教育是必由之路。教育對程序員來說一開始可能是痛苦的,但是當程序員慢慢將規範變成習慣以後,也就不會覺得規範是一種約束了。

李徵認為,要讓程序員從心底接受規範,首先要對程序員灌輸產品意識,要讓每一個程序員都認識到:現在的產品靠個人的能力根本不能夠完成,而是要靠管理、團結和正確的方法才能完成。“只有當每個程序員都從心底認為個人英雄的時代已經成為過去,靠一兩個天才打天下的時代已經一去不復返了,他們才會自覺自願地進行合作,而合作的前提就是必須要有規範,這樣原來在程序員心中是條條框框的東西就轉變為他自覺自願的行為。”

實際管理中,郭宗明發現,程序員並非一味地排斥規範和管理,他們不接受的是不規範的管理,不接受的是由於很多漏洞造成很多摩擦的管理。

方正產品過去的毛病是不貼近用戶,對於用戶提出的改進意見,開發人員麻木不仁地回答是“設計就是這樣的,沒法改。”程序員之所以會這樣說,是因為他們不理解自己一個小小的改進就能夠給用戶帶來極大的方便,極大地提高效率。不理解如果不改,用戶用得不高興,慢慢就會對方正的軟件失去信心。

為了讓開發人員學會尊重用戶的要求,尊重測試的意見,方正研究院安排程序員到用戶那裡去,而且是經常去,和排版員在一起待著,讓程序員親眼去看排版員是怎樣用飛騰,瞭解排版員用了哪些操作,操作順序是怎麼樣的。讓程序員知道,用戶那樣用飛騰,有哪些不方便的地方,需要做哪些改進。假如,飛騰有1000個功能,程序員觀察用戶實際使用情況,發現用戶只用到了200個功能,程序員就可以在這200個功能上精益求精。程序員如果這樣寫軟件,用戶必然會越用越滿意,越用越高興。

怎樣才算一個好程序員

王選是科學家,但是當王選做完科研以後,他還親手寫了大量的微程序,方正第一代到第四代RIP裡面90%的微程序都是王選寫的,從這個意義上說,王選也是一名程序員。

寫程序,王選堅信,測試只能證明錯誤的存在,不能證明錯誤的不存在,所以,“避免錯誤的最好的方式,就是從一開始就避免錯誤的引入。程序已經引進了大量錯誤,靠修改是改不出好程序的。”王選的這個認識源於1960年他在電子部738廠協作的時候,看到美國產的一臺小型機全部邏輯設計只有一頁紙,一頁紙看懂了,這臺機器就全部瞭解了。“從此,我養成了遇到任何事情,都先把它的邏輯關係先列出來,反覆思考,而不急著動手去做的習慣。”

王選這種想清楚以後再動手的習慣和他當時設計的算法要以芯片的形式實現有很大關係,現在一個軟件出現BUG,可以打個補丁修正,而王選那時候任何一個小的錯誤都會導致整個專用芯片報廢,因此,王選每設計一個芯片,手稿都很厚。

王選說,他當時最累的是一方面要在第一線上拼命,“為一個程序調不出來,為一個隱蔽故障不能發現,要死要活。”另一方面又要做大量的組織管理的工作,“那種勞累是難以形容的,比我現在到外頭做做報告,人大開會要累得多”。在王選眼裡,好的程序員要拼命才行。

肖建國給好程序員定了四個標準:

一,要有必要的基礎知識。“這裡所說的必要的基礎知識與開發數據庫軟件所需要的知識和開發字處理軟件所需要的知識並不相同。”

二,要有一定的設計能力。“只告之要做什麼,不用告之怎麼做,就能做出來”的人被肖建國稱為有設計能力的人,“怎麼做,都要講得清清楚楚,才能做出來”的人被肖建國看作是沒有設計能力的人,肖建國反對只會寫代碼不會做設計的程序員。“日本少有漂亮的軟件,是因為他們剝奪了程序員的創造能力,他們做軟件的方式是設計完了,就要完全按照設計編碼,日本甚至找一些高中生訓練半年,就讓他們做程序員,這樣的程序員只會完全按照設計編碼,不會做任何設計,這種程序員所做的工作其實就是把非常詳盡的用自然語言寫的設計文檔翻譯成計算機能夠識別的語言而已。”在方正研究院,設計不是神聖不可侵犯的,編碼的程序員不但在軟件設計的時候,有權提自己的設計思想,在具體編寫的時候,也可以提出自己的修改意見。

三,編碼習慣要比較好。

肖建國和王選一樣,主張程序要想清楚以後再動手寫。“這種寫程序的方法可以把程序一把做成了,很多程序員寫程序是想個大概就開始做,覺得車到山前必有路,做一部分,做不下去了,停下來想一想,這樣想想做做,做到一大半後,往往會突然醒悟過來,呀!如果開始就那樣做就更好了,但這個時候已經做了80%,再從頭做,時間上不允許了,再說也不願意費那個工夫,最後只能湊合湊合吧,這個時候程序已經寫壞了。一般來說,當程序寫完的時候,程序員會把所有的問題都想明白了,要不然他寫不完,但到最後的時候再想明白,也沒什麼用了。”

四,要勤奮。“每天工作八小時的程序員不是一個好的程序員。寫程序要有入迷的勁頭,關鍵時候要廢寢忘食。

郭宗明心目中的好程序員要具備五種精神:一是團結協作的精神;二是學習的精神。“程序員半年不學習就會落伍”;三是創新的精神;四是犧牲精神。“所有的程序員都願意做新產品,但老產品已經賣了出去,就必須要有人為它做維護”;五是關鍵時刻要有幾天不睡覺的“衝鋒陷陣”精神。

抓“蟲子”

大型軟件要完全消滅BUG是不可能的,現在幾乎所有軟件公司發貨的產品都帶有BUG。因此,如何權衡按時推出產品和減少BUG之間的矛盾是問題焦點所在。軟件公司有的時候明知道產品中還有BUG,但也不能花時間改了,因為再改,可能又會產生新的BUG,程序是相互聯繫的,動了手,腳可能會受到影響。更為重要的是時間不等人,競爭對手更不等人。

方正研究院處理這個問題的原則是:保證用戶日常要用的功能不能帶有BUG,保證不能有高級別的BUG,比如死機等用戶絕對不能容忍的BUG。為了確保這兩點,實在不行的時候,寧肯砍功能。

傳統研究所為什麼不行

肖建國認為傳統研究所不行是體制的問題。“研究所成果難以變成社會財富最主要的原因是國家壓根兒就沒有要求科學家或者科研單位把成果商品化,研究所也就沒有興趣將成果商品化。國家向研究所投錢要的就是研究成果,要的就是一個論文、一個原理型的樣機、一個結論。既然國家科研撥款的時候,要的就是這個東西,知識分子也愛做這個東西,做出來表明我有學問,搞出了成果,提個教授,當個院士。這樣一來誰還會有興趣去搞成果的轉化?”

王選認為,一個newidea不自己動手實現,別人不可能幫你實現。“科學家必須自己動手將成果實用化,這樣才能體會到自己的算法到底行不行。計算機界三十多個獲圖靈獎的人都是自己動手的人。”

王選當年寫程序的時候,還沒有將符號形式的微代碼自動編譯成二進制微代碼的工具,王選就自己手工做這些工作。“1988年到1992年,方正的系統一出來一下子壟斷市場,就是因為我們這些創業的人拼命,如果不拼命,產品不能按時拿出來,晚一年就完全是另一回事了。”王選認為,一個設計方案靠別人實現要比自己親自實現慢得多。

科技創新實用化之後,細緻的商品化和商品的進一步升級,就需要一支隊伍來做。因為技術的成分在一個成熟商品裡面佔的比例會很小,激光照排的技術就是王選的9項專利,但要將這些專利變成激光照排系統,變成商品,卻要有許許多多的人不停地去做那些非創造性的工作、工程性的工作。

肖建國認為王選身上的可貴之處是他身先士卒地做成果轉化商品的工作,而且,還能組織別人做商品化的工作,而很多科學家,不願意做這些事情。“很多教授會認為,做商品幹嗎?為了賺錢,賺錢幹嗎?銅臭!我是教授,這個成果做完了,還要去忙下一個成果呢!我這一輩子要多出幾個成果!”

治本的辦法當然是儘量減少程序中的BUG,方正研究院的方法是抓住兩頭:一頭是加強應用研究,留出時間深入用戶充分了解用戶的需求,而不是急著先把軟件做出來。在這方面有過教訓的肖建國深有感觸地說:“不成熟的軟件到了用戶手中後,用戶會提出一大堆問題,軟件改了再改,不停地往上打補丁,補丁來補丁去,補丁多了,軟件就面目皆非了,原來設計的結構就不適應了。另外,在用戶的抱怨聲中,現改軟件勢必很倉促,那個時候軟件的質量是很難保證的,還談什麼消滅BUG。”

另一頭是加強測試。軟件人員一般都是比較自負的,總覺得自己寫的軟件沒毛病,寫完軟件後自己測一下,沒毛病,更會認定自己寫的程序沒有毛病,但問題往往會出在用戶和程序員使用軟件的方法、方式不一樣上。飛騰是程序員做的,程序員就覺得飛騰應該這樣用,但用戶跟程序員想法會不一樣,用戶認為飛騰就應該那樣用,因為沒想到用戶還會那樣用軟件,測試的時候沒測,潛藏的問題就發現不了。

根據郭宗明的經驗,軟件測試很多時候要做極限測試才能發現技術上的隱含錯誤。比如,因為申請內存沒有釋放而造成BUG,由於現在計算機內存非常大,測一次根本發現不了問題,只有反覆使用這個功能,無數次申請內存,機器才會出現內存不夠,從而把問題暴露出來。

開發和測試是一對矛盾,開發想的是消滅BUG,沒有BUG是開發者的光榮;測試想的是發現BUG,發現軟件中的BUG是測試人員的驕傲。所以,方正研究院的測試部門和開發部門是相互獨立的兩個部門,如果開發部門和測試部門是同一個領導,這個領導就很難協調這兩個針鋒相對的矛盾。李徵稱,1998年研究院最為成功之處,就是將原來只有十幾個人的測試隊伍發展成了70個人的測試中心,培養了一批對產品十分熟悉的測試專家。另外,在方正研究院測試不僅是測試部門的事,開發人員自己也要做單元測試,郭宗明說:“自己寫的程序自己最清楚。”為了加強開發人員的責任心,測試部門的測試不僅要說明錯誤在哪裡,還要說明錯誤是哪個程序員引起的,而這些BUG最終要和開發人員的工資、榮譽掛鉤。

最近方正研究院的牆上貼滿了年底之前通過ISO9000的標語,方正會在軟件工程化管理的路上堅決地走下去,他們已經得到了兩年來艱苦管理磨合的回報——1997年夏天推出的NTRIP和1998年推出的飛騰,一出門就站得住腳,軟件質量明顯上升,1998年新推出的“點睛”系統在中央電視臺全面取代了國外最著名公司出品的同檔次的動畫軟件,為方正研究院進軍數字媒體市場吹響了號角。

採訪手記

王選接受《企業方法》的採訪,純粹因為研究院年輕人的緣故,他覺得方正研究院現在的管理是年輕人在負責,他自己不僅在六年之前退下了技術的第一線,兩年之前也退出了實際管理工作,所以,現在讓他談軟件工程,談軟件開發管理實在勉為其難。

王選講:“誰都知道,技術開發一定是小年青最行,但管理也要相當的年輕化,並不是每個人都明白。像我這兩年社會活動相當多,佔了一半以上的時間,既然我已經不在第一線上了,我就不決策,瞭解得少了以後,就會亂出主意,過去我決策大都正確,是因為我對自己所要做的事情非常熟悉,現在僅靠看一些文獻,我能有什麼發言權?”

因此,外面開會要王選談發展的前景,王選一般都拒絕。“沒有實踐的經驗,沒有實踐的體會,我不願意憑空去吹,逼得太緊,我也就是一般地應付應付。”《企業方法》逼得也很緊,真正逼到管理的細節,王選就避而不答,最後,王選只說了一句,“這些事情讓肖建國他們和你談,他們比我更清楚。”

作為領導人,能夠像王選這樣知道自己在什麼時候發揮什麼樣的作用,不知道算不算做企業的重要方法。讓賢是企業吐故納新的重要環節。

王選心裡很清楚,現在社會給予他很高的榮譽是因為“人家信任我的過去”,“我過去確實也做出了一些成績。”王選最為明智的一點是他將自己能“讓年輕人取代自己”也看成自己的成績,這是老一輩創業者將年輕人推到前臺重要的心態調整方法。

回首從前,王選覺得自己更多的是一名技術專家,不是一位管理的專家。“我個人更類似英特爾第一任創業者諾亦斯,我希望肖建國能成為方正研究院的格魯夫,成為管理型的領導者。”

關於方正研究院的過去,王選想寫一篇文章,題目是《創業難,守業也難》。“創業的時候,需要有非常突出的創新。1988年,方正書版主要競爭對手的技術人員看完我們剛剛問世的產品,感覺需要花兩年時間才能趕上方正,考慮到兩年之後,方正在技術上又會邁上新臺階,競爭對手就放棄了和方正在專業出版領域的競爭。創業的確需要像這樣別人一時難以企及的創新,但創業只要抓住一點,取得創新的突破就能成事,而守業則必須把握住不間斷的轉折關頭,1992年彩色系統的轉折;1993年PS的轉折都讓我們捏了一把汗,現在我們的彩編系統有140家用戶,佔了95%的市場,但競爭對手突然在Notes平臺上追了上來,方正又面臨著在Notes平臺上和競爭對手展開殘酷的競爭。”

王選希望方正研究院能夠在以肖建國為代表的年輕一代領導下守住業並取得更大的發展。方正研究院要守住自己的業,今後主要恐怕要靠管理,而不再是爆發性的創新,這是小公司和大公司,創業和守業的根本區別。

管理並不神秘,它具體到工作的每一個細節。比如,肖建國想通過一次會議達成一項共識,開會之前肖建國就會考慮好,自己的這個提議,哪些人可能會提出哪些反對的理由,這個反對理由提出以後,自己該如何應對。有時候肖建國會設計好提議提出的方式,讓反對的意見根本張不開嘴。另外,在開會之前,肖建國還會仔細考察這個提議要通過必須過哪些人的關,為此,他會先開一些小會,和關鍵人物事先溝通。

當這一切沒策劃好的時候,肖建國不輕易開會,因為肖建國知道,那樣做的結果要麼是強行通過,留下後遺症;要麼是自己的提議讓大家給否了,下次想再開會通過這個提議就更難了。會這樣開會的肖建國,想來不會讓王選失望。

1998年初夏,記者採訪浪潮國強軟件公司總裁王虎的時候,正值浪潮進行軟件業務重組,要將原來分佈在集團各部門的軟件業務和人才集中起來劃歸國強管理,目的當然是擺脫過去單兵作戰的作業方式,在開發上形成合力。王虎當時說,他最缺的不是資金,不是人才,而是一套管理規模軟件公司的方法和經驗。就那一刻,我產生了採訪方正研究院的念頭,當時的這個念頭後來衍生出了整個《企業方法》專欄的構想。


分享到:


相關文章: