五、實踐第一
2002年下半年,我和一個朋友去了北京郊區的一家雜誌社,看到的情形讓我震驚:在信息產業最發達的北京,這家雜誌社還用人工查對雜誌訂單和款單,看著那按省來登記的幾大本厚厚的客戶登記本,工作人員需要手工來在其中查找相應的信息。這樣的工作效率,這樣的行業信息化水平!北京如此,全國又如何?
從這件事上,我看到了中國軟體業的另一方面。一方面我們沒有核心技術,另一方面,已有的技術又根本沒推廣沒用好。追蹤世界先進水平,對於我等這種水平的人來說,確實勉為其難,但將已有的技術用於解決實際問題,卻是我們可以做的。如果中國各行各業都真正能通過進行信息化而提高生產效益,那中國不就從根本上強大起來了嗎?在紮實的社會基礎之上,軟體業不就有了更大的市場與發展潛力?中國許多行業的信息化水平非常低,而且中國地域廣大,發展非常不平衡,有些地方信息化水平甚至為0!努力推動行業信息化,是我們這一代軟體開發者的責任!而追趕國外先進水平,恐怕就不是一代兩代程式設計師可以達到目標的,需要長期的努力。作為一名軟體開發者,只能腳踏實地,哪怕你只做一個小小的mis產品,也要盡力把它做好來。
於是,我開始了期刊發行系統的開發,這完全是自發的,沒有任何資金投入,只有一種熱情在支撐。我開始選擇c++builder開發,做了幾個月,完成了第一個版本,但我發現,我找不到足夠水平的c++程式設計師進行合作開發,而且整個一個exe檔案,在體系結構設計上雖採用了分層分塊的設計方案,但卻是原始碼級別的,要拆分成com組件難度太大,不是一個人能完成的,於是中途流產。
2003年3月,我開始系統地學習。net,我吃驚地發現,我原來想在c++中實現的許多功能,比如對象串列化為xml,在。net中已有現成的類可用,。net更把oo的功用發揮到了極致,它的混合語言開發,它的反射機制,它的新的自識別的軟體組件,以及強大好用的開發環境visualstudio,都讓我驚嘆微軟對開發者遇到的困難的深入把握,相比用c++開發,至少可以提高1/3的開發效率。於是一個新的想法產生了,我要把以前的產品用。net重寫,利用。net強大的組件模型,將設計模式理論推廣套用到組件級別,通過xml和反射機制建立一套可動態裝配的軟體生產流水線,實現象dell直銷pc那樣的軟體動態裝配直銷。只要建立好靈活可不斷重構的系統架構,配以對業務領域的深入分析,逐步建立功能強大的業務組件倉庫,就可以實現軟體系統的動態裝配。說乾就乾,我用vb。net重寫了原先用c++編寫的系統,將原先的一個exe變為十幾個dll,而且這些dll還會隨著發展而不斷地分裂,也有可能重新組合,利用refractoring不斷進化,最終形成一整套完備的行業軟體組件庫。做軟體關鍵因素是變化,只有適應變化的系統才是有生命力的。
我用兩個月的時間大體上弄清了。net平台下的主要類庫,然後又用兩個月的時間再次重新實現了期刊發行系統的c++版本的全部功能,到8月份我寫這篇文章之時,第一個產品里程碑已經完成。同樣的,除了需求是由另一個合作者去蒐集的之外,幾乎又是全部由我一個人包攬了所有的系統設計及編碼工作!
毫無疑問,我自覺得新系統要比老系統可維護性強得多,真正實現了徹底的全組件化系統開發,計畫再有一個月的界面美化,改正bug,引用多執行緒提高運行效率,最佳化系統結構,就可以提供給用戶試用了。市場如何,難說難測。
在開發過程中,我再次感到巨大的挑戰,不光是技術上的,更是管理上的。人才是我最頭痛的問題,沒有一流的人才,哪來一流的產品?我們找不到足夠水平的程式設計師一起合作我們要走的路還很長。也許我們開發的產品是失敗的,但我從來就沒指望能用這賺錢,我只是盡一個軟體開發者的責任而己,成敗已不重要!人生不嘗試,怎能體現人活著的價值?