用科學的思維方法指導軟體的設計開發

killer發表於2007-08-16
在J道潛水很久了,看到了很多精華的文章,精彩的討論,著實使我受益非淺。從學習專業知識的角度上說,斑竹banq極力倡導培養oo思想,並且提出了java學習的三件寶(領域建模、模式、框架),及時跟蹤先進的思想和技術,站在業界的前沿,這也是我多年來的軟體開發中深有體會的,可以說我和J道是有思想上的共鳴,相信很多道友也有這樣的感受。從做人做學問的態度上來說,也讓我感受到了道友們的真誠以及斑竹banq的熱情,正因為這樣,才能有許多精彩精湛的討論,在這樣的各種觀點的摩擦下才能碰撞出智慧的火花出來,從而結出理論與思想的果實。
但是,現在仍然看到有很多的道友對一些問題都還是比較迷惑的,具體該如何培養oo思想?如何進行領域建模?如何搭建框架?這些問題都不是一兩句話能說得清的,需要在實踐中循“道”而為(“道”的概念banq已經說過了,不過還是建議把道的鼻祖《老子》先看個大概!^_^),直至道人合一,大道至簡!我今天在這裡只是站在前人的肩膀上把軟體開發設計中的技術和方法提升到科學思維方法論,哲學邏輯方法論的高度,希望對各位道友在循道前進的過程中有所幫助,順利到達大道的目的地!
方法是非常重要的,好的方法能起到事半功倍的效果,相信大家都有體會,簡而言之,方法就是為了達到一定的目的而採取的手段,方法可以分為多個層面的方法,首先是具體的方法,如一道數學題的多種解題方法,其次是各學科、行業的專業方法,如物理的方法,數學的方法,建築的方法,等等,再就是科學思維的方法如抽象和具體的方法,分析和綜合的方法,邏輯和歷史的方法等等,最高層次的就是哲學的
邏輯方法了,如辯證法。前兩個層面的是具體的方法,後兩個層面的是抽象的方法。我在這裡要說的主要是後兩個層面的方法。
科學的探索需要科學的思維方法,那麼在我們的軟體開發設計中,最重要的是要培養怎麼樣的科學思維方法呢?其實從“思維”兩個字中,我們也可以領悟到一些東西,“思”即是思考,比較容易理解,關鍵在“維”字,“維”其實是角度的意思,我們經常說的三維空間,就是從x,y,z三個軸的角度來看空間,再加上一個時間維的話就是我們所賴以生存的動態時空了。所以我們的思維一個很重要的元素就是要從多角度看問題,角度決定深度。對映到我們的科學思維方法的話就是其中的發散性思維方法,發散思維是非常重要的,是分析問題的一個利器,但是也要從哲學的高度加以辯證法來把握,那就是必須輔以收斂思維從頂端予以控制,沒有收斂的無限發散就容易成為無邊的空想幻想,雜亂,沒有發散的收斂又將成為呆板僵硬的死腦筋。
下面說一下前面提到的幾個問題,先說說如何培養oo思想,oo思想最需要什麼樣的思維方法呢?oo的核心是抽象,我想這個應該沒有太大的爭議。抽象,就是抽取事物一些本質的東西,剔除次要的表面東西,但是千萬別忘了後面那個象字,那就是抽取之後還得讓事物象原來的事物,我們很多人在軟體設計中抽取類的時候往往就是抽而不象,變了形,最終不能滿足使用者的需求。抽象也是一種重要的科學思維方法,同樣,抽象也必須從哲學辨證法的高度輔以具體的科學思維方法,是一個感性具體到抽象再到理性具體的過程,感性具體到抽象是解決“抽”的問題,抽象到理性具體是解決“象”的問題。而我們的抽象往往只是抽而不象,就是缺少或者忽視了後一個環節的原因,而且我們的抽象也往往是孤立的,沒有發散性地從多個角度進行抽象。
再說一下如何進行領域建模,領域建模又需要什麼樣的科學思維方法呢?現實的事物是變得越來越複雜了,太複雜了也往往就很難直接理解和把握它了,於是我們就先建立它的模型,然後研究模型以代替直接研究事物本身,所以這個模型也就不能太失真了,否則研究結果也就跟現實相距甚遠了。我們也經常能見到各種模型,如城市模型,汽車模型,輪船模型等等,這些模型都是一些實物模型,比較好理解,也比
較好建立,我們姑且把它歸為物理模型。還有一類模型就是邏輯模型或是抽象模型,比如模擬一個城市的行政系統等,我們所說的領域建模也是建立一種邏輯模型,即對企業某一功能系統建立模型。建立領域模型需要模型化的思維方法,模型化的思維方法也是一種重要的科學思維方法,而且起著越來越重要的作用。模型化的思維方法綜合了其他很多的思維方法,首先,它需要從整體出發來把握系統,這就需要用到系統的思維方法,其次,它需要從各個層面,各個角度考慮系統,得到原型的對映,這就需要發散和收斂的思維方法,如分析與綜合,猜想與概括,等等,在對實體,流程建模時又需要用到抽象和具體的方法。在一些細節問題的處理上還經常用到比較,分類,類比等方法,數學的方法。整個領域的建模需要從全域性著眼,從區域性著手。
對於如何搭建框架的問題,主要是要運用系統的思維方法,整體觀要強,從多角度多層面把握系統的框架,所以說發散性思維的培養是非常重要的。而且在搭建系統框架的過程中,逆向科學思維方法也是非常重要的,在軟體設計中,我們都希望能搭建出一個靈活、可擴充套件、可維護的框架來適應需求的變化,根據老子的“將欲歙之,必固張之,將欲取之,必先與之”,反者道之動,所以我們從反面出發,運用逆向
思維方法,找出系統的不變的,相對較為固定的東西,沉澱出來即為框架,而且是靈活的框架。這其實也蘊涵了辯證法的哲理在裡面。
恩格斯說過,一個民族要想站在科學的最高峰,就一刻也不能沒有理論思維的指導,這句話對於我們的軟體開發也是同樣適應的,所以,我們要培養科學的思維方法,哲學的方法,這是各種具體問題解決方法的本源,有了這樣的思維武器,是要少走許多彎路的。
博學而詳說之,將以反說約也,希望道友們能夠深入淺出,出博返約,放得出去,收得回來,象張無忌學太極那樣最終忘掉那些招示,達到忘我,道人合一的境界,練就一身軟體開發設計的太極功!
說了那麼多,其實也沒說清楚,權當是拋磚引玉,望能與banq及廣大道友共同討論,共同進步,共勉!祝j道越辦越好!

相關文章