25年前,我和Kent Beck坐在Tektronix技术中心的自助餐厅里,考虑着我们对Smalltalk-80的深入接触会给世界带来怎样的影响。

我对Kent说:真的不必担心。如果我们能做任何事情,我们会做什么呢?

“我想改变人们看待程序设计的方式。”Kent说。我表示赞同。那时,我们都认为行业发展进入了错误的方向,而我们都想逆转它。而且,令人惊奇的是,我们做到了。

我那时在自助餐厅中使用的这项技巧——“真的不必担心”这部分——是最早从我大学的指导老师那里学到的一种模式。他把该模式用在我身上,正如我把它用在Kent身上。这种行为我现在把它归结为一种模式,它使我和Kent敢于想象更远的目标,若非如此,那些目标看起来显得盲目。而一旦想到了,我们的目标就更容易实现了。

我把这种思考的技巧称为模式,因为它解决了我们经常遇到的一个问题:我们潜意识里会压抑自己的雄心壮志。本书中全是类似这样的技巧,它们用于解决各种不同的问题。我们说:模式解决问题。“真的不必担心”帮我和Kent解决了一个问题。它使我们真正去考虑自己本来就有的更大的想法,而且使我们克服了习惯性的自我压抑。

或许你也尝试过“真的不必担心”这一模式。如果没有,不妨试一试。最强大的模式是那些可以反复运用并取得成功的模式。模式并不一定非要新颖才有用。事实上,不新的模式才更好。另外,仅仅知道几个成型的模式名字也没有太大帮助。确定出一种模式,以后你每次谈论它的时候就不必重述整个故事。

快速翻阅这本书,你将看到很多模式,其中许多都会让你觉得熟悉。对任何一个,你可能都会说“我已知道这种模式了”——可能事实真的如此。然而,即使相关解决方案是常识性的,书中的模式仍然能提供两种帮助你的方法。

第一,书中的模式更加完整。它们已经被研究、定性、归类并解释过。每一种模式都会带给你意外的收获。尽情享受这种收获吧,它会帮助你让已知的模式变得更加强大。

第二,这里的模式都是相互关联的。每一种模式都通向其他的多种模式。当你发现一种已经知晓的模式,沿着这些关联,你可以顺藤摸瓜找到其他一些尚未知晓或者从没想过可与之联合运用的模式。

我和Kent在Smalltalk-80中挖掘模式,我们找到了很多。我们将这些模式的概念讲给了同事们,并引发了一场小小的革命。我们改变了人们考虑程序设计的方式。从那时开始,人们写出了几十本有关模式以及如何使用它们的书籍。

我们的革命远未结束。慢慢地,模式术语越来越多,并成为敏捷(Agile)软件开发方法的基础。后来又出现了几十本书籍。

那现在为什么写这本书呢?好吧,我们的职业已经承载了过多的资源。关于我们的革命,有太多的信息可以获取,以至于没有人能完全吸收它们。然而,还是有些人努力做到了。他们消化了所有可以获得的建议,而且似乎总能在需要时信手拈来。他们是如何掌握到这种程度的呢?

本书的内容全都是教你如何掌握我们所处的复杂领域的模式。掌握不只是知晓。掌握是能帮你减轻负担的知晓。

举个例子,如果你记不住SUBSTR函数的参数顺序,可以到互联网上查一查。感谢上帝赐予我们互联网,它把我们的负担减轻了一点点。但是,当你运用本书中的模式,当你可以随时改善自己的工作,你会发现自己在写一种不同的代码,一种不依赖于了解SUBSTR参数顺序的代码。你将写出比SUBSTR飞得更高的程序,而这将大大减轻你的负担。

来自这次革命中的所有建议,除非能成为你的第二天性,否则就不会有太大的帮助。在软件领域,工艺的发展使我们认识到,让这些东西变成第二天性并不是我们的第二天性。这些模式是对这一过程的贡献,令人欢迎的贡献。

——Ward Cunningham