HTML clipboard
卡爾.波普爾的理論能很好的解釋目前的科學, 藝術, 政治, 社會等方面一般性的問題.
它對軟件開發過程中一些顯而易見的問題有著明確的答案. 比如, 我們都知道我們無法證明軟件已經沒有Bug, 用波普爾的話說就是: 科學理論都是假說,
愛因斯坦的競爭理論表明對牛頓理論的即使如海王星發現般嚴格的檢驗都不能確保其正確性, 即對白天鵝的一千次觀察都不足以斷言黑天鵝的不存在.
能否證偽是科學和非科學的分界線.
而敏捷是軟件開發領域逐漸得到采用的理論和方法.
那敏捷這種具體領域的理論和實踐是否能夠與卡爾.波普爾一般性的哲學理論相契合呢?
若波普爾的理論是普適的, 能否指出敏捷的一些問題呢?
波普爾理論摘要:
<<卡爾.波普爾摘要:
科學的方法>>
<<卡爾.波普爾摘要:
客觀知識>>
<<卡爾.波普爾摘要:
三個世界>>
<<卡爾.波普爾摘要:
歷史決定論與歷史多元論>>
<<卡爾.波普爾摘要:
民主與專制>>
<<卡爾.波普爾摘要:
批評與理性主義, 懷疑主義, 以及啟蒙運動>>
<<卡爾.波普爾摘要:
寬容, 沖突, 以及多元論>>
<<卡爾.波普爾摘要:
知識分子, 科學家, 哲學家的職業道德>>
<<卡爾.波普爾摘要:
社會科學, 藝術, 及進化論>>
1. 波普爾強調無知, 可錯性, 和試錯法. 這導致了XP"反饋"的價值觀, 導致了迭代的實踐(迭代不是敏捷獨有的, 這說明迭代也是一種一般性的方法)
"""
諸神自始就未向我們昭示萬物的秘密,
但隨著時間的推移,
通過探索我們會學習并懂得更好的東西
"""
在解釋反饋的價值觀時, Kent Beck批評了"從一開始就選擇正確的方法, 不是更容易嗎"的想法:
關于試錯與迭代的關系, 參考<<敏捷質疑:
迭代開發>>
2. 波普爾認為我們應從問題開始, 然后提出一個初步的解決方案, 經過批評性討論, 前進到下一個問題. 這導致了測試驅動的開發
"""
整個過程可由我稱作四個一組的圖解的簡化的圖解表示:P1→TT→CD→P2[問題1→嘗試性理論→批評性討論→問題2]
我們可以從某個問題P1開始——無論理論問題還是歷史問題——接著做出嘗試性解答——推測的或假設的解答,一種嘗試性理論——把它提交按照證據進行的批評性討論,如果可得到證據的話,結果出現新的問題P2。
因此,科學的概貌就是:
-
我們選擇某個有趣的問題
-
我們提出一種大膽的理論作為嘗試性解決辦法
-
我們盡最大努力批評這種理論,這意味著我們試圖駁倒它
-
如果成功地駁倒了它,那么我們就試圖提出一種新的理論,我們又會對它進行批評
-
如此等等
這樣,即使我們沒有成功地提出一種令人滿意的理論,也會了解到許多東西:會了解到關于這個問題的一些情況,我們將知道它的困難所在。
"""
我們必須從失敗的測試開始, 這是我們要解決的問題. 完成初步的產品代碼使其可通過測試, 即初步解決了這個問題; 然后盡力批評產品代碼, 就是寫另外的測試,
爭取讓其失敗; 若失敗, 則進一步編寫產品代碼, 如此循環
這是典型的 TDD 循環, 除了重構. 那么重構在哪里?
3. 波普爾對更好的理論或科學進步的追求, 導致了重構
"""
沒有真理的標準, 但存在著科學進步的理性標準:
-
新的假定必須解釋舊的假定成功解釋的一切事物
-
必須至少避免舊的假定的一些錯誤,
即它在可能之處應能經得住舊的假定所不能經受的一些批判性檢驗
-
在可能之處, 它應當解釋舊的假定不能解釋或預言的事物
"""
這也是重構的標準:
-
重構必須保證不破壞原來的功能, 即新的假定必須解釋舊的假定成功解釋的一切事物
-
必須支持已經出現的一些原來代碼無法支持的擴展性需求, 或者消除舊代碼的一些可維護性方面的問題, 如重復代碼等
-
在可能之處, 支持一些就要出現的原來代碼無法支持的擴展性需求
在波普爾的P1→TT→CD→P2[問題1→嘗試性理論→批評性討論→問題2]循環中, 批評性討論總是導致了更好理論, 也導致了TDD過程中對重構的必然需求
4. 波普爾反對大詞, 反對晦澀難懂的表達, 崇尚簡單性. 這符合XP的價值觀, 甚至可以幫助修正人們對于XP"簡單性"價值觀的誤解
"""
每個知識分子都有一個很特殊的責任。他擁有學習的特權和機會。作為回報,他對于同胞(或對于社會)有責任盡可能簡單、清楚、謙虛地描述他的研究結果。知識分子所做的最糟的事情——主要罪過——是試圖對同胞自命為偉大的預言家,給他們留下令人迷惑的哲學的印象。任何不能簡單、清楚地講話的人都應住口,繼續下些功夫,直至能這樣做為止
我在上面(第1點)所說的主要罪過——受過不充分教育的人的傲慢——簡而言之,就是夸夸其談,佯裝具有我們所不具有的智慧。它的訣竅是:同義反復和瑣屑之事再加上自相矛盾的胡言。另一個訣竊是:寫下一些幾乎無法理解的夸大的言詞,不時添加一些瑣屑之事。這會受到高興地在如此“深奧”的書中發現自己原也具有這樣的思想的讀者的喜愛。(現在任何人都能看到皇帝的新裝正在流行?。?/p>
我認為,每個知識分子的責任就是意識到他所處的優越地位。他有責任盡可能把文章寫得簡單明白,而且盡可能用規范的形式寫;永遠不要忘記那些困擾著人類而且要求用新的大膽而耐心思考去處理的重大問題,不要忘記那種承認自己所知甚少的蘇格拉底式的謙虛。與處理瑣碎問題的瑣碎哲學家不同,我認為哲學的主要任務就是批判性地沉思宇宙和我們在宇宙中的地位,這也包括我們的認識能力以及我們行善和作惡的能力
叔本華最明智的意見之一(雖然這可能并不是他最有獨創性的意見)是:“在一切藝術中……簡單性是必不可少的……;至少忽視它始終是危險的。”我想,他指的是對一種簡單性的追求,而我們尤其可在偉大作曲家的主題中看到這種簡單性。例如,我們從《后宮誘逃》可以看出,最后的結果可能是復雜的,但莫扎特仍然可以驕傲地回答約瑟夫皇帝:其中沒有一個多余的音符
"""
基本上可以認為波普爾反對華麗的過度設計
有一種觀點, 認為簡單就是用最直白的方式實現功能, 然而如果是這樣, Kent
Beck又怎會把簡單看作XP價值觀中最具智力色彩的一個? 這里波普爾給出了相似的觀點: 最后的結果可能是復雜的,但莫扎特仍然可以驕傲地回答約瑟夫皇帝:其中沒有一個多余的音符
5. 波普爾對啟蒙運動的贊賞, 對理性批評的支持, 對寬容的要求, 也與XP對勇氣,
尊重等價值觀的推崇一致
"""
敢于顯示智慧!要敢于運用自己的理智. 這就是啟蒙運動的口號
你可能是正確的,我可能是錯誤的;即使我們的批評性討論不能使我們明確決定誰是正確的,我們仍會希望在討論后對事情看得更清楚。我們都可以互相學習,只要我們不忘記,真正重要的不是誰正確,而是我們更接近真理
寬容是認識到我們人的可錯性的必然結果:人孰無過,我們一直在犯錯誤。因此讓我們互相諒解對方的愚行。這是天賦人權的第一個原則
"""
6. 波普爾對文化沖突的喜好, 對多元論的執著, 最大程度的支持著代碼集體所有與結對編程
"""
他們將歡迎與來自另一個世界、另一個框架的伙伴進行的討論,因為它給予他們一個機會,去發現他們迄今尚未感覺到的枷鎖,打碎它們,從而超越自己。當然,沖破牢房不是常規的事情:它只能是批評的努力——創造性努力——的結果.
非常明顯,這種自我解放的、沖破此刻的牢房的理想,又會成為一個框架或一個牢房的一部分——換言之,我們永遠不會絕對自由。但是我們可以拓寬我們的牢房,至少能拋開甘受束縛的人的狹隘性
當兩種或更多的不同文化相接觸時,人們認識到他們長久以來認為理所當然的風俗習慣不是“當然的”,不是唯一可能的風俗習慣,既不是上帝所頒布的,也不是人性的一部分。他們發現他們的文化是人及其歷史的杰作。從而它開辟了充滿種種新的可能性的世界:它打開了窗子,放進了新鮮空氣。這是一種社會學的規律,解釋了許多東西,它在希臘歷史中無疑起了重要的作用
這個猜想是,這種沖突未必總是導致流血的戰斗和破壞性戰爭,而可能也是富有成效的和促進生命的發展的原因。它甚至會導致像希臘文化那樣的無可匹敵的文化的發展
"""
7. 波普爾理性批評的態度, 又指導著如何處理結對編程中常見的問題
"""
如果相碰撞的文化之一認為自己優越于所有文化,那么文化碰撞就會失去其一些價值,如果另一種文化也這樣認為,則尤其如此:這破壞了文化碰撞的主要價值,因為文化碰撞的最大價值在于它能引起批評態度的事實
。尤其是,如果其中一方相信了自己不如對方,那么,如信仰主義者和存在主義者所常常描述的那樣,向另一方學習的批評態度就會被一種盲目接受、盲目地跳入新的魔圈或者皈依所取代。
你可能是正確的,我可能是錯誤的;即使我們的批評性討論不能使我們明確決定誰是正確的,我們仍會希望在討論后對事情看得更清楚。我們都可以互相學習,只要我們不忘記,真正重要的不是誰正確,而是我們更接近真理
嚴肅的批評性討論總是困難的??倳A雜進一些人類的非理性的成分。理性的即批評性的討論的許多參加者都感到,要擺脫人們在辯論會中染上的習氣特別困難,他們必須了解,在一場辯論中獲勝是微不足道的,只有澄清人們的問題,只有促進人們對自己的觀點或其對手的觀點的進一步理解,哪怕是最輕微的澄清和最微小的促進,才是巨大的成功。如果你在一場討論中獲勝,但它未能幫助你至少稍微改變或澄清你的思想,那么你應把它視為純粹的損失
"""
8. 波普爾關于客觀知識的理論, 也可以從另一個角度指導我們正確的對待結對過程中的意見不一致
"""
用語言表達我們的思想,或者更好一些,把它們寫下來,是大不相同的。因為這樣它們就成為可批評的了.
在這之前,它們是我們自身的一部分。我們也許有懷疑。但是我們不能以批評一個用語言系統闡述的命題,或者更好一些,寫下的報告那樣的方式批評它們。因此,“知識”至少有一種重要的意義——“提交批評的用語言系統闡述的理論”的意義。這就是我所稱的“客觀意義上的知識”
知識本質上在于體外人工制品,或產物,或制度
"""
當我們說出我們的觀點, 或者更進一步, 寫出代碼來表達我們的觀點, 讓它們成為客觀知識,
有助于我們把批評聚焦在問題上, 而不是針對人
結對是最直接的批評, 這也暗含著任何一方不是在教導, 而是在接受批評
9. 這里有一個有趣的推論. 批評是波普爾理論的核心手段, 實際上意味著溝通是XP的核心價值觀,
結對是XP的核心實踐
比如, 波普爾認為: "客觀性, 不能依靠科學家本人的客觀性來保證,
必須依靠批評:可被描述為科學的客觀性的事物完全建立在批評傳統之上,這種批評傳統總是不顧任何反對,使人們能批評占統治地位的教條。換言之,科學的客觀性不是個別科學家的事情,而是相互批評的社會結果,科學家中友好與敵對的分工的社會結果,他們的合作的社會結果,也是他們的競爭的社會結果"
那么XP中對類似"簡單性"之類的要求, 也必須建立在批評的基礎上, 不能依靠單個開發者的決定,
必須至少是結對, 輪換結對來完成, 代碼必須集體所有
10. 波普爾對框架神話的反對, 指導者如何處理采用敏捷開發過程中價值觀不一致的問題,
敏捷與其它軟件開發過程理論的碰撞問題
組織內部價值觀一致, 事情自然順利的多. 對于大部分情況下的組織價值觀不一致,
波普爾有另一個角度的觀點: 順利的不意味著是富有成效的, 最終取得一致意見也不意味著是富有成效的; 參與者學到的越多, 越富有成效. 這意味著:
向他們提出的有趣的問題和困難的問題越多, 吸引他們思考的新的答案越多, 他們的觀點越是發生動搖, 以及討論之后他們越是能對事物有不同看法. 簡言之,
他們的知識視野越是開闊
結論就是波普爾認為在不同的框架間進行討論, 是困難的, 但不是不可能的
波普爾主張批評的多元論,
即為了尋求真理,應允許所有理論--多多益善——與所有其他理論競爭。這種競爭在于對理論的理性討論,在于對它們的批評性淘汰。討論應當是理性的--這意味著它應當關注相競爭的理論的真理:在批評性討論過程中似乎更接近真理的理論是更好的理論,更好的理論取代了較差的理論。因此正是真理的問題利害攸關
因此, 哪怕你最終全面接受了敏捷, 在此之前, 應有一個理性討論和實踐的階段, 而不是迷信.
這也意味著, 在推行敏捷的時候, 哪怕你全面否定了之前的軟件開發理論, 在此之前, 也應該有一個理性討論的階段, 而不是盲從. 順利和一致是好事,
但可能錯過發現更好理論的機會
手里有波普爾這個錘子, 到處都是釘子. 另請參閱其它牽強附會之作:
<<敏捷外傳>>
<<姑蘇慕容與軟件開發>>
<<獨孤九劍與軟件開發>>