对我而言,算钱和花钱一样其乐无穷。上世纪九十年代初,当时我还在荷兰Delft科技大学读书,利用课余时间,我写了一个账本程序(参见图2.1)。我之所以这样做完全是出于个人兴趣,然而美中不足的是,我那时并没有什么钱可以算。但内心的某个阴暗角落还是满怀希望地想,只要自己想算,百万美金自然会滚滚而来。但是,哎,这想法一直也没有实现。
我一个人完成了整个程序,大概写了3万多行代码。我没有正规的方法,没有软件开发经验,没有经理、教练和顾问的帮助。但是我有的是时间、电脑、愿景和完成伟大产品的强烈动机。
图2.1 JEBS 2.0,我20多年前写的账本程序(荷兰语)
令人称奇的是,这个软件我竟然卖出去几十份,有些客户甚至被完全震惊,他们没想到账本程序也可以如此简单、操作友好并且好看(就上世纪九十年代而言)。现在,二十多年过去了,我仍然在使用这个老掉牙的程序记账。在这二十多年的使用过程中,我只发现了三个小问题。
这怎么可能呢?一个没有经验的程序员是如何构建出如此高质量的软件,并且用了几乎近二十多年毫无差错的呢?
对此,我完全不知道为什么。
但是……我可以列举敏捷专家看着觉得亲切的下面这些情形。
我对构建产品充满了激情。 我有账本应用程序的使用经验,确信这些应用操作性很差,都是来自地狱的数字宠儿,不但榨干了用户的生命,而且每次敲击键盘都能使用户灵魂出窍。我的愿景就是要让程序与众不同。不像别的同类软件,我的程序操作友好,使用愉快。
我本人就是一个关键客户。 我不是为别人而是为自己写程序。当然,我很高兴能找到客户,即使这些客户没能让我成为内心深处所渴望的百万富翁。但是我做了一切所能做的工作,确保程序以我想要的方式运行。
我没有计划,只有一个功能列表。 首先,我从核心功能入手,比如输入新的交易。接下来是一些非核心功能,比如余额调整和差错更正。最后处理一些锦上添花的功能,比如帮助页面或导出功能。直到我厌倦了这一切,就简单地宣布产品已经准备就绪。
我在构建产品时不断地完善流程。 我按照一个简单的清单往下开发。这个清单记录了每个步骤,而且随着时间的推移,清单稳步增长。虽然我从来没有听说过单元测试,但我日常的行为准则完全可以和飞行员媲美,会一而再、再而三的检查,确保产品质量没有问题。
就是这样。我有强烈的动机,有关键客户,没有前期的计划,遵守严格的纪律和自组织的流程。即使我以前从来没有开发过账本应用也没有关系,真正重要的是我渴望学习。
在我完成账本应用十年之后,我发现我以前遵循的(部分)流程,现在突然被称为“敏捷软件开发”。现在,经过十年的学习,我着手写一本书来介绍敏捷所缺失的一种成分。这本书涉及的范围和我那个账本程序差不多。当然,嘿嘿,和以前一样,我内心深处那个阴暗的角落已经蠢蠢欲动,准备算钱了。