周鴻禕:把職業程序員進行到底

周鴻禕:把職業程序員進行到底

 

《程序員》:非常謝謝您接受我們雜誌的採訪,在您十年的開發生涯中,曾經寫了衆多的軟件產品,而3721中文網址系統更是擁有了廣大的用戶羣,你一定對程序員這個職業有很多感觸吧?

  周鴻褘:是的,我一直很自豪曾經是程序員,但我所說的程序員並不是僅編程這個概念的程序員。從1990年開始寫第一個商業化的程序,到現在已經有十年的時間了。在這十年期間,我既做過產品設計,也做過系統集成;既做過編碼工作,也做過系統分析。我在方正期間還領導和管理過程序員團隊,從很小的Team到後來負責方正系統集成部門近一百人的研發中心。在這期間,我親自帶過很多的程序員,把這些剛剛大學畢業的學生培養成爲軟件工程師。而在這個過程中,我也親眼看到很多非常有天賦的程序員,有的在不斷前進,而也有一些慢慢的平庸了下來。所以面對《程序員》雜誌和所有的程序員,的確有很多心裏話要講。

  《程序員》:經歷就是財富,您有這麼豐富的經歷,那從您的經驗講,如何做一個好程序員呢?

  周鴻褘:一個好程序員是很難定義的,但我認爲要做一個職業化的程序員,需要幾點。首先是要有興趣從事這個職業。現在很多人是因爲軟件行業的薪資高才進入的,其實沒有人不想掙錢。但我的看法是,程序員是沒有辦法一夜暴富的。甚至可以說如果你聰明伶俐的話,做程序員不如去做銷售人員的待遇和收入上升得更快一些。我認爲做程序員首先一定要從興趣上愛這個行業,否則根本無法忍受成爲一個真正程序員要付出的代價。雖然現在,像我和求伯君、王志東等,的確不用寫也沒有時間寫程序了,但從內心來講,仍然對開發有一種衝動和熱情。第二點就是要打好基礎。科班出身最好,如果不是也沒有關係,我們公司也有一些不是科班出身的程序員,但我都讓他們去購買一些諸如數據結構、編譯原理之類的基礎書籍學習,爲什麼這樣呢?因爲計算機分爲兩個領域:算法領域和編程領域。算法領域是數學家的事情,對他們來說,實現並不重要,重要的是找到一個算法,找到一個公式,建立一種模型。除去算法領域,其他的都屬於編程的範疇。對於任何一個大型的系統,其實都可以把它分解成爲若干最基本的數據結構和基本算法,而這些都是在大學本科的課程中能夠學到的。我曾經剖析過很多操作系統,包括DOS、Windows、UNIX,其實裏面很多基礎就是數據結構、數據庫原理和操作系統的基本原理。第三點要做到不被周圍紛亂的新名詞、新事物所誘惑。現在新名詞太多了,今天流行Java,明天就是C#,很多程序員便被這些東西所吸引,去追風。大家都知道"活到老,學到老",但學習要有正確的學習方法。有些程序員以自己知道一個新名詞爲榮,覺得很"酷"。但實際上任何一個新的技術如果你把它外表的新名詞拋掉,去查看它的來源和歷史,就會發現很多都是從老知識中派生出來的,本質並沒有變。第四點就是要學會領悟和超越。計算機中的基礎知識太多了,每個課程都包含了很多深層的東西。要深入瞭解任何一門語言,都需要很長時間的積累,經過積累,才能領悟其中的道理。比如學習一種刀法,如果僅僅是會用刀,換成一把劍就不會用了,這不是真正的高手。高手就是要能夠通過學習刀進而領悟到整個器械的用法,這時無論是給你一把劍或者匕首,都可以運用自如。

  《程序員》:我們知道,您在學校的時候就取得了很多的成績,而我們的讀者也有很多是在校或剛畢業的學生。您有哪些學習方法和經驗值得他們借鑑呢?

  周鴻褘:首先還是學好自己的基礎課程。我當時上的是西安交大的特種班,專業要求很嚴,使我不得不把基礎課學好。除此之外還有一個原因,就是我在高中的時候就編程,但那時候沒有理論指導,只是靠興趣,憑感覺,因此遇到了很多問題。當我在大學開始學習後,所學課程讓我明白了很多困擾已久、百思不得其解的問題,所以內心產生了學習的慾望。這樣基礎打得紮實,課程學得也好,而且不是爲了應付考試。現在想來,我很多靈感都是來自於學校打下的堅實基礎。第二我花了很多時間去實踐。當時沒有現在這麼好的條件,但我在學校一直利用任何一個機會在計算機上去做開發和實踐,這些實踐打下的基礎使我這些年來受益無窮,這也是發自內心的感受。第三是利用大量的時間讀源碼。因爲寫程序一方面要讀別人的程序,一方面是模仿,一方面是自己寫,三者缺一不可。通過讀這些源碼,對語言的本質有了很深的瞭解,進而才能超越語言本身。比如當時新推出了Pascal的圖形工具箱,很多人只是爲了用它,但我卻將源碼通讀。大師級的軟件作品就象唐詩三百首一樣,讀起來是藝術的享受。後來我還讀過C語言的庫函數源代碼,研究它是如何寫得精緻和高效的。研究生做畢業設計的時候,又花了一個月的時間仔細研讀新出的MFC類庫。我還把Delphi的源碼和類庫研讀了一遍。而且當時還做了很多程序,去看C編譯器輸出的彙編代碼。這些聽起來好像都是很笨的方法,但效果是非常好的,這個習慣至今未改。第四是經常的思考。思考和學習是結合在一起的,看到別人的項目和軟件,我首先會想它是怎樣做的,爲什麼這麼做?我個人非常喜歡電腦遊戲,但很少上癮,因爲面對一個好遊戲,我喜歡先思考這個遊戲是如何製作的。比如Doom,我曾經仔細研究考慮它的三維圖像和二維貼圖是怎樣處理的。除此之外,還有很多東西都可以讓我去思考,其實在思考的過程中並不一定會得到答案,但重要的是你在思考,這樣帶着很多問題去看書,去聽課,就會讓學習變得有動力,有目的性。

  《程序員》:很多剛畢業之後學生和程序員經常會產生一些疑問,比如"我做什麼軟件能夠快速成功?做什麼項目更有意義?"您對這個問題如何看待呢?

  周鴻褘:我認爲最重要的不是做什麼,而是怎樣去做。因爲剛開始你根本做不了判斷。做一個項目的成功與否完全取決於對這個項目的態度和投入,而不取決於項目本身。我有一個信條:一件事情,要麼我不做,要麼我就做好,做的有創意!因爲如果不認真做,既浪費公司的時間,同時也浪費自己的時間。但如果認真做了,就會發現從這個項目得到的收穫遠遠超過項目本身。下面我講講自己在方正工作的一些經歷,從中你會發現,機會是自己把握的。我在方正做了好幾件很多人不願意去做的事情。第一件是我剛到方正的時候被分派到新疆做銀行系統集成開發。這是一個苦差事,但我想既然來做這件事情,就一定要做的最好。到達之後,我並沒有立刻動手做事,而是花了一個星期的時間來思考如何用新的開發方式來提高工作效率。後來我以畢業設計時研究VC的基礎,在UNIX字符模式下實現了一套VC的類庫和軟件開發的平臺。這個界面編輯器能夠在UNIX的終端下所見即所得的設計界面,自動形成程序框架代碼,自動檢測錯誤,使用這套工具可以提高開發效率十幾倍。就是這樣一個不是機會的機會,不僅僅轟動了整個建行系統,同時也奠定了我在方正的位置。第二件是給國務院辦公廳的領導培訓電子郵件使用。其實本身這件事情是非常無聊的,就是講述CCmail的使用,很多人可能就隨便講講課,應付了事。那時Internet應用剛剛開始,但我從這次培訓開始,找到了很多相關的資料,在學習過程中對電子郵件產生了濃厚的興趣,並感覺做一套Internet的郵件系統會非常有前途。而且通過和學員的交談,發現他們很難學會技術化產品的操作,於是產生了開發一套人性化的電子郵件系統的想法,這件事也奠定了我後來開發方正飛揚這個產品的知識基礎和思路。第三件就是在撤銷方正飛揚這個項目之後,我再次被指派到新疆去解決銀行系統無法處理大量數據的問題。因爲當時一個省級銀行每天要做數千萬筆交易,這個訪問量是非常大的,整套系統無法承受。要解決的就是如何在不升級硬件的情況下提高系統效率。這個事情沒有人願意去,一方面是遠,更重要的是很難知道這件事情會做成怎樣。當然我也不想去,但既然去了,就要做出成績來。在新疆工作了一年半之後,我把這個問題解決了。而且在解決這個問題的過程中獲得了很大的收穫,比如對企業級軟件如何利用中間件來提高性能,提高容錯能力有了很好的認識,還研究了企業級軟件的體系結構;最重要的是瞭解了數據庫系統如何優化,尤其是在處理海量數據訪問的情況下,仍然能夠保證速度和性能方面收益菲淺。所有這些都爲現在3721能夠開發出高效率的搜索引擎打下了一個很好的基礎,因此我說,如果當時我沒有去的話,對於3721來說,即便我有了一個很好的想法,但是否能夠做成一個成功的產品還很難說。

  《程序員》:現在很多程序員被日新月異的新技術、紛亂的新名詞搞的不知如何是好,那您在遇到過這種情況的時候是如何處理的呢?

  周鴻褘:人的生命和精力是有限的,如何在有限的時間中更好的學習和提高自己,這是一個很重要的課題。有些人喜歡追逐新名詞,蜻蜓點水的學習新東西,我覺得這樣做既浪費精力,又使自己很累,而且效果也不好。其實計算機所有的東西都是相通的,換句話說,好的程序員在Windows、DOS、UNIX下編程沒有什麼區別,體現的就是編程的功力,用什麼語言也不重要,體現的是你對問題如何去解決及對算法和數據結構的把握,對語言本質的瞭解。同其他的開發人員一樣,我也遇到過很多的問題,我解決流程一般是:學習基礎理論知識-聚焦-紮實的做事,而每個環節都要思考。我上大二的時候參與過學校課題組的一個項目,是國內的程控交換機檢錯系統,我分到了自動報警中的屏幕顯示出錯中部件和電路圖的模塊。在我之前,有畢業生準備把二千多張圖紙輸入到計算機中,可是畢業設計做了幾個月,也就畫了幾張圖,不了了之。雖然當時沒有什麼經驗,但我首先花了很多時間思考這個問題。後來受蘋果電腦上畫圖系統的啓發,寫了一個畫圖程序。這個程序可以畫元件、連接元件並加標註。而且還可以把線路圖按照數據庫的形式存儲到計算機裏面,並能很方便的調用。最終這個項目取得了非常大的成功。同時也奠定了我的軟件思維模式,就是如何創建通用的解決問題的方法。而當時我爲了做這個產品,我花了一個月的時間研究了Turbo Pascal的圖形庫。到了方正之後,接觸到了剛剛興起的Internet,同很多人一樣,我對Internet帶來新事物和應用感到迷惑和慌張,不知從何處下手,感覺新名詞天天都學不完,又怎麼可能掌握它呢?但我很快就從迷惑中清醒了出來,認識到現在看到的都是表面的事物,不是本質的東西。我首先要了解互聯網的本質,瞭解互聯網的思想。因此當時我分了三個階段,第一階段找了很多講述互聯網通訊技術理論的書籍,試圖對整個互聯網做技術上的把握。第二階段我就選擇了Email作爲切入點,雖然當時互聯網上有很多的應用,但我只選擇了電子郵件作爲主攻方向,而且先從郵件客戶端開始去研究各種互聯網標準。第三步就是花費了一年半的時間紮實的去做郵件系統。當我做完郵件系統之後,已經對網絡有了深刻的感性認識。

  《程序員》:您認爲要做一個職業程序員,如何處理開發和市場之間的關係呢?

  周鴻褘:做一個程序員,不能只埋頭編程,一定要跳出開發者的狹隘的技術眼光,能夠到市場和客戶那裏去看一看。我比較幸運,因爲做過的項目都有客戶需求,這樣就可以和客戶建立很好的技術溝通。在我上研究生的後半年,我花了很多時間到公司中學習其他的各種技能,學習談生意,接觸客戶。當時我對編程以外的很多事情都有興趣,包括攢機器、裝軟件、做培訓。這些事情看起來很無聊,但一方面提高了同他人溝通的能力,另一方面也讓我知道了客戶和企業的需求。後來做病毒卡的時候,又接觸到了售後服務的問題。所有這些都讓我清楚了做產品要從用戶的角度出發,而不能從自己的角度出發。同時我也把這個思路帶到了方正飛揚電子郵件和3721系統中。所以我建議程序員可以一段時間不寫程序,出去走走。就象古代詩人只坐在房間裏,寫不出來很好的作品,而出去遊歷一下名山大川,感受一下大自然,回來之後自會有另外的一番感受和境界。

  《程序員》:不知道您喜不喜歡足球?中國軟件業近些年來就象中國足球一樣,備受指責。那作爲軟件業主體的程序員也一定存在很多自身的缺陷,您認爲主要表現在哪裏呢?

  周鴻褘:我個人很喜歡足球,我做開發時,業餘時間經常踢足球,而且我比較喜歡踢前鋒。而看比賽我一般只看高水平的國外聯賽。我覺得我們的有些程序員存在一些致命傷,比如好高騖遠。這些程序員比較年輕,熱血沸騰,總是對中國軟件產業憂心忡忡。還有很多人提出要做中國的操作系統,要挽救中國軟件業。其實他們沒有看到,就美國來說,很多程序員是從五六十年代就開始編程的。沒有發展了幾十年的軟件產業,沒有衆多程序員積累,不可能誕生像Windows這樣的操作系統的。另外對於Quake 3,大家都覺着好玩,有人聲稱也要做一個,其實他沒有看到,Quake 3前面還一代、二代的程序,Quake前面還有Doom,Doom前面還有Wolf 3D做基礎,而做Wolf 3D的一羣程序員也有數年的遊戲開發經驗。所以說軟件就象文化一樣,是一個需要知識積累和沉澱的。我們的程序員與其杞人憂天,不如紮實的把自己能做的事情做好。另外我建議年輕的程序員不要急於搞軟件工程。因爲從另一方面講是對自己沒有信心的一種表現。我覺得要做一名職業的程序員,他的青春和職業生命也應該是比較長的。很多非常年輕的程序員很早就開始研究Rose,UML之類的,自己感覺比較時髦。可是作爲一個專業的程序員,如果沒有豐富的實踐經驗,脫離一個很紮實的基礎,就算是學到了系統分析和系統設計的一個皮毛,那成功的可能性也是很小的。想成大事的人要能夠經受住各種磨難,要有韌性。任何一個產品都是用心血澆灌成的。我做開發的時候感覺最多的就是有很多的不眠之夜,經常工作到天亮,連軸工作,一個問題解決了,剛鬆口氣,有了很大的成就感,突然又出現了一個新問題,就這樣在希望和絕望的巔峯和谷底之間來回震盪,真的是很刺激,所以我喜歡做程序員。但當你把一個比較完美的作品做出來的時候,會感覺自己像被扒了三層皮一樣,太累了。所以我送所有的程序員一句話:你覺得自己很聰明,是天才,但天下這種人太多了,你想在三到五年就把別人十年做的事情做一遍,那你也一定會把別人在十年中所受的苦難在這三到五年經歷一遍,沒有韌性是絕對不行的。

  《程序員》:再次感謝您接受我們的採訪,近來,世界盃預選賽中國隊踢的不錯,有一種脫胎換骨的感覺,但願我們的程序員也能像中國足球隊員一樣,換一個新面貌。

  採訪後記:早在採訪之前,便聽說過很多關於周鴻褘的故事。有位朋友告訴我:"周鴻褘是一個聰明人!"但採訪完之後,我感到他不僅是一個聰明人,還是一個非常勤奮、有思想的人。兩個小時的採訪中他只喝了兩口水,剩餘的時間都在思考和回答問題,從他的眼神和語言中,恨不能把這些年的感受和經驗全部傾倒出來。他的言語非常有邏輯,有條理,好像仍然在編寫一個程序。

 

背景材料

 

  1995年,周鴻禕畢業於西安交大管理學院系統工程系,獲碩士學位。周鴻禕於1998年10月創建www.3721.com,現任3721 董事長兼CTO( 首席技術官 )。此前,他曾就職方正集團,組織研發了中國互聯網業界第一個自主版權的軟件產品--"飛揚"電子郵件。周鴻禕具有敏銳的洞察力和對互聯網的深刻理解。3721自創建至今,堅持致力於網絡實名服務的技術研發和市場推廣,積極發展具有自主產權的核心技術,擁有網絡實名解析、智能推測等一整套自主產權的核心技術和軟件著作權,申請了多項國際專利,並積極參與相關國際標準的制定。2000年5月,他被《中國青年報》推選爲"IT新生代十佳青年"。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章