Posted on 2005-12-28 23:15
canonical 阅读(976)
评论(0) 编辑 收藏 所属分类:
杂感
敏捷(Agile)开发的灵魂是演化(evolution),其具体的过程表现为迭代(iteration),迭代的每一步就是重构
(refactor),而单元测试(unit test)与持续集成(continuous
integration)模拟了程序生存的环境(约束),是merciless
refactoring的技术保障。从数学上我们知道迭代总有个收敛问题。一些重型方法将变化(无论是正方向还是反方向的)等价于风险,而倾向于消除开发
中的不确定性,其中的迭代是趋于迅速收敛的。敏捷的迭代是开放式的,强调拥抱变化。敏捷编程排斥过度设计,除了过度设计会增加成本之外,另一个原因就是过
度设计会阻碍重构,阻碍变化。敏捷的目标不是僵化的稳定性而是灵活的适应性。当然敏捷迭代本身并不能保证系统持久的适应性,即使是自然界中的迭代和演化,
失败的案例也是比比皆是。大量的生物物种在经历了历史的辉煌之后最终仍然难免被岁月所埋葬。
在哲学上,一个悖论式说法是有存在于无中,或者说简单才能更复杂。杯子是空的,所以能包容万物。现在什么都没做,将来才能根据需要决定如何去做。所谓鱼与
熊掌不可兼得,一旦做出了选择,可能意味着必须放弃将来进行其他选择的机会。简单的目的不仅仅是为了最快的完成当前的任务,而且要为将来保留变化的可能。
过分强调目的性,我想是违背了演化的本质。高手过招,最忌把招数用老。我们所要做的是尽量推迟决定的时刻,并切实的保证自己随时拥有选择的权利。
多样性是在演化中生存的关键。但多样性不是后天的。生物学的实验证实,物种的变异并不是环境变化后发生的,而是始终存在着并隐藏着,环境仅仅起了检选和倍
增的作用。适应性的系统总要允许一定的灰色地带,有时do something for nothing.