敏捷開發(fā)的推理

1 評論 3556 瀏覽 26 收藏 11 分鐘

我查閱了一下敏捷開發(fā)相關的資料,結合我長期對敏捷開發(fā)的實踐,我將對敏捷開發(fā)的本質進行一次探討。本文我打算理清敏捷開發(fā)的核心,并由核心衍生出它的價值觀。我希望能夠通過拋出本文這塊磚,能夠引出高手的玉來。

符合現(xiàn)實的軟件

軟件是為著解決現(xiàn)實的問題而產生的。從而軟件存在的意義就是與現(xiàn)實相適應。敏捷開發(fā)的核心即:符合現(xiàn)實的軟件。一個符合現(xiàn)實的軟件,才能夠可持續(xù)地與現(xiàn)實共同發(fā)展。一旦軟件與現(xiàn)實背離,軟件的生命周期也就到了結束的時候了。

現(xiàn)實的世界是動態(tài)變化的,人類造出來的東西,往往是落后于世界的變化的。如,地圖造出來之后,可能又多修了幾條路,幾個建筑;剛買了一款高配置的計算機,幾個月后,自己的機器配置又處于被甩的地位了……這些變化,人是被迫要去接受。因為這些東西屬于硬件,人在目前還無法輕易地改變硬件。

而與此不同的軟件,則是另外一種現(xiàn)象了。改變軟件的代價是相當?shù)土?。改變軟件,實際上只是改變硬盤上的磁性。改變軟件的容易性,帶來的結果是: 一、軟件開發(fā)者容易以自己的想象來決定軟件怎么做。 開發(fā)出一個無用的軟件,比起因為出錯而要毀掉待出售的10萬張地圖,比起因為工藝漏洞而要招回已經出售的計算機來講,代價太低廉了。 二、軟件更加具備符合現(xiàn)實的條件。 開發(fā)者讓軟件與現(xiàn)實相適應,所要付出的代價非常低廉。

所以,敏捷開發(fā)的核心就是符合現(xiàn)實的軟件。為了造出符合現(xiàn)實的軟件,才有了進一步的價值觀及方法論。

簡單

簡單,是在人認識到事物的本質的時候才能夠獲得的。在開發(fā)軟件的時候,我們往往疲于應付各種各樣的需求。很少有人能夠將復雜的需求化為簡單的概念。比如,做一個音樂軟件,有“我喜歡的”、“最近播放”、“最新添加”等不同的性質的歌。有些開發(fā)者會做出三個列表來存放三種性質的歌。而實際上他們的本質是一樣的,即播放列表。區(qū)別在于觸發(fā)加入播放列表的條件不同而已。因而只需要做一個列表,在列表中標記每首歌的觸發(fā)條件。

把軟件做得很復雜,通常說明軟件所抓住的本質還很少。需要再好好考慮一下如何進一步進行簡化。軟件的概念簡單,一方面可以讓用戶很容易理解和操作;另一方面能夠適應世界的變化。再拿以上的音樂軟件來說。如何做成三個列表,再要加一個“聽了又聽”的歌,又得創(chuàng)建一個列表。而使用一個列表的方法,則只需要處理“聽了又聽”這個觸發(fā)條件。

符合現(xiàn)實的軟件必然是簡單的。所以,敏捷開發(fā)的第一條價值觀是:簡單。我們在實施敏捷開發(fā)的時候,都是圍繞“簡單”這一價值觀而進行實施的。即,時刻保證軟件的簡單性。簡單性包括兩個方面:一是對于用戶而言,概念很簡單;二是對于開發(fā)者而言,開發(fā)的技術及代碼很簡單。

軟件的可持續(xù)性也取決于軟件是否簡單??沙掷m(xù)性是指,快速響應現(xiàn)實的變化。一個復雜的軟件,要么讓用戶無所適從,要么讓代碼無法維護。這都將導致軟件無法持續(xù)。這會迫使我們以制造硬件的方式來開發(fā)軟件。硬件是在迫不得已的情況下才丟掉重新升級(計算機在實在沒有辦法用的時候,才買新的),要讓軟件也這樣做,軟件開發(fā)低廉代價的優(yōu)勢就白白浪費掉了。

反饋

一個軟件要符合現(xiàn)實,就需要通過現(xiàn)實的反饋來發(fā)展。軟件前進的動力是現(xiàn)實的反饋。敏捷開發(fā)是歡迎現(xiàn)實,擁抱變化的開發(fā)。強調該條價值觀,是為了消除開發(fā)者容易犯的錯誤——以自己的想象去決定軟件怎么做。

因而,在做一個軟件之前,首先要找到能夠給出反饋的人。如果連能夠給出反饋的人都沒有,那么這個軟件就沒有做的必要了。

