程式設計的招式對打練習方案-Kata

「The Clean Coder (有中譯版)」一書內所提及的「程式設計柔道場 (Coding Dojo)」的理念很有意思:

「把每一段可用來模擬程式設計問題內的解決過程案例 (case study)稱為 Kata (對打),其最終目標就是在不斷的練習當中以達純熟的直覺反應式寫碼動作。」

每一個 Kata 都必須伴隨著 TDD (Test Driven Development)、亦即測試先行的反覆測試建置。

有個 Uncle Bob (Clean Coder 原作者)提供最經典的範例:「保齡球 (The Bowling Game)」,這個練習約約要 30 分鐘 (我是不太相信這麼短 !^^),在測試階段會經歷衝突,而後在建置階段達到高潮。

我這裡提供下所查詢到的一些討論 Kata 的文章與範例:
o http://katas.softwarecraftsmanship.org/
o http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata
o http://www.peterprovost.org/blog/2012/05/02/kata-the-only-way-to-learn-tdd/

爾後個人的實戰案例,例如「烏龜販售系統」,也打算以開源 (open-source)、簡單設計 (simple design)並整理成 Kata 的範例供學員們練習。藉此從其中學習到 Enterprise MVC、Service-Oriented、TDDRe-factoring 等觀念,透過草稿式的設計與直接程式寫碼階段來理解與應用。

[好書分享] Clean Code~無瑕的程式碼

無瑕的程式碼:敏捷軟體開發技巧守則 無瑕的程式碼:敏捷軟體開發技巧守則 (中譯本)
Clean Code: A Handbook of Agile Software Craftsmanship
-----------------------------------
作者:Robert C.Martin
譯者:戴于晉、博碩文化
出版社:博碩
ISBN:9789862017050
Amazon 評鑑:四顆半星

內容簡介
本書的原文書名為《Clean Code: A Handbook of Agile Software Craftsmanship》,根據作者的說法,《無瑕的程式碼》為Jolt得獎著作《敏捷軟體開發:原則、樣式及實務》的前傳。

在台灣另一本銷售極佳的書籍《重構─改善既有程式的設計》,根據亞馬遜Amazon網站的統計,購買該書原文版《Refactoring: Improving the Design of Existing Code》,又同時購買的其他書籍第一名,正是《Clean Code: A Handbook of Agile Software Craftsmanship》這一本書。

.第一章
作者開宗明義說明什麼是 Clean Code,他詢問了包含C++發明人 Bjarne Stroustrup、Eclipse 策略教父 Dave Thomas、極限程式設計大師 Ron Jeffries、維基與極限程式設計發明人,Ward Cunningham 等等的大師,從他們的眼光來描述什麼是 Clean Code,最後才說到作者本人認為的 Clean Code 應該長成什麼樣子,有什麼好處,以及學習撰寫Clean Code的基本原則。

最早知道這本書大約是前年 Ringle 已購買的原版書籍,並發現他常在課堂教授的空檔就津津有味地細讀該書,我想會吸引他如此認真閱讀絕對非同小可。不過當時我拿來略翻一下,有太多生活化的白話字彙 (如同極致軟體系列,但卻又更厚上太多),要翻查這些生字太吃力了些,故而放棄閱讀原文。沒想到國內出版社今年有相中該書,將之翻成中譯本,而且許多專業字彙還保留了原文的對應 (我很習慣軟體的原文字彙),讓我得以在兩個星期內就看完本書,而且到第10章以前 (約一半),可是逐字細讀。第10章以後,總感覺有些雜燴,有些是其他作者的論文,有些是原作者早期的文章,有許多主題已經是偏向程式開發領域的技術性議題,用來解釋「Clean Code」,我是覺得反而沒必要細讀,大略知道本意即可。

當時 Ringle 告訴我 Clean Code 的原則就是:每一個函式 (function, or method),不超過10行,最好是5行以內。天啊,這讓我很難以想像,我知道函式不能肥大,也不要有一堆的 if-then-else or switch 之類的判斷式,但如何縮短為只有10行以內的寫作,我也很難理解。不過細讀本書內容之後,總算能瞭解要如何作,當然,你更應該體會為何要這麼作。

簡而言之,程式寫作是一門「craftsmanship」,我還蠻喜歡中譯本將之翻為「工藝典範」。它既要精確,卻也期望將程式寫作昇華為具有美感的作品。我覺得,稍具有良心與審美觀的程式設計師,絕對不是只有滿足於「可以執行程式」。寫出來程式往往只是起點而已,持續不斷地精煉 (也就是重構),讓程式整潔,軟體才有可能具彈性與維護性。往往程式設計師只滿足於讓程式「順利運作」的狀態,有經驗豐富 (還有良心)的程式設計師,知道那其實是一種專業上的自殺行為。

所以,事實上,寫程式就如同寫散文一般,程式寫得艱澀冗長讓人無法理解,就代表散文寫作能力不佳。程式設計大師不認為他們在寫程式,而是在說故事。大師利用所選定的程式語言機制,來幫助建造更豐富更具表達力的語言,讓這個語言可以用來說故事。而簡短的函式,有意義的命名,以及漂亮的結構,則都有助於描述故事。

閱讀全文 »

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal