5.實(shí)踐第一
2002年下半年,我和一個朋友去了北京郊區(qū)的一家雜志社,看到的情形讓我震驚:在信息產(chǎn)業(yè)最發(fā)達(dá)的北京,這家雜志社還用人工查對雜志訂單和款單,看著那按省來登記的幾大本厚厚的客戶登記本,工作人員需要手工來在其中查找相應(yīng)的信息。這樣的工作效率,這樣的行業(yè)信息化水平!北京如此,全國又如何?
從這件事上,我看到了中國軟件業(yè)的另一方面。一方面我們沒有核心技術(shù),另一方面,已有的技術(shù)又根本沒推廣沒用好。追蹤世界先進(jìn)水平,對于我等這種水平的人來說,確實(shí)勉為其難,但將已有的技術(shù)用于解決實(shí)際問題,卻是我們可以做的。如果中國各行各業(yè)都真正能通過進(jìn)行信息化而提高生產(chǎn)效益,那中國不就從根本上強(qiáng)大起來了嗎(象印度,it一枝獨(dú)秀,其他行業(yè)沒有起色,我稱之為跛足的國家,絕不能成為世界強(qiáng)國)?在扎實(shí)的社會基礎(chǔ)之上,軟件業(yè)不就有了更大的市場與發(fā)展?jié)摿Γ恐袊S多行業(yè)的信息化水平非常低,而且中國地域廣大,發(fā)展非常不平衡,有些地方信息化水平甚至為0!努力推動行業(yè)信息化,是我們這一代軟件開發(fā)者的責(zé)任!而追趕國外先進(jìn)水平,恐怕就不是一代兩代程序員可以達(dá)到目標(biāo)的,需要長期的努力。作為一名軟件開發(fā)者,只能腳踏實(shí)地,哪怕你只做一個小小的mis產(chǎn)品,也要盡力把它做好來。
于是,我開始了期刊發(fā)行系統(tǒng)的開發(fā),這完全是自發(fā)的,沒有任何資金投入,只有一種熱情在支撐。我開始選擇c++ builder開發(fā),做了幾個月,完成了第一個版本,但我發(fā)現(xiàn),我找不到足夠水平的c++程序員進(jìn)行合作開發(fā),而且整個一個exe文件,在體系結(jié)構(gòu)設(shè)計(jì)上雖采用了分層分塊的設(shè)計(jì)方案,但卻是源代碼級別的,要拆分成com組件難度太大,不是一個人能完成的,于是中途流產(chǎn)。
2003年3月,我開始系統(tǒng)地學(xué)習(xí).net,我吃驚地發(fā)現(xiàn),我原來想在c++中實(shí)現(xiàn)的許多功能,比如對象串行化為xml,在.net中已有現(xiàn)成的類可用,.net更把oo的功用發(fā)揮到了極致,它的混合語言開發(fā),它的反射機(jī)制,它的新的自識別的軟件組件,以及強(qiáng)大好用的開發(fā)環(huán)境vs.net,都讓我驚嘆微軟對開發(fā)者遇到的困難的深入把握,相比用c++開發(fā),至少可以提高1/3的開發(fā)效率。于是一個新的想法產(chǎn)生了,我要把以前的產(chǎn)品用.net重寫,利用.net強(qiáng)大的組件模型,將設(shè)計(jì)模式理論推廣應(yīng)用到組件級別,通過xml和反射機(jī)制建立一套可動態(tài)裝配的軟件生產(chǎn)流水線,實(shí)現(xiàn)象dell直銷pc那樣的軟件動態(tài)裝配直銷。只要建立好靈活可不斷重構(gòu)的系統(tǒng)架構(gòu),配以對業(yè)務(wù)領(lǐng)域的深入分析,逐步建立功能強(qiáng)大的業(yè)務(wù)組件倉庫,就可以實(shí)現(xiàn)軟件系統(tǒng)的動態(tài)裝配。說干就干,我用vb,net重寫了原先用c++編寫的系統(tǒng),將原先的一個exe變?yōu)槭畮讉dll,而且這些dll還會隨著發(fā)展而不斷地分裂,也有可能重新組合,利用refractoring(重構(gòu))不斷進(jìn)化,最終形成一整套完備的行業(yè)軟件組件庫。做軟件關(guān)鍵因素是變化,只有適應(yīng)變化的系統(tǒng)才是有生命力的。
我用兩個月的時(shí)間大體上弄清了.net平臺下的主要類庫,然后又用兩個月的時(shí)間再次重新實(shí)現(xiàn)了期刊發(fā)行系統(tǒng)的c++版本的全部功能,到8月份我寫這篇文章之時(shí),第一個產(chǎn)品里程碑已經(jīng)完成。同樣的,除了需求是由另一個合作者去搜集的之外,幾乎又是全部由我一個人包攬了所有的系統(tǒng)設(shè)計(jì)及編碼工作!
毫無疑問,我自覺得新系統(tǒng)要比老系統(tǒng)可維護(hù)性強(qiáng)得多,真正實(shí)現(xiàn)了徹底的全組件化系統(tǒng)開發(fā),計(jì)劃再有一個月的界面美化,改正bug,引用多線程提高運(yùn)行效率,優(yōu)化系統(tǒng)結(jié)構(gòu),就可以提供給用戶試用了。市場如何,難說難測。
在開發(fā)過程中,我再次感到巨大的挑戰(zhàn),不光是技術(shù)上的,更是管理上的。人才是我最頭痛的問題,沒有一流的人才,哪來一流的產(chǎn)品?我們找不到足夠水平的程序員一起合作(牛人哪屑于做這樣一個小兒科的產(chǎn)品?)我們要走的路還很長。也許我們開發(fā)的產(chǎn)品是失敗的,但我從來就沒指望能用這賺錢,我只是盡一個軟件開發(fā)者的責(zé)任而己,成敗已不重要!人生不嘗試,怎能體現(xiàn)人活著的價(jià)值?