Posted on 2005-12-28 23:15
canonical 閱讀(991)
評(píng)論(0) 編輯 收藏 所屬分類:
雜感
敏捷(Agile)開發(fā)的靈魂是演化(evolution),其具體的過程表現(xiàn)為迭代(iteration),迭代的每一步就是重構(gòu)
(refactor),而單元測(cè)試(unit test)與持續(xù)集成(continuous
integration)模擬了程序生存的環(huán)境(約束),是merciless
refactoring的技術(shù)保障。從數(shù)學(xué)上我們知道迭代總有個(gè)收斂問題。一些重型方法將變化(無論是正方向還是反方向的)等價(jià)于風(fēng)險(xiǎn),而傾向于消除開發(fā)
中的不確定性,其中的迭代是趨于迅速收斂的。敏捷的迭代是開放式的,強(qiáng)調(diào)擁抱變化。敏捷編程排斥過度設(shè)計(jì),除了過度設(shè)計(jì)會(huì)增加成本之外,另一個(gè)原因就是過
度設(shè)計(jì)會(huì)阻礙重構(gòu),阻礙變化。敏捷的目標(biāo)不是僵化的穩(wěn)定性而是靈活的適應(yīng)性。當(dāng)然敏捷迭代本身并不能保證系統(tǒng)持久的適應(yīng)性,即使是自然界中的迭代和演化,
失敗的案例也是比比皆是。大量的生物物種在經(jīng)歷了歷史的輝煌之后最終仍然難免被歲月所埋葬。
在哲學(xué)上,一個(gè)悖論式說法是有存在于無中,或者說簡(jiǎn)單才能更復(fù)雜。杯子是空的,所以能包容萬物。現(xiàn)在什么都沒做,將來才能根據(jù)需要決定如何去做。所謂魚與
熊掌不可兼得,一旦做出了選擇,可能意味著必須放棄將來進(jìn)行其他選擇的機(jī)會(huì)。簡(jiǎn)單的目的不僅僅是為了最快的完成當(dāng)前的任務(wù),而且要為將來保留變化的可能。
過分強(qiáng)調(diào)目的性,我想是違背了演化的本質(zhì)。高手過招,最忌把招數(shù)用老。我們所要做的是盡量推遲決定的時(shí)刻,并切實(shí)的保證自己隨時(shí)擁有選擇的權(quán)利。
多樣性是在演化中生存的關(guān)鍵。但多樣性不是后天的。生物學(xué)的實(shí)驗(yàn)證實(shí),物種的變異并不是環(huán)境變化后發(fā)生的,而是始終存在著并隱藏著,環(huán)境僅僅起了檢選和倍
增的作用。適應(yīng)性的系統(tǒng)總要允許一定的灰色地帶,有時(shí)do something for nothing.