反饋的重要性,更可以這樣說:矛盾推動事物的發(fā)展。反饋是指出不足的矛,軟件是彌補不足的盾。在矛的不斷攻擊之下,盾才能不斷完善。矛之不存,盾何以壯。

在方法論上面,敏捷開發(fā)強調快速發(fā)布版本,取得現(xiàn)實的反饋而不是開發(fā)者大腦中自己想像的反饋。如果開發(fā)者正好也是使用者,那么軟件做成的幾率就要大很多。開源軟件大多數(shù)都是開發(fā)者自己要解決問題而產生的。

溝通

溝通是開發(fā)者取得反饋的手段。一個優(yōu)秀的開發(fā)者,是善于溝通的。溝通包含口語、寫文檔等各種方式。優(yōu)秀的開發(fā)者應該能夠清晰而有條理地表達自己的想法。

現(xiàn)實世界中,人們普遍認為:軟件開發(fā)者因為跟機器打交道,從而是內向的,不善于溝通的。實際上,這樣的開發(fā)者不能算是優(yōu)秀的。他們所做的事情,更多地是把需求轉化為計算機語言的工作,即翻譯員。而現(xiàn)在都出來谷歌翻譯了,人類語言翻譯成計算機語言只是時間問題了。

溝通的目的是進行思想碰撞。在溝通當中了解別人的思維方式,表達自己的思維方式,進一步揚棄為更加優(yōu)秀的思維方式。在優(yōu)秀的思維方式之下才能保持讓自己與現(xiàn)實相符合。優(yōu)秀的開發(fā)者是不會放棄獲取優(yōu)秀的思維方式的機會的。

在敏捷開發(fā)當中,提出這一價值觀,正是要開發(fā)者變得優(yōu)秀。放棄優(yōu)秀的開發(fā)者無法適應敏捷開發(fā)。

勇氣

在現(xiàn)實生活中,缺乏勇氣比較常見。比如,不敢大大方方地表白,不敢嘗試新的事物……在軟件開發(fā)領域,缺乏勇氣更是常見:技術更新好幾代了,公司還不敢使用新技術;公司不敢嘗試新的開發(fā)模式(敏捷開發(fā))……

勇氣,本質上來講,是對現(xiàn)狀的否定。人們往往一廂情愿地相信永恒;一旦確定,就不愿意改變。這正是勇氣的用武之地。勇氣使人去否定永恒,擁抱改變。勇氣是創(chuàng)造的源泉。人沒有勇氣,人就永遠是他現(xiàn)在的這樣了,正是勇氣才迫使他去改變。

在開發(fā)的時候,我們可能花了很多時間寫了很多代碼,但要決定放棄已經寫過的所有代碼,這是非常需要勇氣的。而如果能夠做到這一點,在軟件開發(fā)上就占據(jù)了非常有利的位置。比如,我們可能會花大量時間去寫頁面原型,以希望能夠得到用戶反饋。在確定得到用戶反饋之后,我們可以完全放棄原型代碼,進而可以得到更加符合現(xiàn)實(也更加簡單)的代碼。

敏捷開發(fā)強調勇氣這一價值觀,正是要開發(fā)者去擁抱現(xiàn)實的變化,讓開發(fā)者及軟件朝著符合現(xiàn)實的路線走。

迭代開發(fā)

講完四個價值觀之后,接下來我把四個價值觀聯(lián)系起來,得到一個方法論——迭代開發(fā)。

 

如圖所示,簡單是軟件開發(fā)的起點,也是軟件開發(fā)的終點。

說它是起點,是因為,如果開發(fā)的東西還是復雜的,那就有必要把概念弄得簡單一些。這包含兩個方面的行動:一、把復雜的系統(tǒng)砍掉一半的功能(廣度上);二、盡可能對各個功能進行抽象(深度上,參考前面音樂軟件的例子)。

接下來,我們拿著簡單的軟件(或者軟件原型)進入溝通環(huán)節(jié)。我們可以在兩個方面進行溝通:一、與用戶溝通軟件的邏輯是否滿足要求;二、與開發(fā)者溝通軟件是否在技術上代價很高,如何權衡。

溝通之后,我們可以得到現(xiàn)實的反饋,在現(xiàn)實的反饋之下,我們才有勇氣進行改變,使用我們的軟件繼續(xù)維持其簡單性。這就完成了軟件的一個迭代。

結束語

敏捷開發(fā)不僅是一種開發(fā)方法,更是訓練自己心智的手段。敏捷開發(fā)所訓練的是:讓人做符合現(xiàn)實的事情。在做這樣的事情的時候,人更尊重的是活生生的現(xiàn)實而非權威(你尊重現(xiàn)實),人得到的是對現(xiàn)實敏銳的反應能力(現(xiàn)實回敬你禮物)。

原文鏈接:http://www.cnblogs.com/1si2/p/enter_agile.html

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 你好棒

    來自廣東 回復