這份書目的用意,是給你機會深入挖掘 XP 中你感興趣的面向。
哲學#
- Sue Bender,《Plain and Simple: A Woman’s Journey to the Amish》(HarperCollins, 1989)——更多並不更好;更少,可能也不更好。
- Leonard Coren,《Wabi-Sabi: For Artists, Designers, Poets, and Philosophers》(Stone Bridge Press, 1994)——XP 並不追求程式中某種超越性的完美。侘寂(wabi-sabi)是一種讚頌粗糙與實用的美學。
- Richard Coyne,《Designing Information Technology in the Postmodern Age: From Method to Metaphor》(MIT Press, 1995)——討論現代主義與後現代主義思維的差異,這條主線貫穿整個 XP。書中對隱喻的重要性也有極佳的討論。
- Philip B. Crosby,《Quality Is Free: The Art of Making Quality Certain》(Mentor Books, 1992)——打破四變數(時間、範圍、成本、品質)的零和模型。你無法靠降低品質讓軟體更快出門;你是靠提升品質讓軟體更快出門。
- George Lakoff and Mark Johnson,《Philosophy in the Flesh》(Basic Books, 1998)——更多關於隱喻與思考的精彩討論。書中描述「隱喻如何相互混合、形成全新隱喻」的方式,正像軟體工程思維中正在發生的事——那些取自土木工程、數學等領域的舊隱喻,正緩慢地變成一個獨屬於軟體工程的隱喻。
- Bill Mollison and Rena Mia Slay,《Introduction to Permaculture》(Ten Speed Press, 1997)——西方世界的高強度使用通常與剝削和耗竭相連;樸門(permaculture)是一門農耕紀律,追求透過簡單實踐的綜效達成可持續的高強度使用。特別有趣的是「大部分的生長發生在區域之間的交互作用處」這個想法:樸門用螺旋狀混植與邊緣極不規則的湖泊來最大化交互作用;XP 則用現場客戶與結對程式設計來最大化交互作用。
態度#
- Christopher Alexander,《Notes on the Synthesis of Form》(Harvard University Press, 1970)——亞歷山大的起點,是把設計視為解決相互衝突之限制的一連串決策,並由此導向進一步的決策去解決剩餘的限制。
- Christopher Alexander,《The Timeless Way of Building》(Oxford University Press, 1979)——書中描述的設計者/建造者與建築使用者之間的關係,與程式設計師和客戶之間的關係非常相似。
- Cynthia Heimel,《Sex Tips for Girls》(Simon & Schuster, 1983)——真誠的熱情是終極的技巧。有了它,其他一切都會各就各位;沒有它,免談。
- 《The Princess Bride》(Rob Reiner 導演, MGM/UA Studios, 1987)——「我們永遠活不著出去。」「胡說。你只是因為從來沒有人做到過才這麼說。」
- Field Marshal Irwin Rommel,《Attacks: Rommel》(Athena, 1979)——在看似絕望的處境下繼續前進的有趣範例。
- Frank Thomas and Ollie Johnston,《Disney Animation: The Illusion of Life》(Hyperion, 1995)——描述迪士尼的團隊結構如何隨年月演化,以應對變動中的業務與技術。書中還有許多給使用者介面設計師的好提示,以及一些非常酷的圖。
湧現式流程#
- Christopher Alexander, Sara Ishikawa, Murray Silverstein,《A Pattern Language》(Oxford University Press, 1977)——一個「意圖產生湧現性質的規則系統」的範例。這些規則是否成功可以爭論,但規則本身讀來饒富興味。書中對工作空間設計的討論也很精彩,只是篇幅太短。
- James Gleick,《Chaos: Making a New Science》(Penguin USA, 1988)——混沌理論的溫和入門。
- Stuart Kauffman,《At Home in the Universe》(Oxford University Press, 1996)——沒那麼溫和的混沌理論入門。
- Roger Lewin,《Complexity: Life at the Edge of Chaos》(Collier Books, 1994)——還是混沌理論。
- Margaret Wheatley,《Leadership and the New Science》(Berrett-Koehler, 1994)——回答這個問題:「如果我們把自組織系統理論當成管理的隱喻,會怎麼樣?」
系統#
- Gerald Weinberg,《Quality Software Management: Volume 1, Systems Thinking》(Dorset House, 1991)——一套用來思考「交互作用之行動所構成的系統」的體系與標記法。
- Norbert Weiner,《Cybernetics》(MIT Press, 1961)——對系統更深入、也更艱難的介紹。
- Warren Witherell and Doug Evrard,《The Athletic Skier》(Johnson Books, 1993)——一套關於滑雪的相互關聯規則系統。20–80 法則的出處。
人#
- Tom DeMarco and Timothy Lister,《Peopleware》(Dorset House, 1999)——繼《The Psychology of Computer Programming》之後,本書擴展了「程式是由人、特別是由人的團隊所寫」這個實務對話。這是作者「被接受的責任」這條原則的來源。
- Carlo d’Este,《Fatal Decision: Anzio and the Battle for Rome》(HarperCollins, 1991)——當自我擋住清晰思考時會發生什麼事。
- Robert Kanigel,《The One Best Way: Frederick Winslow Taylor and the Enigma of Efficiency》(Penguin, 1999)——泰勒的傳記,把他的工作放進一個有助於看清其思維侷限的脈絡中。
- Gary Klein,《Sources of Power》(MIT Press, 1999)——一本簡明易讀的書,講有經驗的人在困難處境中實際上是如何做決策的。
- Thomas Kuhn,《The Structure of Scientific Revolutions》(University of Chicago Press, 1996)——對某些人來說,XP 是一次典範轉移;而典範轉移有可預測的效應,這本書講了其中一些。
- Scott McCloud,《Understanding Comics》(Harper Perennial, 1994)——最後幾章談人們為何畫漫畫,這讓作者思考自己為何寫程式。書中也有關於「漫畫的手藝與漫畫的藝術」之連結的好材料,與寫程式的手藝(測試、重構)和寫程式的藝術相互對應;還有給使用者介面設計師的好材料——關於用事物之間的空白來溝通,以及在小空間裡塞進資訊而不顯雜亂。
- Geoffrey A. Moore,《Crossing the Chasm》(HarperBusiness, 1999)——從商業視角看典範轉移。不同的人會在 XP 演化的不同階段準備好採用它;有些障礙是可預測的,也有簡單的策略可以應對。
- Frederick Winslow Taylor,《The Principles of Scientific Management》(2nd ed., 1998;初版 1911)——催生「泰勒主義」的那本書。專業化與嚴格的分而治之,確實產出了更多更便宜的汽車。但依作者的經驗,這些原則作為軟體開發的策略毫無道理——在商業上沒道理,在人性上也沒道理。
- Barbara Tuchman,《Practicing History》(Ballantine Books, 1991)——一位深思的史家思考自己如何治史。如同《Understanding Comics》,這本書適合用來反思「你為什麼做你正在做的事」。
- Colin M. Turnbull,《The Forest People》(Simon & Schuster, 1961)——一個資源豐足的社會。作者的夢想,是在一支團隊之內創造出這種感覺。
- Colin M. Turnbull,《The Mountain People》(Simon & Schuster, 1972)——一個資源匱乏的社會。貼切地描述了作者待過的好幾個專案——他再也不想那樣活。
- Mary Walton and W. Edwards Deming,《The Deming Management Method》(Perigee, 1988)——戴明明確地把恐懼當作績效的障礙來處理。每個人都盯著統計品管方法,但書中關於人的情緒及其影響的內容其實很多。
- Gerald Weinberg,《Quality Software Management: Volume 4, Congruent Action》(Dorset House, 1994)——當你說一套做一套,壞事就會發生。 本書談如何讓自己言行一致、如何辨認他人的不一致,以及該怎麼辦。
- Gerald Weinberg,《The Psychology of Computer Programming》(Dorset House, 1998)——程式是人寫的。很驚人吧?更驚人的是還有多少人沒搞懂……
- Gerald Weinberg,《The Secrets of Consulting》(Dorset House, 1986)——引入變革的策略。對教練很有用。
專案管理#
- Fred Brooks,《The Mythical Man-Month》(Addison-Wesley, 1995)——讓你開始思考四個變數的故事集。 週年紀念版還收錄了圍繞著著名的〈No Silver Bullet〉一文的有趣對話。
- Brad Cox and Andy Novobilski,《Object-Oriented Programming—An Evolutionary Approach》(Addison-Wesley, 1991)——軟體開發之「電機工程典範」的源頭。
- Ward Cunningham, “Episodes: A Pattern Language of Competitive Development”(收於《Pattern Languages of Program Design 2》, Addison-Wesley, 1996)——XP 中許多想法最早就是在〈Episodes〉中找到表達的。
- Tom DeMarco,《Controlling Software Projects》(Yourdon Press, 1982)——關於創造並運用回饋來度量軟體專案的絕佳範例。
- Tom Gilb,《Principles of Software Engineering Management》(Addison-Wesley, 1988)——為演化式交付提出強而有力的論證:小發布、持續重構、與客戶密集對話。
- Ivar Jacobson,《Object-Oriented Software Engineering: A Case Driven Approach》(Addison-Wesley, 1992)——作者「用故事(使用案例)驅動開發」的來源。
- Ivar Jacobson, Grady Booch, James Rumbaugh,《The Unified Software Development Process》(Addison Wesley Longman, 1999)——哲學上,作者同意書中許多主張:短迭代、對隱喻的重視、用故事驅動開發。
- Philip Metzger,《Managing a Programming Project》(Prentice-Hall, 1973)——作者找得到最早的程式設計專案管理教材。裡面有些金塊,但視角是純粹的泰勒主義;而且 200 頁裡他只用了整整兩段談維護——與 XP 恰恰相反。
- Jennifer Stapleton,《DSDM Dynamic Systems Development Method: The Method in Practice》(Addison-Wesley, 1997)——DSDM 提供了一種「在不放棄快速應用開發之效益的前提下,把它納入控制」的視角。
- Hirotaka Takeuchi and Ikujiro Nonaka, “The new product development game”(Harvard Business Review, 1986)——一種共識導向的演化式交付途徑。其中有些關於「把 XP 擴展到更多程式設計師」的有趣想法。
- Jane Wood and Denise Silver,《Joint Application Development》(2nd ed., John Wiley and Sons, 1995)——JAD 引導者與 XP 教練共享同一套價值體系:引導而不指揮、把權力交給最懂如何做該決定的人,並最終淡出。JAD 聚焦於產出一份「開發者與客戶都同意可以且應該被實作」的需求文件。
程式設計#
- Kent Beck,《Smalltalk Best Practice Patterns》(Prentice-Hall, 1996)——謙虛使然,作者不予置評。
- Kent Beck and Erich Gamma, “Test Infected: Programmers Love Writing Tests”(Java Report, 1998 年 7 月)——用 JUnit(xUnit 測試框架的 Java 版)撰寫自動化測試。
- Jon Bentley,《Writing Efficient Programs》(Prentice-Hall, 1982)——「這東西一定不夠快」憂鬱症的解藥。
- Edward Dijkstra,《A Discipline of Programming》(Prentice-Hall, 1976)——程式設計即數學。 作者特別受到書中「透過程式設計追尋美」的強調所啟發。
- Martin Fowler,《Analysis Patterns》(Addison Wesley Longman, 1996)——做分析決策的共同詞彙。比設計模式更難吸收,但在許多方面更深刻,因為分析模式連結到業務中正在發生的事。
- Martin Fowler (ed.),《Refactoring: Improving the Design of Existing Code》(Addison Wesley Longman, 1999)——重構的權威參考。買它。研究它。用它。
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides,《Design Patterns》(Addison-Wesley, 1995)——做設計決策的共同詞彙。
- Donald E. Knuth,《Literate Programming》(Stanford University, 1992)——一種以溝通為導向的程式設計方法。維護文學式程式很痛苦,違反了「輕裝上路」原則;但每位程式設計師都該時不時寫一次文學式程式,好提醒自己「有多少東西需要被溝通」。
- Steve McConnell,《Code Complete》(Microsoft Press, 1993)——一項關於「你能在寫程式上投入多少心力而仍然划算」的研究。
- Bertrand Meyer,《Object-Oriented Software Construction》(Prentice-Hall, 1997)——契約式設計(design by contract)是單元測試的替代方案或延伸。
其他#
- Barry Boehm,《Software Engineering Economics》(Prentice-Hall, 1981)——思考「軟體要花多少錢、為什麼」的標準參考書。
- Larry Gonick and Mark Wheelis,《The Cartoon Guide to Genetics》(HarperPerennial Library, 1991)——圖畫作為溝通媒介的威力示範。
- John Hull,《Options, Futures, and Other Derivatives》(Prentice-Hall, 1997)——選擇權定價的標準參考書。
- Edward Tufte,《The Visual Display of Quantitative Information》(Graphics Press, 1992)——更多用圖像溝通數值資訊的技巧,適合用來理解「指標圖表怎麼呈現最好」。此外,這本書本身印製得非常漂亮。