Blog

Jim Weirich 讲 Y Combinator

Jim Weirich 是 Ruby 社区中我最喜欢的讲师。首先他的体型会给人很深刻的印象,听他演讲时不断传出的喘气声,给人一种他随时可能一口气没上来就累死的感觉。但他的演讲十分的吸引人,流畅、生动,如果在大学里,他绝对是最受学生喜爱的教授类型。

Jim 在 Ruby 社区中非常活跃,他的作品可以用“脍炙人口”来形容,比如 Rake。几乎每届的 RubyConf 都有 Jim 的演讲。相比起 Matz 那典型的日本人的演讲,Jim 的演讲远比作为 Ruby 语言的创始人 Matz 的演讲更有趣。

过去自从 2007 年,每届的 RubyConf 我都关注。去年开始比较忙,编程方面用心少了,于是最近的 RubyConf 我没有看。昨天正好想起来,就补了以下。今天我看了 Jim 在 2012 年的 RubyConf 上的演讲,标题是“Y Not — Adventures in Functional Programming”,讲的内容就是 Y Combinator,涉及的内容包括不动点、Lambda Calculas、递归等一些数学上的理论。Jim 这次的演讲中不包含 Ruby 知识,只是用了 Ruby 程序来演示了 Y Combinator 的内容。在演讲中,Jim 用 Ruby 中的匿名函数来写了一个阶乘函数,从最简单的开始,通过类似 LISP 语言中宏展开的方式,像证明一道数学题一样推导出了 Y Combinator 的 Ruby 代码。虽然到后期的各种替换,因为不是亲自操作,非常容易被绕迷糊,但 Jim 还是非常优秀的把总体含义给讲清楚了。

Jim 到最后也没有说出来这次的内容对于底下的 Ruby 程序员们有什么帮助,因为确实没有。这些知识就好像微积分对于文科生的作用一样,可以锻炼思维,但没有直接的影响。

我过去以为欧美国家里的计算机科学课程应该非常高深,比如过去我听说很多大学的计算机入门课程都是 MIT 的 6.001 教材《Structure and Interpretation of Computer Programs》,这本书用 Scheme 语言,讲述了计算机计算领域的很多初级问题。比如 Y Combinator 在书开头不久就在注释中被提到了,书上也给出了计算函数的不动点的程序。后来我自己来读了以下加拿大的大学中的计算机系后,发现随着时间的推移,很多东西都被舍弃了。毕竟现在人们需要的更多的是 IT 人才,而不是计算机科学家。MIT 自己也不再用 Scheme 语言来给学生入门,而是选择了更流行的 Python。所以很多欧美程序员,对这些过去的入门知识并不了解。因此在演讲的开始 Jim 询问听众有多少听说过 Y Combinator 的,结果回应的人很少。

看了一会视频,我发现 Jim 讲的内容并没有什么深奥难懂的东西,二这些东西基本上都在过去的教材中出现过,今天拿出来再讲一次,这不是把旧知识重学一遍吗?确实在计算机行业中有过一句话,大意是今天的编程语言就是把当年的 LISP 重新实现一遍。于是在前几年的某个时间点之后,大大小小的语言设计者们开始往他们的作品中加入 lambda……

我对早期的编程语言非常的感兴趣,因此也很容易产生迷惑。我在大学中学的第一门 3000 等级的课就是讲述各种类型的编程语言的一门课,内容包含了函数式语言、LISP、PROLOG 以及 APL 语言的后裔 J,这门课的成绩是我所有学过的 3000 等级的课程中最好的之一,那时我主修的 2000 等级的课程才刚开始不久。让我在学这门课的时候如鱼得水的原因就是我对那些传统编程语言的兴趣。因为觉得这些奇特的表达方式非常有趣,因此我就更加的想了解,了解了之后就是困惑,这些优秀的东西为什么在今天都被主流排斥在外呢?为什么它们看起来如此的优美,但在今天却不再实用了呢?它们是花瓶吗?结果今天的主流语言开始模仿起了老前辈,但老前辈依然在各个小众领域中苟延残喘。或者偶尔能够诞生出一个后裔,在特定的领域绽放一点光芒,比如 Erlang。

最后说一句,看 Jim 写代码是一件非常享受的事情,因为他的头脑似乎特别清晰,不把东西给弄乱。而且他用的编辑器正是我喜欢的 Emacs,几十年的编程经验让他真正的把代码“玩弄于股掌之间”,让我觉得非常意犹未尽。

1 comment

  1. 用 Rails 重写 Tweets Page | 我的空想特摄 - pingback on 2013/06/02/ 17:49
    沙发

Leave a Reply