2009年10月1日 星期四

Q35: 為何有些軟體工程師與電腦科學家能夠產生清楚而且優美的設計與程式,但其他人卻不能?關鍵在於抽象觀念。Jeff Kramer

Why is it that some software engineers and computer scientists are able to produce clear, elegant desings and programs, while others cannot? Critical to these questions is the notion of abstraction. Jeff Kramer (CACM 50(4), 2007, pp.36-42).



諺語提供:黃為德教授

7 則留言:

  1. Programmer 不斷的練習就是為了做更好的抽象吧, 並不容易

    回覆刪除
  2. 這則諺語比較抽象,所以略作補充。

    何謂抽象?依照ISO 10746-2的定義,抽象是『隱藏不相關的細節』(the suppression of irrelevant detail),這項定義在不同的環境下有不同的詮釋,例如分析時抽象是處理類別的「知」與「做」,包括與應用有關的責任(responsibilities)、屬性與作業元,譬如學生類別,它知道它的名字與地址,但可能隱藏目前沒有興趣的身高與體重,因此細節須視與應用是否相關而定,在『談談設計原則DIP』一文時,我引述Christopher Alexamder的"complexification"一詞,其意義是說軟體發展過程應先有「觀念」(conceptual)再逐漸增加細節與功能,這就是抽象觀念的運用。如果你要使用model-driven方式如MDA發展軟體,你必須先創作高抽象層次的模式如Platform Independent Model(PIM),再逐漸轉換成程式,這也是抽象觀念的應用。至於樓上匿名說:「Programer不斷練習‧‧‧」,我想這並非諺語所稱的抽象觀念,諺語所指的抽象觀念應該是指發展軟體的過程(process)如上所舉。

    回覆刪除
  3. 「抽象化方法」是人類認識事物的方法,同樣適用於觀念的表達。當我們思考,會將焦點放在我們關心的或認為重要的特性上,而忽略其他無關的屬性。「重要性」代表的是通則,也因此才有重複使用的機會。有些軟體工程師與電腦科學家在設計軟體時,有經驗的對於「需求」脈絡掌握度較高,能在開始瞭解實作問題只不過只是一般化下(General)的特殊(Special)變形,甚至推論可能的各種變形,因而做出適當的抽象化安排。

    回覆刪除
  4. 有些人可能對軟體發展中的所謂「抽象」有所誤解。舉例來說,如果你出國要搭乘計程車去機場,你大慨會向計程車司機說:「我要去機場」,而不是說:「請向左轉,直走200公尺再向右轉‧‧‧」,但是要去機場的確須要左轉、直走、右轉‧‧‧等等,你跟司機溝通只抽象地講「去機場」即可。這就是「隱藏不相關的細節」的意思,在日常生活中,這種抽象的表達方式比比皆是,不足為怪,只不過這種抽象表達方式要應用在發展軟體的過程中,必須要訓練一番,因此我引用Chritopher Alexander的"complexification"一詞來說明。

    我想抽象無所謂「太」不太的說法,更非等同「嘴炮」不著邊際,只不過將現階段不想顯示的東西隱藏,也就是說一種「包封」(encapsulation)(在軟體發展中包封是很重要的觀念)。

    回覆刪除
  5. 這裡的'abstraction'翻譯成'抽象化的概念'似乎比'抽象概念'好些。

    回覆刪除
  6. "notion of abstraction"翻成「抽象化的觀念」未嘗不可,不過我認為Jeff Kramer的意思是指廣泛的抽象觀念,可以是現象,也可以是動作,如果指動作,則翻成「抽象化的觀念」,這要看你/妳應用這句諺語的目的而定。

    回覆刪除

注意:只有此網誌的成員可以留言。

追蹤者