用友的程序員文化
——《程序員》對邵凱專訪
邵凱,股份公司董事、高級副總裁、NC事業部總經理。獲哈爾濱工業大學計算機理學碩士學位,1991年加入用友,曾任公司副總裁、產品研發中心總經理、質量總監、信息總監。邵凱先生擔任的社會職務有北京軟件行業協會常務理事,國家標準化委員會TC151技術委員會委員。
用友軟件做為首家國內主板上市的軟件公司,為中國軟件產業的發展注入了新的活力。這讓我們不能不將關注的目光投向這個在中國算的上“巨無霸”的軟件公司,當然我們探求的不是其資本運營方面的內幕,而是用友公司內的程序員文化。本期我們就將帶著您走進位于北京上地信息產業基地的用友大廈,直面用友的高級副總裁邵凱先生,看看他眼中的用友軟件的程序員文化和他對程序員發展的看法。
用友的成功體現在程序員身上,有三個方面:專注財務和管理軟件領域、用戶需求第
一、強調程序可靠性。
《程序員》:用友軟件現在是國內數一數二的軟件公司,也成為國內軟件也的一面旗幟,您是如何看待用友的成功和程序員的關系的呢?
邵凱:用友這些年的發展還是比較成功的。做為用友公司的高層管理人員,我認為,首先,用友很專注。最初幾年我們只專注在財務軟件領域。從1988年開始開發財務軟件到現在已經有十幾年的時間。很多核心程序員寫了財務軟件的很多版本,程序代碼也非常穩定。用友的產品我從1991年開始接觸,后來經歷了眾多的版本,到現在負責的NC,我感覺每一個版本里面都集成了以前版本的核心和思想,每升級一個大的版本,軟件都有一個大的提高,公司也就發展到一個新的階段。
第二就是將用戶視為上帝。很多其它公司程序員并不把這個問題當做一回事。但用友可以把一個財務軟件寫了十幾年,寫什么呢?實際上,就是傾聽用戶的各種需求。我們認為用戶的需求都是合理的,用友的程序員不會直接指責用戶的要求不合理,而是在尊重用戶意見的同時,分析用戶需要,提煉和抽象,把軟件做得更好。
第三就是程序的可靠性。我聽到過有程序員瞧不起用友的產品,認為用友軟件的技術落后。但應用軟件的技術先進性是什么,很多人講不清楚。其實無論是用VB還是C++、JAVA開發,產品的穩定性都是最重要的,用友在這方面一直做不懈的努力。我們的程序員都很清楚,用友有成千上萬的用戶(目前已經達30萬用戶),如果我們產品在遺留一個必然錯誤的情況下發版了,就有可能造成幾萬個用戶出現錯誤,用戶的損失將不可估量,幾萬個錯誤就可能有幾萬個電話打到公司總部,整個用友的維護網絡就會癱瘓。因此,我們每寫一行程序,都可能要測試很多遍。用友開發人員中有1/3的專職測試人員,還有很多兼職測試人員,我們稱之為“BATTLE TEST”-千錘百煉。
在用友軟件公司,程序員并沒有那種眾星捧月的優越感覺,他們被很多的規范所限制,但這些限制保證其軟件職業生涯穩步發展。用友的軟件文化不是唯程序文化。
《程序員》:在用友軟件公司,程序員是處于一個什么樣的位置呢?他們的發展空間在哪里?您認為用友的程序員文化核心是什么?
邵凱:相對來說,用友公司是一個已經發展很長時間的軟件公司,所以形成了自己的一些程序員文化。在用友,程序員會遇到很多自己不太愿意接受的東西,比如很多的文檔,嚴格的測試。尤其是對于新手,他們開始可能會不太適應這里的環境。
舉個例子,用友開發部門有一項非常重要而且經常開展的工作,就是軟件各個階段和環節都有的評審,在程序設計階段,這個評審叫代碼講評。用投影儀把程序員寫的代碼顯示在大屏幕上,召集很多相關的程序員,大家一起來對這段代碼進行評審。
面對一個設計要求,代碼如何寫,這并不難,評審的過程和氣氛也非常平和(PEER REVIEW),在大庭廣眾下被他人對自己的代碼品頭論足,作者的感覺還是不一樣。寫程序和做題不同,做題一般只有一個正確答案,只要最后的結果是對的,大家就不會說什么了。但寫程序涉及的問題更多,大家會看是否符合標準和函數的規范。比如一個算法、一個函數所用的代碼行數不能太長(一般不得超過50行)。而且還會檢查這個算法是否和設計要求相吻合,實現的方法如何,算法的正確性,有時程序的作者會比較難受。尤其是很多程序員都有很強的自信心。 但更多的人認為這是一種激勵、挑戰和證明。不管怎樣,程序代碼是需要經過集思廣益、反復斟酌、精益求精,而不是閉門造車的寫。
在用友,我們稱應用專家、系統分析師、架構設計師、程序員、測試人員都是技術人員。在這個群體中,程序員不是塔尖的一族,也沒有在小軟件公司那樣的優越感。在用友的程序員中,有一個非常重要的群體,就是軟件架構設計人員,有人稱之為ARCHITECT。他們是從程序員中成長出來的,他們精通程序設計,較大規模軟件開發首先由他們進行結構設計,再由程序員設計其中的組件,這些人在國外的收入也是很高的。另外很重要的一群體是應用專家,因為用友是做管理軟件的,讓只懂軟件技術的程序員設計一個ERP應用算法是不可想象的,必須首先由懂得應用領域業務的專家提出最優化的應用模型。
用友是個私營企業,軟件只有銷售出去,而且只有長期占領市場,才能算是成功。因此售前咨詢顧問、實施專家、銷售等人員的作用非常重要。一次成功的售前支持和商務談判就可以給用戶帶來極具價值的解決方案,同時給用友帶來豐厚的收入。所以在用友,高級銷售人員、高級咨詢顧問都得到較好的認可,盡管一般程序員在這方面很難相比,但在一個產品業務線上,各種角色配合密切。
在用友,多數程序員要想取得更好的業績,一般應該向主程序員、架構設計師或者是項目負責人、開發經理、產品經理方面發展。用友提供了一個非常好的可供長期職業生涯發展的環境。
用友是一個在國內較早進行軟件開發規范管理的公司,我們目前正在大力推行CMM、PSP,大團隊協作、同級評審等方法,同時營造非常OPEN的開發文化。所有工作是面向文檔,而不是面向人;多數工作都是靠協作,而不是只靠個人。我們在開發NC的過程中,在只有5個月的程序階段,200人同時寫一個軟件產品的程序,這在中國可能是很少見的。
因此說,用友的軟件文化不是唯程序文化,而是側重開發管理、項目管理、軟件工程,更重視過程改進,開發的組織工作都有相當專業的人在做。這種文化和程序員本身既有沖突,又相融合。它給程序員提供了一種非常現實,但又非常鍛煉人、非常有發展潛力工作模式。從軟件企業長期運營來看,這是正確的發展路線。只有在這種模式下,程序員才能真正的把軟件的價值體現在用戶應用現場,用戶才可能再把價值回報給程序員。
用友軟件的技術發展過程就是中國軟件企業不斷完善的過程。它不是簡單的追求技術,從早期的財務軟件到現在的NC,軟件越來越復雜,采用的新技術越來越多,但這不是為了復雜而復雜,體現的只有一句話,技術以應用為本。
《程序員》:請您談談您對用友軟件技術發展過程的一些體會和看法?
邵凱:我是從第二代用友的軟件產品開始參與用友開發工作的,現在是NC的產品經理,經過了十幾年的發展,用友從單一的財務軟件發展到現在面向多個行業、多個應用領域和層次,較完善的系列管理軟件產品和應用解決方案,同時還提供應用咨詢和項目實施的服務,發展過程經歷了很多的變遷。
88年到92年,最初用友在分析部分具體用戶的財務要求需求之后,經過抽象和提煉,設計出通用的財務軟件,推出了早期批量銷售的產品,這是一次非常有價值的突破,即軟件的通用化和商品化。通用化和商品化是軟件產品公司必須建立的技術能力。
92年到95年,發展到基于DOS的財務軟件5.0版本的時候,銷售規模迅速擴大,軟件應用范圍也從財務應用擴大到進銷存應用,在繼承通用性和商品化的同時,軟件重用的技術開始采用,對于重復使用的程序代碼,如菜單、數據維護、輸入輸出數據表、打印、幫助等,我們將這些程序進行通用性抽象,形成了基于DOS的用友應用軟件開發平臺,大大提高了開發效率和軟件穩定性。用友基于DOS平臺的最后軟件版本6.0版系列軟件成為劃時代的財務軟件產品。目前仍然有用戶在使用。
98年后,用友產品發展到8.0版本,在取得應用上重大突破的同時,我們的程序員開始重點考慮軟件層次結構設計和子系統集中控制管理。逐步全面采用大型關系據庫進行軟件的優化設計,逐步增加的WEB應用功能使該產品支持INTERNET應用。
8.0產品現在整合了先進的MRP系統,發展到U8ERP 8.21版本,適合中小型企業應用。是用友軟件家族的主力,擁有用戶最多的用友軟件產品。U8 ERP的后續發展將基于微軟的.NET 技術,追求優化高效軟件設計和易用性,全面面向中小企業應用。
在整個開發過程中,為解決各種應用問題和改善使用效果,NC的程序員開發并采用了大量的軟件新技術。J2EE技術為設計基于INTERNET的大型企業應用軟件提供了手段。JAVA技術使所開發的軟件能夠支持眾多平行和后續的先進技術手段。
用友NC在J2EE基礎上設計了具有自主版權的中間件和豐富的公共技術組件。軟件體系中采用數據交換技術構成系統信息交換平臺。所有的信息在傳遞時,不是直接聯結相應的組件,而是將信息放到信息交換平臺里,由系統自動尋找相應的應用組件進行處理。比如,當有要貨申請的時候,把請求發布到這個信息交換平臺,系統就會分析判斷從哪里進貨最合適,并把相應的信息返回給系統使用者。監控管理也得到很好的設計,比如庫存報警,當一批貨出庫之后如果庫存量底于報警線,一個報警狀態就被放在這個信息交換平臺中,相應的采購申請將產生,同時停止響應任何正常的出貨要求。
在開發方法上,回憶用友的技術開發過程,我們曾經推行過結構化程序開發,但因為無法打通應用和技術的通道,一直難以建立規范且完善的,適合應用軟件的開發技術規范。現在全部采用了面向對象的技術。基本打通了從需求分析到程序設計的全過程。伴隨的還有工具的進步。從簡單的編程軟件到借助一些開發工具來做,比如采用了面向對象的分析設計工具、關系數據庫設計工具等,還有先進的測試工具以及版本管理工具。在語言上,從最早的類DBASE命令語言到現在的JAVA和C#。
用友公司在確定技術應用的時候,不會簡單的追求某一個流行的熱門技術,而是要考慮采用這樣的技術能夠給用戶帶來的價值和對軟件開發過程帶來的影響。從早期的財務軟件到現在的NC,軟件越來越復雜,采用的新技術越來越多,但這不是為了復雜而復雜,體現的只有一句話,技術以應用為本。
個人對程序員發展的看法:程序員的追求不是錢和“大拿”的問題,而是如何放大自己CODING價值。我想對程序員說的是,要盡快選定一條適合自己發展的路子,如果不盡快選定,幾年之后,就會發現自己很茫然,而且失落。選定了,堅持做下去,一定會越來越光明。
《程序員》:您個人發展的經驗來看,對程序員發展有哪些看法?
邵凱:我個人來看,還是專注。專注是成功的根本,做事業專注才可以成功。專注不是說只編程序才算是專注,而是包括專注到某一個領域中去。無論是企業管理軟件、工具軟件還是其他類型的軟件,都可以。同時在這個專注追求過程中,要經的起誘惑,耐的住寂寞。只有這樣,幾年之后,你會發現自己的成功,發現自己的程序員生涯不是曇花一現。
程序員要想有成功的發展,專注在某個領域,做有價值的程序,這是非常重要的。我不反對一個程序員做軟件技術的全才,但不要去獵奇。好像別人講什么東西,你都懂。實際上什么都懂不是最重要的,作出更好的結果最為重要。我認為有些方面可以是愛好,不一定做為事業去做。
我曾經這樣思考過:如何把自己的價值放大?自己寫程序,一天寫一千行已經非常了不起了,很辛苦了。但如果是帶一個十人團隊做,每個人每天只寫二百行,就是二千行了。這個產品可能不是你一個人做的,但大家的價值都集中在里面,會產生更大的價值。當然也不一定都要做項目經理,做產品架構設計師同樣可以將自己的想法貫注到其中,引導程序的方向。這就是放大了自己的程序價值。
想到用友在全國有上千個程序員在寫程序,做為用友公司軟件開發管理人員和技術負責人,我為用友的程序中有我的有效代碼,有我的價值在其中而感到一種欣慰。
我覺得程序員發展有三個方向:系統分析、架構設計和開發管理。可以沿著產品開發經理、部門經理,到研發部門的總經理;也可以做小組的主設計人員、專職設計人員,到公司的總架構設計師;或者做系統分析、應用分析。我想對程序員說的是,你要盡快選定一條適合自己發展的路子。如果不選定的話,那就會非常茫然,過幾年之后,就會發現自己很失落,不知道去做什么。有了一個目標,不要經常改變,一直堅持下去(能否堅持十年),肯定是可以成功的。