今日早上(星期六),過去文化大學教育推廣部教授一整天「軟體設計基礎課程」,同時也是第一次文化大學教育推廣部針對軟體設計系列的課程開課。

廣告、行銷、口碑等,效果還沒有打出去,報名上課的學員僅 10 餘位。

基礎課程,強調的就是最基本對軟體設計應有的正則思維,這是我常一直強調的。最起碼的一個思維就是不能只是重視系統的使用介面與需求,這是屬於系統的外觀範疇。
而我個人,更為重視的是,系統內部的結構分析與設計。

至於重視結構的分析與設計,目的只有一個:侷限(或為收斂)需求變化在某一局部上,不會因變動的因素而牽動到整個系統,造成全面的癱瘓。

而這也正是系統複雜的本源,也可以說是複雜度就是系統的本質,這是避開不掉的。

為了處理複雜度,運用物件導向思維帶入軟體設計領域內,我是覺得再自然與再恰當不過了。
因為,物件導向不是技術,也不是方法論,它就是我們人原本就是以這種本質性的思維來看待與處理世界與周遭的事物。所以,我們只是改掉不自然的程序性(Procedual-based)的開發方式,而回歸至最單純的本質性思維,應用生活的哲理與智慧來處理複雜性系統的開發。

關於物件導向的思維,其中最精要的幾個哲理,包括了:

  • 複雜度的根源與觀點
  • 物件(Object)與類別(Class)
  • 概念(Concept)與抽象(Absstration)
  • 封裝(Encapsulation)
  • 介面(Interface)與多型(Polymorphism)
  • 物件之間的關係:關聯(Association)、Whole-part、繼承(Inheritance)

說真的,坊間一般談論物件導向的書籍,對於上述這些哲理的解釋,我仍覺得不足以協助我來教授這些哲理,尤其,我更需要凸顯的是,不是先從軟體的角度來看待上述這些哲理,而是因為這些哲理本來就存在現實生活及其它成熟領域上。所以,要解釋這些術語(Terminology),非從程式語言、非從 UML、非從語法定義(Definition)來看待,而是藉由純生活化的實例來做說明與解釋,然後再映對至軟體的設計模型及程式語言上。我覺得,這樣才不致本末倒置。

讓學員瞭解這些再自然不過的哲理後,再去教導學員如何將軟體設計的想法利用 UML 來表達。此時,才會開始介紹相關 UML、開發流程(Development Porcess)的基本觀念,再後續的課程,又會逐漸地說明如何活用 UML 圖表達軟體設計的想法,並利用現實的實際案例來做研究探討。當然,同時會產出 .NET 與 Java 的程式碼,來藉此說明在高階系統設計中,是確實可以與系統平台分離的。

我非常強調基本功夫的鍛鍊,而基本功夫的鍛鍊最最重要的是引導學員們具備反思的能力,這也代表了要能懂得去觀察,觀察什麼?就是觀察生活周遭的事物,觀察、反思、體會、表達…透過這些反覆過程,就會越能去參透反映在軟體系統設計上蘊藏於內的 “哲理與本質”。

這種過程,不是去找答案,一般軟體人員,太習慣也太依賴於去找答案。這種方式,正是讓一般軟體人員頭腦僵化的主因。反過來,要找的是問題,找的問題越多、問的問題越多、思考的問題越多,也不怕犯錯、也不怕羞。
就像小孩子這樣,經常保持高度的好奇心與觀察力,自然就會有旺盛的學習力。從不會去想問的問題是否會幼稚。如此,才會更容易促進思維的活化,就會有自己內心的體會,而能講出自己的 “話”;不是只單單去背那些坊間技術書籍的 “標準答案” 了。

我想表達的這些觀念,有留在我的腦袋,但還沒有以文字把它更條理分明的記錄下來。又,我所建議採用的書籍,包括參考書籍等,無法協助我去表達上述這些觀念。

所以,今天是採用口說的方式,佐以白版的來畫圖與文字說明,也沒有用到電腦,也沒有用到教材。就這樣,講了約五個鐘頭,授課教材的頁數是 “0” 。呵,這好像也創了我的紀錄。

當然,短期內我就會把這些想法與觀念寫下來,訴諸於文字要花很多的時間去仔細推敲用詞與合理性,這會比較吃力。但,這也是必然要做的事。