Think in Code,用代碼思考-袁紅崗編程思想

"我自己知道,近幾年也一直在用,但就是說不出來,直到最近幾天才能夠表達"--叫作Think in Code,也就是用代碼思考,同時也把代碼當成自己思想表達的方式。正如哲學家用文字設計、詮釋思想,程序員'說話'用的是代碼,這就是一個程序員的境界,也只有代碼是無歧義的"。

--究竟要怎樣的努力才能做到像你一樣?

--就是時間,我覺得任何人寫十幾年的程序,估計都能和我差不多。做程序員,很多人會覺得是吃青春飯的,但我要說,如果大家能靜下心來做到三十幾歲,一定會發覺這是十分愜意的一件事情。

袁紅崗話不多,和其他同事站在一起,穿着簡直可以用隨便來形容。不經介紹,你一定不會想到面前這個"老袁"就是中國Java及J2EE核心技術領域公認的技術權威,金蝶中間件的首席科學家。

"那些都只是虛名而已",老袁平靜地說。

36歲的老袁其實並不老,但十幾年的程序員生涯卻足夠資深。他的"作品"包括:行業內最早基於Windows平臺的財務軟件;國內最早的基於三層結構技術的應用軟件系統;國內首家擁有完全自主知識產權並通過國際J2EE認證的應用服務器……

"編而優則不仕",老袁的想法仍是程序員本色:"回過頭來看,所做產品賣了很多,說明中國有那麼多人在用我們寫的程序,這纔是最有成就感的。如果我做管理工作,那就默默無聞了,就算做到比較高的管理位置又能怎樣?"

"那究竟要怎樣的努力才能做到像你一樣?""就是時間,我覺得任何人寫十幾年的程序,估計都能和我差不多。做程序員,很多人會覺得是吃青春飯的,但我要說,如果大家能靜下心來做到三十幾歲,一定會發覺這是十分愜意的一件事情"。

沒有捷徑,但有方法

做一個程序員,老袁不愛談技術,而以講究方法著稱。幾年前,老袁曾在網上發了個貼子,談《做程序員的基本原則》,結果短時間內的訪問量居然達到了數十萬次之多,成爲名副其實的精華貼。方法對於程序員的重要性,用那裏頭的一句話來說,就是"世界上並沒有成爲高手的捷徑,但一些基本原則是可以遵循的"。

最近見到老袁,他最得意的卻是自己才總結出來的"編程思想"---"我自己知道,近幾年也一直在用,但就是說不出來,直到最近幾天才能夠表達"---叫作Think in Code。

所謂的Think in Code,也就是用代碼思考,同時也把代碼當成自己思想表達的方式。在老袁看來,正如哲學家用文字設計、詮釋思想,程序員"說話"用的是代碼,這就是一個程序員的境界。"也只有代碼是無歧義的"。

如今的老袁寫起程序,一來"在設計的時候,不需要任何其他的開發工具,只需要代碼,對象設計、功能設計都可以直接定義,用代碼方式表達出來",二來"寫到後來不再需要另外的文檔了,寫的東西已經表達了我的思想"。設計或是編碼,可以自頂向下,自底向上,或者兩者融合,都可以自由選擇。很有點隨心所欲的境界。

如果選擇了自頂向下的設計路徑,老袁就會把最高層的這些接口設計好,下面的細節就暫時放着,留待日後細化,反之亦然。等程序的代碼結構有了,再將這尚不可交付的代碼結構做一個測試、重構,找出裏面的缺陷,優化裏頭的細節,使代碼更加合理簡潔,變成一個可交付的版本。每天大家都下班後,老袁啓動一個自動編譯和測試的程序,第二天一來,就知道自己前一天的工作裏面有沒有什麼錯誤。

同樣,老袁也對一些標準化的軟件開發模型很不感冒,比如CMM認證之類。在老袁看來,過於規劃化的流程把軟件開發變成了一種很不自然的事情。老袁更喜歡一種循環開發的模式,寫程序的時候,軟件的設計、編碼、測試都融合在一起進行,而不是像傳統的軟件工程方法那樣分階段,一定要概要設計→詳細設計→編碼→測試,完全完成前一階段才能進行下一個階段。"設計、編碼、測試,不是階段,而是過程,設計的時候也可以編碼,編碼完了就可以測試,爲什麼一定要所有編碼完了才能測試或是所有設計完成纔可以編碼呢?"

找到合適自己的方法

同事說,"老袁在創新上一直是我們追趕的對象,程序員是很講究創新的,很多程序員一開始是跟着人家走,學一些工具並滿足於此,但是老袁能自創一派。"

