0%

极端编程主义

函数(Function)太棒了。如果我们创造一门只有函数的语言会如何?
对象(Object)太棒了。如果我们创造一门一切都是对象的语言会如何?
惰性求值(Lazy evaluation)太棒了。如果我们创造一门所有类型都是惰性的语言会如何?

极端主义编程(Extremist Programming, 与极限编程无关)是一种奉行某种思想(Principle),用它来衡量其他一切事物并将它应用在任何地方的行为。等到尘埃落定之后,人们通常会对着这种极端主义方式思考,“额,这确实很有趣,但是把X用在Y里明显不恰当。你需要换一种正确的方式来达到目的!”

上面这段话的意思是:有时候你需要使用错误的工具工作,因为你并不知道用这工具是不是正确的。如果你不到处使用函数,你也许就不明白将一个函数作为另一个函数的参数有怎样的功效,也许就不明白Cheap Lambda表达式的意义。如果你不到处使用对象,你也许就不理解其实整型和类的实例其实都是对象。如果你不到处使用惰性求值,你也许就没意识到其实函数的纯粹性(Purity)其实是一种更加重要的语言特征。

这就引出了两个建议:

  1. 当学习一种新的思想时,尝试将它到处运用一番。这样你就可以很快的知道它什么时候适用什么时候不适用,即使你对它的第一印象全是错的。(另一方面,如果你没有进行这样错误的尝试的话,你将失去对它适用范围理解的机会。)

  2. 当试图理解某种思想的本质时,一个极端的例子是最清晰明了的。如果你想知道使用惰性求值编程是怎么样的,你会使用Haskell,而不是其他的非强制惰性求值的语言。即使这样极端的系统并不实用,但它确实能够更好的体现本质。

极端主义在很多场合并不恰当,但是对于那些有趣的,小巧的项目或者研究,它真的能够教会你许多。给我印象最深的一件事情就是我去年和Adam Chlipala的合作。当时我们用Coq进行一些证明,我用的是中规中矩的方式,先一步一步推导要证的雏形,然后使用Ltac自动证明。Adam告诉我:“你应该一开始就自动证明的,不用麻烦的做手工推导”。真是醍醐灌顶:我就是不够极端!

文件(File)太棒了。如果我们创造一种一切都是文件的操作系统会如何?
Cons结构(Cons cell)太棒了。如果我们创造一种一切都由Cons组成的编程语言会如何?
数学(Mathematics)太棒了。如果我们创造一种一切都是数学说了算的编程语言会如何?
数组(Array)太棒了。如果我们创造一种一切都是数组的语言会如何?


翻译 by locatino
原文链接http://blog.ezyang.com/2012/11/extremist-programming/