对“设计模式”的颠覆性看法

Lisp专家,世界上首个互联网应用程序Viaweb开发人之一,Paul Graham这样说:

如果你想解决一个困难的问题,关键不是你使用的语言是否强大,而是好几个因素同时发挥作用:(a)使用一种强大的语言;(b)为这个难题写一个事实上的解释器;或者(c)你自己变成这个难题的人肉编译器。在Python的例子中,这样的处理方法已经开始出现了,我们实际上就是自己写代码,模拟出编译器实现词法变量的功能。

这种实践不仅很普遍,而且已经制度化了。举例来说,在面向对象编程的世界中,我们大量听到“模式”(pattern)这个词,我觉得那些“模式”就是现实中的因素(c),也就是人肉编译器。当我在自己的程序中发现用到了模式,我觉得这就表明某个地方出错了。程序的形式应该仅仅反映它所要解决的问题。代码中其他任何外加的形式都是一个信号,(至少对我来说)表明我对问题的抽象还不够深,也经常提醒我,自己正在手工完成的事情,本应该写代码通过宏的扩展自动实现。

经常都在讲“设计模式”,看这到对我真是颠覆性的…

一来,第一次听到对“设计模式”的明确Say No,

二来,第一次发现,居然可以从语言层完全抛开设计模式。

真是路漫漫其修远兮,吾将上下而求索!

发表评论

电子邮件地址不会被公开。