卡尔.波普尔的理论能很好的解释目前的科学, 艺术, 政治, 社会等方面一般性的问题. 它对软件开发过程中一些显而易见的问题有着明确的答案. 比如, 我们都知道我们无法证明软件已经没有Bug, 用波普尔的话说就是: 科学理论都是假说, 爱因斯坦的竞争理论表明对牛顿理论的即使如海王星发现般严格的检验都不能确保其正确性, 即对白天鹅的一千次观察都不足以断言黑天鹅的不存在. 能否证伪是科学和非科学的分界线. 而敏捷是软件开发领域逐渐得到采用的理论和方法. 那敏捷这种具体领域的理论和实践是否能够与卡尔.波普尔一般性的哲学理论相契合呢? 若波普尔的理论是普适的, 能否指出敏捷的一些问题呢? 波普尔理论摘要: <<卡尔.波普尔摘要: 科学的方法 >><<卡尔.波普尔摘要: 客观知识 >><<卡尔.波普尔摘要: 三个世界 >><<卡尔.波普尔摘要: 历史决定论与历史多元论 >><<卡尔.波普尔摘要: 民主与专制 >><<卡尔.波普尔摘要: 批评与理性主义, 怀疑主义, 以及启蒙运动 >><<卡尔.波普尔摘要: 宽容, 冲突, 以及多元论 >><<卡尔.波普尔摘要: 知识分子, 科学家, 哲学家的职业道德 >><<卡尔.波普尔摘要: 社会科学, 艺术, 及进化论 >>
1. 波普尔强调无知, 可错性, 和试错法. 这导致了XP"反馈"的价值观, 导致了迭代的实践(迭代不是敏捷独有的, 这说明迭代也是一种一般性的方法)
在解释反馈的价值观时, Kent Beck批评了"从一开始就选择正确的方法, 不是更容易吗"的想法:
关于试错与迭代的关系, 参考<<敏捷质疑: 迭代开发 >>
2. 波普尔认为我们应从问题开始, 然后提出一个初步的解决方案, 经过批评性讨论, 前进到下一个问题. 这导致了测试驱动的开发
我们必须从失败的测试开始, 这是我们要解决的问题. 完成初步的产品代码使其可通过测试, 即初步解决了这个问题; 然后尽力批评产品代码, 就是写另外的测试, 争取让其失败; 若失败, 则进一步编写产品代码, 如此循环 这是典型的 TDD 循环, 除了重构. 那么重构在哪里?
3. 波普尔对更好的理论或科学进步的追求, 导致了重构
这也是重构的标准:
在波普尔的P1→TT→CD→P2[问题1→尝试性理论→批评性讨论→问题2]循环中, 批评性讨论总是导致了更好理论, 也导致了TDD过程中对重构的必然需求
4. 波普尔反对大词, 反对晦涩难懂的表达, 崇尚简单性. 这符合XP的价值观, 甚至可以帮助修正人们对于XP"简单性"价值观的误解
基本上可以认为波普尔反对华丽的过度设计 有一种观点, 认为简单就是用最直白的方式实现功能, 然而如果是这样, Kent Beck又怎会把简单看作XP价值观中最具智力色彩的一个? 这里波普尔给出了相似的观点: 最后的结果可能是复杂的,但莫扎特仍然可以骄傲地回答约瑟夫皇帝:其中没有一个多余的音符
5. 波普尔对启蒙运动的赞赏, 对理性批评的支持, 对宽容的要求, 也与XP对勇气, 尊重等价值观的推崇一致
6. 波普尔对文化冲突的喜好, 对多元论的执着, 最大程度的支持着代码集体所有与结对编程
7. 波普尔理性批评的态度, 又指导着如何处理结对编程中常见的问题
8. 波普尔关于客观知识的理论, 也可以从另一个角度指导我们正确的对待结对过程中的意见不一致
当我们说出我们的观点, 或者更进一步, 写出代码来表达我们的观点, 让它们成为客观知识, 有助于我们把批评聚焦在问题上, 而不是针对人 结对是最直接的批评, 这也暗含着任何一方不是在教导, 而是在接受批评
9. 这里有一个有趣的推论. 批评是波普尔理论的核心手段, 实际上意味着沟通是XP的核心价值观, 结对是XP的核心实践 比如, 波普尔认为: "客观性, 不能依靠科学家本人的客观性来保证, 必须依靠批评:可被描述为科学的客观性的事物完全建立在批评传统之上,这种批评传统总是不顾任何反对,使人们能批评占统治地位的教条。换言之,科学的客观 性不是个别科学家的事情,而是相互批评的社会结果,科学家中友好与敌对的分工的社会结果,他们的合作的社会结果,也是他们的竞争的社会结果" 那么XP中对类似"简单性"之类的要求, 也必须建立在批评的基础上, 不能依靠单个开发者的决定, 必须至少是结对, 轮换结对来完成, 代码必须集体所有
10. 波普尔对框架神话的反对, 指导者如何处理采用敏捷开发过程中价值观不一致的问题, 敏捷与其它软件开发过程理论的碰撞问题 组织内部价值观一致, 事情自然顺利的多. 对于大部分情况下的组织价值观不一致, 波普尔有另一个角度的观点: 顺利的不意味着是富有成效的, 最终取得一致意见也不意味着是富有成效的; 参与者学到的越多, 越富有成效. 这意味着: 向他们提出的有趣的问题和困难的问题越多, 吸引他们思考的新的答案越多, 他们的观点越是发生动摇, 以及讨论之后他们越是能对事物有不同看法. 简言之, 他们的知识视野越是开阔 结论就是波普尔认为在不同的框架间进行讨论, 是困难的, 但不是不可能的 波普尔主张批评的多元论, 即为了寻求真理,应允许所有理论--多多益善——与所有其他理论竞争。这种竞争在于对理论的理性讨论,在于对它们的批评性淘汰。讨论应当是理性的--这意 味着它应当关注相竞争的理论的真理:在批评性讨论过程中似乎更接近真理的理论是更好的理论,更好的理论取代了较差的理论。因此正是真理的问题利害攸关 因此, 哪怕你最终全面接受了敏捷, 在此之前, 应有一个理性讨论和实践的阶段, 而不是迷信. 这也意味着, 在推行敏捷的时候, 哪怕你全面否定了之前的软件开发理论, 在此之前, 也应该有一个理性讨论的阶段, 而不是盲从. 顺利和一致是好事, 但可能错过发现更好理论的机会
手里有波普尔这个锤子, 到处都是钉子. 另请参阅其它牵强附会之作: <<敏捷外传 >> <<姑苏慕容与软件开发 >> <<独孤九剑与软件开发 >> |
|