看板 CSSE 關於我們 聯絡資訊
※ 引述《tinlans ( )》之銘言: : pattern 不是沒寫過程式的人一開始需要學的, : 而是要先寫過很多結構爛爛的程式, : 自己認真思考過怎樣改比較好一段時間後, : 才適合開始去學來用的東西。 : 對於撰寫需要抽象化的程式部分來說, : 比較沒經驗的,剛下手一定是結構紊亂的程式碼, : 稍有經驗的,剛下手會是比較有規律性,但欠缺抽象化的程式碼, : 很有經驗的,一下手可能就是很抽象化的程式碼,但不是任何已知的 pattern, ^^^^^^^^^^^^^^^^^^^^^^ : 超有經驗的,一下手通常就會是 pattern。 實際上已知的 pattern 是極多的,記得以前有人列出了超過兩百個。 傳說中集合 256 個 pattern 就能解決一切問題 XD (這個傳說應該是因為 Pattern Language 列出了 253 個建築用的 pattern, 非常接近 256 這個電腦的"吉祥數" ^^) Design Patterns 一書所列出的,其實是集中在 design 層次,並且加以簡化 整合的結果。 原本 pattern language 的關鍵,就在於以 pattern 為思考的主要元素,並 不斷發現與整合 pattern, 而不是把 pattern 限制為特定幾個。 當然,儘量運用較多人熟悉的 pattern 有助於軟體的共同合作開發。只使用 少數 pattern 的效益也是很明顯的,這是 Design Patterns 一書的成功,但 讓許多人以為世界上的 pattern 就是那幾種,也是它的原罪。 另外,就 pattern 而言,其實並不是只有 design pattern 一類,我想,應該 可以分為以下幾類的 pattern: 1. patterns for software architecture 大約包括了 architecture patterns, requirement patterns, ananysis patterns, conceptual patterns, data model patterns 等等細類或不同 名稱。 2. patterns for software design 除了 Design Patterns 列出的 generic patterns 之外,還有特定用途的 patterns, 例如針對 communication / network / parallel computing / distributed computing / database management 等等特定程式設計方向的 patterns. 3. patterns for programming 在 POSA (Patterns of Software Architecture) 一書中稱為 Idioms, 是 較低階的 patterns, 主要是一些慣用的程式設計方式。有些人認為應該要 分成 coding patterns 和 programming patterns, 不過這主要是名詞的 差異問題而已。 現在很多人因為只知道 Design Patterns 一書所列出的 patterns, 而將三種 不同層次的 patterns 都用少數 generic design patterns 來處理,造成學習 和使用上的負擔,其實那是沒有必要的,若能善加利用不同層次的 patterns, 可以得到更有效的開發。 4. patterns for business process 由於商業處理的複雜性,以及相關開發經驗的累積,近年來不斷有人提出 business process patterns 的重要性,也就是 pattern 的概念,不應該 只限於程式邏輯,或是通用的軟體結構分析,也適用於商業流程的分析處理 才對。這可能還不是成熟的方法,但發展潛力頗值得觀察。 5. patterns for organization 這大概是最為抽象化的 patterns 了,它嘗試著解決「創新」和「組織」的 問題,主要是針對需要高度創新的軟體組織,如何從人事和工作的組織上就 引入 pattern 的概念。 關於這部分,我的認識有限,似乎 Organizational Patterns of Agile Software Development 一書頗受推崇,可以參考看看。 pattern language 是一種針對人類認知和思維方式而建立的新方法論,從建築 開始逐漸滲透到各個領域上,試圖為人類的創新活動建立一個可以依循的理論, 而 Design Patterns 是過去的一個里程碑,但人們繼續在往前走,未來也還有 許多路要走。 將 Design Patterns 列出的 patterns 做為軟體開發訓練中的一個重要成分, 是一個值得嘗試卻可能不適合冒進的方法。所謂「叔叔有練過小孩子不要亂學」 確是很好的註解。 不過,更適合的比喻,或許還是武功吧, design pattern 如同劍法一般,要先 打好基礎才可以學,劍都拿不穩的,就不用想學劍法了,而學的時候應該要好好 學習,學成之後則不要自限於劍招而不知變通。 不求劍招只求劍意也可以,而且可能更能得到劍法的真意,然而,你最好是非常 聰明,不然高不成低不就的,會很辛苦。 此外,我相當推薦 Pattern-Oriented Software Architecture 這套書,目前有 三本。其中第一本也得到 1996 Jolt Awards 的生產力獎。 它除了強調 architecture patterns, 很有力地補充 Design Patterns 的不足 之外,最重要的概念,應該就是 pattern catelog 和 pattern system 的分別, 許多人運用 pattern 實際上只是在把 pattern 當作一種軟體結構的形錄,沒有 適當地從系統的觀點來結合 pattern, 使它們能相互支援和整合。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.136.160
godfat:感動 02/10 01:08
YuYuHo:大大可不可以把這些好書翻成中文ㄚ,弱者英文超破,很難看懂. 02/10 23:12
jeonjh:名稱查一下就好了,這些都算基本!要加強一下英文吧?... 02/16 14:02