译后记

其实也不算什么译后记。在翻译完前面一篇文章之后,没更多想说的了。 毕竟译文前面也写了很长一段,能憋出来的都写在里面了。开这一篇文章其实是因为前面 准备这篇译文的时候,把整个讨论串的消息都读了一遍,感觉其中有不少精彩的观点和论述, 摘录出来放到这里。

翻译太难,这里就直接放原文,不翻译了。斜体和粗体均为编者所加。和之前一样, 每段后面附上原文链接。后面的中文部分是我的一些想法。

译:"A closure is poor man’s object, an object is poor man’s closure."

编程范式的讨论,应该算是程序员社区的日常话题。函数式编程和面向对象,分别是什么, 孰优孰劣,总是争论不休,如同无休无止的宗教战争。而 closure 和 object,可以称作是 fp 和 oop 各自的代表概念。

要翻译的这篇文章,写于 2003 年,是一条邮件列表里的消息。它出自一个 很长的讨论串, 始作俑者1标题 “What’s so cool about Scheme?”,似乎不容易联系到这里。 最后一段留下了一个问题:

Is Scheme really a ‘functional programming language’ or is it just a really general purpose tool that allows functional programming?

Scheme 真的是一门“函数式编程”语言吗?然后就引发了长长的讨论,讨论什么是函数式编程, 函数式编程必要的特性有哪些,什么是 Scheme / Lisp 的特质。当然,不可避免地, 会提到其他编程范式,当然,主要是面向对象。

然后就到了这篇文章,http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03277.html。 它先从倾向闭包的角度,后从倾向对象的角度,来阐发一者无非是低劣版本的另一者。 但是当两种针锋相对的态度出现在同一篇文章中,仿佛太极阴阳,两相融合。因为这种 平等宽容的态度,我很喜欢这个文章。另一个我喜欢的点是在于文章最后编的禅宗公案, 有棒喝,有机锋;给原本朴实的技术讨论增加了不少禅意。

“A closure is poor man’s object, an object is poor man’s closure.” 从文章中提取 出来的这个句子,成为了编程语言社区里的一条名言或是警句;也被用作这篇文章的标题。

从 Fibonacci 到 define-memo

故事要从 HackerRank 网站上的 "Functional Programming" 题集里的 一道题目 说起。这道题目叫 "Fibonacci",属于 "Memoize and DP" 分类下。一如题目名字一样 直白,这题就是要求 Fibonacci 数列的第 n 项 \(Fib_n\),其中 \(Fib_0 = 0, Fib_1 = 1\)。(其实还是有点点差别,原题因为数字精度范围的问题要求 mod 10e8+7,但是在这里 我们不需要考虑这个问题,下面忽略 mod 10e8+7 这个操作。)

那太简单了啊,直接上来写:

Hello World, Again:我是怎么折腾出这个博客的

其实这篇文章完全不在我的计划中,本地还有两篇没写完的文章;但是折腾这个博客的过程 实在是太费精力了,让这个博客能在因特网上出现之后,我决定写这样一篇文章。(主要是 怕不记下来会把这里发生的事情忘了。)

如果你看(当前的)博客首页的话,会发现上下两篇都是「Hello World」。这种尴尬情况 的出现是因为这个博客的一部分是在很久以前就准备好的了。当时准备了那一篇「Hello World」,留作第一篇博客,同时也方便写样式测试 效果。但是后来把这个博客折腾上线的过程中还是花了不少力气,所以再多记录一点。

Hello World

终于开始写博客了。