[翻譯]Bob大叔:反思極限程式設計

黃博文發表於2013-12-13

譯者注: Bob大叔14年後再次談論極限程式設計。極限程式設計經歷了14年的風風雨雨後,Bob大叔將會給它怎麼樣的定義那?

在我手中拿著的一本白皮薄書,在14年前徹底的改變了軟體世界。這本書的標題是解析極限程式設計,副標題是擁抱變化。作者是Kent Beck,出版時間為1999年。

這本書很薄,不到200頁。排版很寬,間隔很遠。寫作風格即自由散漫又平易近人。章節不多,概念簡單。

但是其影響卻像地震一樣,甚至至今震動仍未平息下來。

起始於第53頁的章節10,列出了12項實踐,引爆了行業內的大辯論。並催生了一場革命,改變了我們編寫軟體的所有方式。這些實踐是:

  • 計劃遊戲:當今被成為SCRUM。此觀點認為軟體應該按照任務列表中的優先順序循序漸進的開發。

  • 小版本:應當頻繁和漸進式地部署軟體。

  • 隱喻:該概念最終在Eric Evans編寫的《領域驅動設計》一書中明確化。系統結構應當建立在針對問題域的簡單的智力模型之上。

  • 簡單設計:任何時候都要保證系統儘可能的簡單,不用考慮對未來的擔心。

  • 測試:程式設計師和客戶一起編寫自動化測試來驗證產品程式碼的行為與預期一致。當今我們稱之為測試驅動開發(TDD)及驗收測試驅動開發(ATDD)。

  • 重構:軟體內部結構能夠並且應當被持續改進。

  • 結對程式設計:如果團隊成員各自單獨工作,那麼這稱不上一個團隊。真正的團隊需要經常通過鍵盤進行合作。這樣可以相互充分的分享知識, 正是團隊成員的義務。

  • 集體所有權:程式碼歸屬於整個團隊,而不是某個個體。

  • 每週工作40小時:經常加班的團隊是失敗的團隊。

  • 現場客戶:在團隊中加入一名真正的客戶,用於對需求負責,開發團隊能夠始終輕易的接觸到他。

  • 編碼標準:團隊應當使用一致的編碼風格保證程式碼整潔,易於溝通。

爭議?

很奇怪是不是?是不是並不是所有實踐都有爭議?但是14年前引起了瘋狂爭議。確實,整本書出版時,人們爭議書中的描述不可能應用於實踐,爭議所有擁護者是如何的必躬屈膝,不聽勸解,甚至是一行程式碼沒寫過的傻子……

呃,我不應當讓這些過去的感受壓倒我。因為,畢竟它們早已消失不再,而我們依然存在。

看看這12項實踐,你沒有踐行其中哪項?我溫柔的讀者中的大多數可能長期的踐行大多數實踐。如果說它們已經被普及肯定稍顯誇張,但是更不誇張的說,它們現在已經成為主流。更重要的是,還未踐行這些實踐的團隊至少在嘗試它們。這些實踐已經可以被完美的落地實施,而不再是一個被唾罵的異端。

崛起

過去的14年已經變得陌生。極限程式設計論戰催生出來的敏捷運動,飛速成功,隨後被專案經理接受,但是將程式設計師排斥在外。我們已經看到了確定性的、瘋狂的成功,以及相應的(可預見的)無力的認證。我們看到了只採用了計劃遊戲(例如SCRUM)而忽略其他11個實踐的策略失敗了。這種策略被Martin Fowler稱為無力的Scrum。我們已經經歷了諮詢師和作者分離的持續的推動,以及看板、精益及每一個新的專案管理方法的競爭。我們已經看到了軟體工藝運動的發展,以及敏捷基因被慢慢的退化和稀釋。

在所有的炒作和翻騰中,這12項實踐依然留存,只是其中一些名字有稍微改變。一週工作40小時變成了可持續增長率。測試變成了TDD。隱喻變成了DDD。小版本變成了持續整合和持續部署。但是儘管名稱改變,但是這些實踐依然和14年前描述的差不多。

我們也看到極限程式設計這個名稱幾乎完全不用了。極少數人現在還使用這個詞。一些人仍然使用XP這個縮寫,但名稱的大部分都已經消失。如果聽到一個團隊描述他們正在做的是極限程式設計,甚至正在踐行所描述的這12項實踐,我會覺得非常罕見。名稱變了,但是實踐未變。這些實踐是持久的。 在翻騰,炒作,爭議的咆哮和胡言亂語中,在人類爭奪一個又一個位置的風雨中,在人類的貪婪,激情和驕傲的雜亂中,在所有的政治中,這些實踐依然留存。

穩定的價值觀

我相信這些實踐這麼持久是因為他們基於穩定的價值觀這個堅實的基礎。Kent Beck在他的書中第7章第29頁描述了這樣的價值觀:

  • 溝通

  • 簡單

  • 反饋

  • 勇氣

我可以嘗試論證為什麼這些價值觀是正確的,但是我他們自身已經論證了這些。軟體工匠能夠拒絕這些價值觀中的任何一個嗎?軟體工匠能夠不努力爭取在工作中保證這些價值觀的展現嗎?這些價值觀正是軟體工藝的價值觀。

我可以嘗試辯論書中這12項實踐擁抱和體現了這些價值觀,但是這些實踐的永續性足夠證明,儘管圍繞這些實踐的名詞和運動已經消散。

成功

極限程式設計已經成功了!它成功的超越了其支持者的最瘋狂的夢想。它的成功是因為從誕生時的爭議中倖存下來,在不可避免的倡導者的流失中倖存下來。它成功了是因為它活的比自己的名字更久!

極限程式設計的成功正像結構化程式設計的成功。甚至沒人再會考慮結構化程式設計,因為他們一直在使用結構化程式設計。我們正在嘗試達到沒人再會考慮極限程式設計的目標。

這就是成功!一個想法從這場運動誕生一直存活到成為我們日常生活的一部分,這就是成功!

回顧

所以現在,2013年的最後幾個星期,我花了些時間回顧1999年。那個時間Kent Beck寫了一個突破性的書。這本書改變了一切。回顧並謹記:極限程式設計。簡單的說,請承認它是:

優秀的軟體實踐的核心

原文出處: http://blog.8thlight.com/uncle-bob/2013/12/10/Thankyou-Kent.html, 作者Uncle Bob Martin。

相關文章