十幾年軟體研發的滄桑歲月,和一度險瀕於破產的痛苦經曆,讓俺對軟體產品開發有了更深層的體會。新年到來之際,寫出來和大家作個交流。
一、農業境界
剛參加工作,朋友問我,你能用電腦幹啥?我口出狂言,只要你想得出來的,我都能做得到。其實,我說這話相當無知。
柏拉圖曾經說過,人的知識猶如一個圓,圓內是你已經知道的,圓外是你還不知道的,圓周就是你已經知道的還沒解決的問題。你的知識越豐富,這個圓就越大,圓的周長也越長,也就是你知道的沒解決的問題也越多。
如果你覺得自己沒有啥問題,就說明你很無知。
無數年輕人就是憑自己的熱情,初生牛犢不怕虎的衝勁,在完全沒有經驗和章法的情況下,投入了不會取得勝利的第一場戰鬥。通俗一點講,就是試圖用壘狗窩的技術建高樓大廈。
企業在這個階段,充其量就是個手工作坊。有人說,我的研發團隊上百號人呢。對不起,您是否出於這個階段和企業人數沒多大關係。
二、工業境界
瞭解到軟體產品設計研發是一個複雜的系統工程,很多人會嘗試運用一些必要的技術把複雜系統分解成簡單子系統。在這個階段,一些軟體工程理論開始逐步被吸收。這包括:
物件導向的設計思想
UML、RUP、XP編程、設計模式等軟體工程理論和工具
組件化系統設計——COM、DCOM、ActiveX、Corba、WebServices等技術開始進入產品設計
簡單地講,已經知道如何把高樓大廈拆解成多個狗窩,化繁為簡;已經懂得遵循軟體工業標準開發能重用的系統組件。
很多人以為已經到達軟體研發的終點,掌握了終極的技術手段。然而,這隻是軟體產品研發的啟蒙階段,隨著發現更多並解決深層次的問題,你需要更有效理論提升你對軟體產品開發的駕馭能力。
三、數學境界
工業化境界提供了化繁為簡的技術支撐和思路,但是,好的工具並不能保證出現正確的設計。
我們學習解一元二次方程的時候,什麼十字相乘法、配方法等等,開始會學習很多技巧性的解法。這類似工業化境界——讓你把複雜問題分解轉化成更簡單的問題。但是,這些技巧不總是有效,最終的解決方案還是推匯出求解公式,徹底解決此類問題。
軟體產品設計是否存在從需求到代碼的求解公式呢?這是一個已經被研究半個世紀的課題了,可惜國內99%的軟體研發人員並不瞭解這方面的進展。等到洋人的堅船利炮打到你家門口的時候,你才發現人家用這麼好的技術武裝自己,那就為時太晚了。
在這個階段,你會用數學方法保障軟體系統設計的正確性。你可能會把下面這些理論引入你的設計過程:
在系統設計中自覺運行有限狀態機器、Petri網等數學模型去設計、分析系統結構。
引進諸如淨室技術、B方法、Z語言等形式化軟體工程技術,確保系統設計的正確性。
最後你會發現,軟體產品設計真正是一件嚴格科學過程,如果以山野村夫的心態做這件事情,最終必然一塌糊塗。
四、藝術境界
人本質上是非理性的動物,我們為人類設計產品的最終目標不是為了正確,因此,數學境界並未把你帶到最終目的地。
人類還沒解決溫飽問題的時候,就學會了在岩石上塗鴉,在脖子上掛項鏈,為人類設計產品,得滿足他們這些貌似毫無價值的癖好。
因此,在能熟練駕馭正確設計產品的技能之後,軟體產品設計將為藝術而戰——我們不是在替客戶設計幹活的工具,相反,我們是在為他們設計一個吸引眼球的超級玩具,一件藝術品。
軟體產品設計師——你不僅僅是工程師,更進一步,你應該是一名駕馭高科技技術的藝術家!
五、宗教境界
阿克毛被槍斃了,他不是為科學而來,亦不是為藝術而來,而是為奪取我們的心靈而來!
之所以被槍斃,是因為他採取了文明社會不認可的手段和產品——海洛因。
異曲同工,軟體產品設計的最高境界亦是征服客戶的心靈,讓客戶像崇拜上帝一樣被您的軟體所征服。似乎除了海洛因,能做到這一點的就是宗教了。
看看IBM、看看微軟、看看Intel、看看蘋果,這些超級商業巨人,為了讓你把口袋的錢老老實實地掏出來,是不是一個個儼然一副佈道者的模樣?