老袁說,"其實我以前也學過很多的方法,比如UMT,CMM學了很久,但是始終用不起來,感覺這些方法還是不適合我,所以每個人都應該找到自己適合的方法。"

那怎麼來找自己的方法?"不要輕易相信別人的方法。經常說如何好,我就懷疑,是不是真的用了這套東西之後開發能力就提高了呢?"

說起來輕鬆,但真正的尋找過程註定充滿了艱辛。找到了,成爲"開宗立派"的大師,找不到,則只能在模仿小空間裏繞圈子。

老袁在學校裏就開始編程了,"那已經是真正的項目"。這也讓老袁早早地在同齡人中間開始拔尖。從那之後到1994年,在老袁看來是自己學習、摸索,模仿的階段,看了很多書,讀了很多程序,自己也寫,"但現在看起來確實是非常粗淺的"。

1994年,優秀程序員老袁進入金蝶公司,推出了不少大名鼎鼎的"作品",比如金蝶財務軟件等。"在外人看來,這是一個非常輝煌的時代"。但是老袁卻開始越來越鬱悶---不是因爲別的原因,"東西在別人看來寫得非常好,但是自己卻總是覺得再也無法提高了"。

曾經有一年多的時間,老袁說自己一點東西也寫不出來,就是感覺跨不過去了。"當時也動過這樣的念頭:算了,不寫程序了,不寫程序就搞搞管理,日子也會很好過。"

那段時間,老袁率領當時的金蝶中央研究院開始了J2EE架構的核心---J2EE應用服務器的研究和開發,成功開發出了國內首家擁有完全自主知識產權、通過國際J2EE認證的應用服務器,併成爲國際JCP組織中國代表。2000年,金蝶中間件公司成立,發佈了金蝶Apusic應用服務器1.0版本,2001年,老袁又把所有的架構體系推倒重來了一遍,這就是2001發佈的2.0版。

這個2.0版的重構成了老袁程序員生涯的一個重要轉折,可謂從優秀到卓越。"這個時候就開始意識到做軟件是要有思想的,要有思想來指導你。之前之所以遇到很大障礙,就是沒有一套思想、方法論。憑藉着對技術的掌握自己還是寫了一些軟件,但是技術掌握得再多,沒有好的方法,你仍然沒法寫出好的程序。"

就象是捅破了一層窗戶紙。從那時候起,老袁的編程工作就有了遊刃有餘的感覺。去年老袁在美國遇到一位敏捷編程方法的倡導者,被外界稱爲“軟件開發教父”的Martin .Fowler,幾句一聊,讓老袁立刻有了知己之感。"這才發現世界上還有這麼多程序員有和我一樣的想法"。

這讓老袁有了進一步總結自己的編程理念的想法。"我的編程思想和敏捷編程很像,但又不完全是敏捷編程"。老袁希望自己在40歲之前,把Thinking in code說得更清楚些,更具可操作性,比如:如何用代碼而不是用建模工具來設計,如何在設計的時候讓代碼來表現流程。如今老袁平時也帶學生,但是隻教方法,不教技術,"有很多技術,他們比我還懂得多"。

名詞解釋

敏捷編程

一種以人爲核心、迭代、循序漸進的開發方法。在敏捷開發中,軟件項目的構建被切分成多個子項目,各個子項目的成果都經過測試,具備集成和可運行的特徵。簡言之,就是把一個大項目分爲多個相互聯繫,但也可獨立運行的小項目,並分別完成,在此過程中軟件一直處於可使用狀態。

相關鏈接:“影響中國軟件開發的20人”-袁紅崗(http://news.chinabyte.com/334/1760834_3.shtml
“人物:袁紅崗,所屬公司:金蝶中間件公司
入選理由:最早開發Windows上的企業應用軟件,打造獨立知識產權的EJB服務器
很多JAVA程序員對袁紅崗極其佩服,源於他做了很多人不敢想更不敢做的事情,這就是他打造了國產的EJB服務器,很快,金蝶將在國內推出自主產權EJB服務器的3.0版本。
同時,袁紅崗還是在Windows平臺上開發企業應用軟件的最早的一批程序員,當時寫出的適合小型企業使用的財務購銷存一體化軟件KINGDEE 2.7,令IT行業對金蝶刮目相看,使金蝶一舉成名,正是這些人才奠定了中國的管理軟件的基礎。
袁紅崗將自己多年的經驗以一種樸實的風格寫出來,這些帖子在網上也影響深遠。”

更多相關資訊請瀏覽袁紅崗視點專區:http://www.apusic.com/market/javaclub/yuan/

 
發佈了25 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章