敏捷方法論:極限編程,一次反思
本文的作者Robert C. Martin,也就是大名大名鼎鼎的“uncle bob”
在我手里的是一本很薄的白皮書,14年前,它顛覆了整個(gè)軟件世界。這本薄書就是:《Extreme Programming Explained》,副標(biāo)題是:擁抱變化。作者是Kent Beck,出版于1999年。
這本書不到200頁,很小。字體印刷的很大,而且留白很多。撰寫風(fēng)格很隨意,通俗易懂。章節(jié)很短。里面提出的概念很簡單。
這本書的思想猶如一次地震,而且震撼至今仍無減弱跡象。
第十章,位于53頁,陳列了12條軟件開發(fā)實(shí)踐指導(dǎo),它讓軟件業(yè)陷入了大論戰(zhàn);并催生了一次革命,由此改變了我們軟件開發(fā)過程的各個(gè)方面。這些實(shí)踐方法是:
- 計(jì)劃游戲:如今的SCRUM敏捷方法論的原型。核心概念是拆分軟件開發(fā)任務(wù),排優(yōu)先級(jí),迭代式增量開發(fā)。
- 小規(guī)模發(fā)布:主要思想是軟件發(fā)布/部署應(yīng)該提高頻度,增量發(fā)布/部署。
- 簡單設(shè)計(jì):是指讓系統(tǒng)保持越簡單越好——無論將來的變化會(huì)讓我們?nèi)绾螕?dān)憂。
- 測試:是指程序員,甚至客戶,應(yīng)該編寫自動(dòng)化測試程序,來驗(yàn)證產(chǎn)品代碼是否是按設(shè)計(jì)的方式運(yùn)行。如今我們把它稱作測試驅(qū)動(dòng)開發(fā)(TDD)和確認(rèn)測試驅(qū)動(dòng)開發(fā)(ATDD)。
- 重構(gòu):是指軟件的內(nèi)部結(jié)構(gòu)可以、并且應(yīng)該做持續(xù)的改進(jìn)。
- 結(jié)隊(duì)編程:是說團(tuán)隊(duì)成員如果各自獨(dú)立工作就不能稱之為團(tuán)隊(duì)。團(tuán)隊(duì)成員必須有規(guī)律的合作——在鍵盤上。這樣,他們能充分分享團(tuán)隊(duì)其他成員應(yīng)該知道的知識(shí)。
- 集體所有制:是指代碼歸團(tuán)隊(duì)共有,不屬于個(gè)人。
- 每周工作40小時(shí):是說經(jīng)常加班的團(tuán)隊(duì)是失敗的團(tuán)隊(duì)。
- 現(xiàn)場客戶:是指來自業(yè)務(wù)方、負(fù)責(zé)需求的人,必須有準(zhǔn)備的全程和開發(fā)團(tuán)隊(duì)保持暢通交流。
- 編碼標(biāo)準(zhǔn):是指開發(fā)團(tuán)隊(duì)要采用一種固定的代碼風(fēng)格,用來提高代碼整潔和方便交流。
引起爭議?
很奇怪,不是嗎?這些看起來似乎沒有任何爭議呀。但在14年前,這些思想普遍受人質(zhì)疑。事實(shí)上,它們是如此的受人反對(duì),以至于有人專門出版書籍來反駁這些實(shí)踐方法如何不可行,并斥責(zé)這些倡導(dǎo)者為烏托邦、騙錢者、從未寫過一行代碼的蠢貨…..
哦,抱歉,我不應(yīng)該讓這些過去的事情控制我的情緒….畢竟,他們都消失了,而我仍在這里。
看一下這12條實(shí)踐指導(dǎo),哪一個(gè)你沒用過?你們大部分人,我親愛的讀者,很可能每天都在實(shí)踐著大部分這些原則。夸張的說,它們已經(jīng)無處不在,保守的說,它們現(xiàn)在已經(jīng)是主流。越來越多的沒有采用這些實(shí)踐方法的團(tuán)隊(duì)正在試圖擁抱它們。這些實(shí)踐方法成為了一種目標(biāo),一種愿望,而不是當(dāng)初被人謾罵的異教。
風(fēng)云變幻
這14年來事情發(fā)展的有些意外。敏捷開發(fā)運(yùn)動(dòng)——在極限編程大討論中誕生的運(yùn)動(dòng)——迅速爆紅,隨后被一些什么身份都有、唯獨(dú)不是程序員的項(xiàng)目經(jīng)理們視為圣經(jīng)。我們看到了這場運(yùn)動(dòng)的誕生,廣泛接受,以及可以預(yù)見到的理想與現(xiàn)實(shí)的落差。我們看到了人們采納“計(jì)劃游戲(planning game)”方法(例如SCRUM),但卻忽略了其它11個(gè)實(shí)踐方法;于是我們看到了實(shí)施中的失敗——這被Martin Fowler稱之為氣虛的Scrum。由于理論和實(shí)踐的分裂,我們爆發(fā)了各種的口水仗,導(dǎo)致Kanban,Lean,以及其它新名詞相互競爭。我們看到了軟件工藝運(yùn)動(dòng)的成長,也看到了敏捷思想的淡化和蛻變腐蝕。
但是,盡管有人在炒作,有人失望的離去,這12條軟件開發(fā)實(shí)踐指導(dǎo)卻從未離去。有些名稱上有了小改動(dòng)。每周工作40小時(shí)變成了可持續(xù)性比率(Sustainable Rate)。測試變成了測試驅(qū)動(dòng)開發(fā)(TDD)。比喻(Metaphor)變成了DDD。小規(guī)模發(fā)布編程了持續(xù)集成和持續(xù)部署。盡管有這些變化,這些實(shí)踐方法仍然基本保留著它們14年前***次被寫出來時(shí)的主旨。
我們也看見了極限編程這個(gè)詞慢慢完全淡出了人們的視野,不再被人使用。現(xiàn)在只有為數(shù)不多的人知道這個(gè)術(shù)語。有一些人還在用它的簡稱XP;但對(duì)大多數(shù)人來說,這個(gè)詞已經(jīng)蒸發(fā)殆盡了。我已經(jīng)聽不到有團(tuán)隊(duì)把他們的編程方法描述為極限編程——即使他們是完整按照這12種指導(dǎo)實(shí)踐的。名稱變了,實(shí)踐方法沒變。這些實(shí)踐方法論永存。
爭議,炒作,恐嚇,大話,唱衰。這種亂象一遍又一遍重演。混雜著人們的貪婪,熱情和驕傲。不管怎樣,這些實(shí)踐方法論永存。
堅(jiān)實(shí)的價(jià)值基礎(chǔ)
我是這些實(shí)踐方法論的信徒,因?yàn)槲抑浪鼈冇兄鴪?jiān)實(shí)的價(jià)值基礎(chǔ)做支撐。Kent Beck在他的書里的29頁第七章里把這些價(jià)值描述為:
- 交流
- 簡化
- 反饋
- 鼓勵(lì)
我想去解釋為什么我們的軟件開發(fā)需要這些;但我想它們已經(jīng)不言自明了。沒有哪個(gè)軟件行業(yè)的人會(huì)拒絕其中的任何一條。沒人哪個(gè)軟件人不在努力將這些價(jià)值體現(xiàn)在他們的工作中。它們是軟件開發(fā)藝術(shù)的核心價(jià)值。
成功
極限編程是成功的!它比那些***幻想精神的擁護(hù)者的想象里的還要成功。因?yàn)樗?jīng)受住了考驗(yàn)。因?yàn)樗踔帘人约旱拿只畹母L久。
極限編程的成功類似于結(jié)構(gòu)化編程的成功。沒有人還會(huì)去想結(jié)構(gòu)化編程——他們從來都是使用這種編程方式。沒有人再去想極限編程,我們一直都在這樣實(shí)踐著。
這才叫成功!真正的成功是一種身形不在,但它的精神已經(jīng)融入到我們每個(gè)人的日常生活中的成功。
回顧
今天,讓我們抽出一點(diǎn)時(shí)間回顧一下1999年。那一年,Kent Beck寫出了一本曠世之作。一本改變一切的著作。請(qǐng)記住:極限編程,并且要知道,它正是我們?nèi)缃竦娜似匠UJ(rèn)為的“優(yōu)秀軟件開發(fā)實(shí)踐方法”的核心。
英文原文:Extreme Programming, a Reflection
譯文鏈接:http://www.vaikan.com/extreme-programming-a-reflection/