2009年2月12日星期四

色即是空,空即是色,TDD,Software Design

有幸成为Craig Larman大师的host,在大师来访的这三个星期安排大师的行程,聆听大师的教诲。Craig Larman是全球敏捷方法与软件分析设计领域颇有名气的大师。大师言行非常严谨,讲究研究与调查,从不空谈所谓“opinion”。这里几天打算随笔罗列些大师的名言,作为记录。其中自然会隐去一些和公司产品相关的内容,以免不必要的麻烦。

这天和一些在用TDD(Test-Driven Development)方法进行开发的工程师做讨论,说到了软件设计的问题。我们是否应该在开始实现,或者说开始写代码之前做Design?
Craig Larman引用禅宗至理(Zen Buddhism)来比喻软件设计:
“Before enlightenment, mountains are mountains and rivers are rivers. During enlightenment, mountains are no longer mountains and rivers are on longer rivers. After enlightenment, mountains are still mountains and rivers are still rivers.” (高深吧-_-!)

回去查了一下,“enlightenment”即佛家所讲的“悟”,孙悟空的悟。汗一个先。我想那意思就是说:我们刚接触Software Design时,感觉它也就是那么点事情,很自然。可当我们悟出一些软件的道理后,忽然发现Design已经不是Design了,变得非常复杂让我们无能为力,所谓“色即是空”。这时我们不是过份Design就是没了Design。等我们大彻大悟之时,发现,Design其实还是那么点事情,即所谓“空即是色”。这似乎与前几天在电视上见到的刚刚去逝的禅宗大师圣严法师的“本来面目”有异曲同工之妙:

过份的设计,或者叫BDUF(Big Design Up-Front),往往是有害而无宜的。BDUF一方面否定了软件设计是演化而来的,容易产生僵死的框架;另一方面为现在用不到的功能花精力,违反了lean的原则。例如冗长的软件设计文档、长达三个月的软件设计而不写一行代码,等等。都是我们在领悟软件工程的过程中附会到Design上去的东西。
而完全依靠测试驱动的开发方式,或者用户需求驱动的开发方式也不会自然而然的产生好的软件设计。如大师所言:“TDD can also generate really bad design”。因此,依据设计原则进行合理的Design Up Front也是必须的。

所以我想大师是要我们在纷乱的敏捷方法、软件理念之余还原软件设计的本来面目。例如在开始实现一段功能前开个简短的Design workshop,画画图,写一个快速原型或者伪代码等等。

另外,也有人讲“Before enlightenment chop wood and carry water. After enlightenment, chop wood and carry water.”:-)

没有评论:

发表评论