軟體設計「本質性(Essential)」思維

最近,我們 HSDc. 與文化大學教育推廣部合作舉辦「軟體設計」系列的課程。

三個層次的課程:基礎養成班、實務應用班(J2EE and .NET)、專案管理應用班。
拿牛肉麵來做比喻好了,你可以點半筋半肉、純牛肉或是純牛筋的口味;相互對應,以上三個課程,可以點 “半虛半實”、”純實務”、”純虛” 三種不同的風味。 😉

前兩個課程的主要目的在於:

  • 軟體設計是非常生活化,不會是純工程、枯燥無味的。
  • 軟體設計與程式設計是一體兩面,是可以很流暢地整合在一起。
  • 最重要的一點,是希望藉由課程,來引導(Drive)學員反思的能力。

其中,關於基礎養成與實務應用班的課程內容及行銷的文宣是由我個人所規劃及撰寫的。

據此課程內容及文宣,文大教育推廣部印刷了很精美的課程簡報手冊,也準備辦一系列的課程說明會,來說明軟體設計課程的範疇與實務應用等,相當有心想推廣。

手冊的主題,是寫著「軟體設計思維」,副標題是物件導向觀念、UML 2.0 與 J2EE 及 .NET。

我個人對於那一個 “新思維” 的 “新” 字,到有點意見。

軟體設計並非是 “新思維”,也不是 “新技術”,我最想要引導的是,讓學員們能具備反思的能力,來觀察與體會軟體設計的 “本質性思維“,就只是回歸到最單純的基本面而已。

為什麼?我發現到,太多軟體人員被淹沒在所謂的新技術洪流之中了。為追逐新的工程技術,花了很多的時間在學程式語言面的語法及應用框架的系統功能與設定,或將 UML 視為是做文件的技術、把物件導向,視為是一種方法論(methodology)或一種技術。
在這樣的情況下,往往被迫要選擇是學 .NET 或者是 J2EE 的 Solution,因為,要都能精通,似乎是不可能有這樣的精力來學習的。

結果,許多軟體人員忘卻了人與生俱有的天賦:反思。相對地,也就無法去體會軟體最具本質性的那一面了。

我很喜歡 “本質” 這個字彙,尤其,英文的字彙 “Essential”,更是傳神。

舉個例,從軟體 “善變” 的角度來看時,抽離出三個最重要的本質:抽象(abstraction)、封裝(encapsulation)與介面(interface)。
用心體會與觀察這三個本質,會是收斂軟體 “善變” 程度的重要關鍵。

有趣的是,許多軟體開發者,會想去學 “Design Pattern”,但是,光第一個關鍵,”封裝”,在系統的設計與實做卻是處處違背。

例如,兩個應用系統,因實體資料庫是在同一個位置,所以,為了方便及效率的問題,直接就近撈資料處理,而不是嚴謹地將資料庫確實在邏輯層面分隔開來,透過應用系統的介面來呼叫。
這種案例,多不勝屬。那麼,即使學會許多 “Pattern”,卻連最基本的原則都無法遵循,又有何用呢?

把握住最重要的幾個本質性(Essential)原則,越少越好,但要更加嚴謹地遵守及更用心地去觀察與體會。會發現到,實體的程式語言,或應該稱之為系統的應用平台基礎建設(infrastructure)的技術如 .NET and J2EE 等,在本質面幾乎是相近的。

學習及觀照從本質面來觀察事物,再去印證現實的許多 IT 技術。由內往外,就會發現到,學習的心態與角度會有別於僅從表面看事物,很容易就可以觸類旁通。學習及瞭解所謂的 “新技術” 更是輕而易舉了。

文章導覽

   

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。