翻到一篇老文(2010 年),有所感慨。
原文在此,包括了部分图片:https://www.douban.com/note/64005602/
下面是转载,但是没有图。
终于到了为_why 先生写点什么的时候了。在_why 先生突然神秘消失后,我就一直想写这篇文章。但我心中又充满忐忑,毕竟我从未见过_why 先生,不认识他,甚至连他的本名都不知道。可是这个神秘人又有种难以抗拒的魅力,他的经历也有着传奇般的吸引力。好吧,那就让我通过这篇文章,来表达一个程序员对另一个程序员的最高敬意吧。
事情还得从几年前说起。2004 年底,一个叫 David Heinemeier Hansson(DHH)的丹麦小伙开发了一个 Web 框架,他将其命名为 Ruby on Rails(简称 Rails)。Rails 简单易用,并融合了多种优秀设计思想,很快便震撼了软件业界。DHH 也因此荣膺由 Google/O'Reilly 联合颁布的 2005 年度最佳黑客。
这股热潮渐渐波及到整个世界。2007 年在深圳,因为工作的原因,我开始接触 Ruby on Rails。Ruby on Rails 中的 Ruby,是开发 Rails 框架所用的计算机语言。Ruby 为日本人松本行弘所发明,诞生十多年来,除了日本以外,在世界其他地区知名度并不高。而随着 Rails 框架的流行,Ruby 也开始受到更多开发人员的关注,许多世界上最聪明的程序员,就是在这个时候进入 Ruby 社区。今天这篇文章的主人公_why 先生,就曾经是 Ruby 社区中最耀眼的明星之一。
在我开始学习 Ruby 后,很快就为这门语言优雅精致的设计所折服。初学时除了阅读那本著名的镐头书外,也经常在网上查看文档。其中一个设计精巧的网页引起了我的注意,那是一个在线的学习指导,最神奇的是你可以在浏览器中直接执行 Ruby 代码!(去试试这个网页吧,按照屏幕下方的提示,把命令敲入到上方的窗口中,它可以让你快速掌握 Ruby 语言的基本用法)。很久以后我才知道,这也是天才_why 先生的无数杰作之一。
二
Ruby 有着众多精妙特性,其中最吸引我的,是它作为动态语言强大的元编程(metaprogramming)能力。在查找元编程的资料时,我有幸再次邂逅_why 先生的杰作。
就是这个网页,那时我在_why 先生的个人网站上看到它——那个网站在半年多前,在_why 先生神秘失踪后便随之消失了——好在这里还保存着一份镜像。即使你对 Ruby 不感兴趣,即使你不懂编程语言,我仍然建议你去看看这个网页。 这不像是一个程序教学或示例网页,强烈的视觉冲击力,使它像是出自某个设计师的手笔。我喜欢这个页面的风格,也喜欢那些有趣的插画。后来我才知道,这都是_why 先生自己完成的。一个出色的网页设计师,或是一个出色的卡通画家,_why 先生总是可以随意切换他的众多身份,并且把每一种干得出色。
他的主业自然是一个出色的 Ruby 程序员。在这个网页中,_why 先生用几十行 ruby 代码,写了一个叫"Dwemthy's array"小游戏,向我们讲述了一个“恿兔斗恶龙”的故事。去看看那些可爱的卡通插画,去听听_why 先生绘声绘色的描述,他是一个多么有趣的人啊! 我喜欢他行文的幽默笔调,他天真的诙谐以及文字中自然流露的可爱的孩子气。他像一个童心未泯的大孩子,故意用文字营造一种可怖的气氛——他就像一个悄悄站在你身后、准备吓你一大跳的坏孩子,同时还要怒力忍住才能不让自己笑出来。注意到浏览器上方的标题了吗,刻意制造的夸张效果,我想_why 先生在设计这个网页时,也一定在按奈不住地偷偷发笑吧... 看看那只兔子在漫画中说的:
他的文字是极好的。想象力仿佛天马行空,文字流畅、有趣,又暗含盈盈古意;而另一些句子,除了幽默之外,似乎又有着箴言般的冷峻、精确,引人深思: 看看这个故事的开头: “In this game, you are a rabbit who is going to die. A dragon is going to do it. ” 再来看看故事结尾的呼应: “Oh, and none of this "I'm too young to die" business. I'm sick of that crap. I'm not going to have you insulting our undead young people. They are our future. After our future is over, that is.”
从 Ruby 程序员的角度来讲,他通过这个小游戏的代码示例,教会了我 metaclass(严格说应该叫 eigenclass)的用法,教会了我 instance_eval,class_eval,教会了我 define_method,教会了我 alias。他对 Ruby 语言的掌握极其深入,这些高级特性被他信手拈来,运用得毫不造作。他的代码也极其精炼、考究,富有美感。他使用了一种全世界最有趣的教学方式,将程序、游戏、故事、卡通完美地融合在了一起,使这个网页成了一件艺术品。 老实说,我被深深震撼了,我从来不知道世界上有这么有趣的人。我从来不知道代码可以这样来写,程序教学可以这样来完成。我也喜欢这个“勇兔斗恶龙”的故事,事实上,我欣赏他的每一句话,每一副插画。
在_why 先生离开后,他在“恿兔斗恶龙”开头和结尾写下的寓言般的句子成了一个隐喻。后来我才知道,这只是_why 先生所写的《Ruby 入门(插画版)》中的一章而已。他的才华光彩夺目。
三
没有人知道_why 先生的真名。whytheluckystiff 是他的常用 id,也是他失踪前个人网站http://whytheluckystiff.net_why(twitter)和why(github)也是他的常用id。在Ruby社区,人们一般用_why来称呼他。的域名。
Ruby 语言本身的特点(动态语言,无需编译,基于源代码运行),赋予了 Ruby 社区开放、互助的特质。Ruby 社区中大部分的程序都开源,大部分作者从这些作品中得不到任何金钱回报;许多杰出的作品,仅仅是凭借兴趣、好奇心和追求完美的态度来完成的。而 Ruby 社区能回馈给这些创造者的,也不过是在社区或软件业界的一点名望罢了。在这样的社区中,程序水平的高低、对社区贡献的大小就会成为某个 id 影响力的决定因素。 从我开始学习 Ruby,到_why 先生从 Ruby 社区中离开,一共有两年多的时间。依我所见,_why 先生对社区仅能回馈的这点名望也并不看重。从他选择隐形埋名、并且从不透露自己的真实身份便不难做出判断。他像是一个少言寡语的人,只是不停地创作、创作、创作... 他是一个高产得有些吓人的天才。
我用过_why 先生的很多作品;事实上,只要在 Ruby 社区中混过一段时间,就很难不接触到_why 先生写的代码。 前面我提到过_why 先生创作的 try ruby 网页和 Ruby 入门(插画版),那是_why 先生送给初学者的最好礼物。 让我想想还用过_why 先生的哪些作品: RedCloth: Textile 语法的 Ruby 实现,现在也还经常在工作中、在 Redmine 中用到。 hpricot: 一个轻量的 html 解析器,在 nokogiri 出现之前,也是我们经常在工作中用到的。 shoes: 用 Ruby 来创建 GUI 应用的工具。 camping: 一个轻量级的 Web 框架。我记得当初看到 camping 代码的震惊,我觉得_why 先生在其中运用的各种技巧,简直可以用鬼斧神工来形容。camping 的代码教会了我很多东西,几年前我也曾试着模仿它写过一个小型的 Web 框架。 markaby: 轻量标记语言,也是 camping 框架中 view 默认使用的标记语言。 ……
_why 先生确实是一个创造力极其旺盛、极其高产的天才。在他神秘消失后,在他将自己的众多作品“付之一炬”后,有人在 github 上用从前搜集的_why 先生的代码建立了一个映像。我刚才又去确认了一下,目前这个映像包含 38 个 repos。在我看来,如果一个程序员能够发布 5 个对社区有用的 repos 就已经算很高产了——用这种标准来看,_why 先生同时维护着几十个 repos 是怎样一种概念! _why 先生不止高产,他作品的质量也同样卓越。像 RedCloth,hpricot,shoes 这样出色的 gem,都给 Ruby 社区带来过巨大的帮助。在数量和外在的质量之外,他代码的品质也同样优秀。我阅读过他的许多代码,他教会了我很多东西,他的代码简洁、精炼、结合 Ruby 语言的强大特性,许多技巧的使用别具匠心。像 camping 这样带点炫技性质的玩票之作,在我初接触到代码时简直感到匪夷所思。毫不夸张地说,_why 先生的许多代码,同样达到了艺术品的境界,使得阅读和模仿都成了一种享受。
从前_why 先生的个人网站http://whytheluckystiff.net/_why先生发布在上面的各种作品,代码、漫画、文章等等。在编程感到无聊甚至苦闷时,那也是我重新寻找灵感的来源。很可惜,在_why先生神秘失踪后,这个网站也随之消失了。我是经常访问的。我喜欢
四
终于要说到_why 先生的神秘消失了。半年多以前的一天,_why 突然从世界上消失了。有一天,人们突然发现,_why 先生的个人网站无法访问了,接下来人们发现他删除了自己的 twitter 帐号、github 帐号,http://poignantguide.net/http://hackety.org/http://shoooes.net/,这些_why先生维护的网站,也都随之突然消失了。没有人知道_why先生突然离去的理由,就像从来没有人知道他的真实身份。但这样一位超级明星的离去,对整个社区都不啻于一道晴天霹雳——也有人自我安慰式地说到,也许_why先生只是临时离开,也许他很快便会回来吧。、 半年多过去了,_why 先生一直没有回来。
很多人在推测_why 先生离开的原因。有人推测_why 先生的离开,来自他的作品 hpricot 被后起之秀 nokogiri 超越时产生的失落,他们甚至引用了_why 先生在 twitter 上说过的一段话: “programming is rather thankless. u see your works become replaced by superior ones in a year. unable to run at all in a few more.” 但选择隐姓埋名、似乎从未看重过社区声望的_why 先生,真的会是一个如此小气的人吗?
07 年底的时候,同样有一位超级明星离开 Ruby 社区,并同样引发了一场地震。他叫 Zed Shaw,也是一位让我欣赏、佩服的程序员。Zed Shaw 是 Web 服务器 Mongrel 的作者,Mongrel 的出现大大推进了 Rails 部署的进程。 Zed Shaw 才华横溢,但个性太过鲜明,在 Ruby 社区的一段时间中,和不少大佬产生了摩擦,最后毅然决然地退出,并且在退出前发文将 Ruby 社区、社区中的几位重量级人物狠狠痛骂了一番。
在_why 先生突然神秘消失后,他的离开使人们重新想起了 Zed Shaw。有人甚至在打趣说,也许_why 先生就是 Zed Shaw 的一个化名。但_why 先生的离去是如此沉默,在他决定离开他深爱的 Ruby 语言和社区时,他没有发表过任何抱怨或攻击性的言论。他留给社区的,只有一个虚幻身份掩映下的巨大背影。 我还听到过这样的说法,他们说_why 先生和 Zed Shaw 都是天才,_why 先生就像是一个温和、善良版的 Zed Shaw。在我怀念_why 先生乃至 Zed Shaw 时,我也会陷入迷思般地推测,他们是否就是卡尔维诺笔下那个《分成两半的子爵》?
五
_why 先生走得很决绝。在他决定离开后,他删除了自己的所有网站,删除了自己的各个帐号,又删除了自己的全部作品。 在_why 先生神秘消失后,Ruby 社区、乃至整个业界都在谈论这位天才的离去。各种关于他的讨论铺天盖地。人们一边猜测他离去的原因,一边把最热烈的赞颂奉献给他。那些天,在 reddit 和 Hacker News 上满屏都是关于 _why 的话题,有人说这是从未出现过的景象。
在_why 先生离开前,他毁掉了自己的所有作品,这种行为令很多人难以接受、难以理解。在我重新查看那些评论时,Hacker News 上的一段话引起了我的注意: “Though it would be considered a bit rude by many, somewhere I understand the philosophy of _why. It would be better to kill something fast than watch it wither away and die.[especially when they are close to your heart].” 这段话同样深深打动了我,甚至让我追忆起那种心碎的感觉。也许对自己深爱的人或事物,那些真正贴近你心灵的人或事物,唯有通过这种决绝的方式,才能避免眼看它渐渐枯萎、渐渐凋零时产生的更大痛苦。
在_why 先生离开并删除自己的全部作品后,人们用从前保留的资料,一件件地恢复他的创作。github 上有了 why 先生的代码镜像,人们将他的代码称为可运行的诗句(_why's executable poetry)。他的《Ruby 入门(插画版)》也有了新的镜像。有人在维基百科上创建了一个关于他的词条,现在那是一个 pagerank 高达 6 的网页。 仍然有人在猜测着_why 先生的真实身份。但最终,这些试图“拆穿”_why 先生真实身份的讨论慢慢湮灭了,_why 先生隐姓埋名的意愿得到了人们的尊重。
我想很多人都对_why 先生心存感激,他是一个对社区有过巨大贡献的人。我也对_why 先生充满感激,他的代码曾教会了我很多东西。 _why 先生还是一个艺术家气质的人,他的漫画、他的文章、他的代码都具有艺术品的气质,按照维基百科上的说法,他还是一支叫“The Child Who Was A Keyhole”的乐队的成员。 从他的文字中,从他的漫画和他编纂的一个个小故事中,我还感受到他的幽默感,他的理性、温情、善良,以及不经意流露出的孩子气。阅读他的文章、他的代码、他的漫画都给我以美的享受。 这所有的一切,这些在一个远在中国的程序员身上,激起了一种复杂的奇妙的情感,使得他今天写这篇文章来怀念一个自己从未见过、也并不认识的人。
在_why 先生离开后,人们长久地怀念他、追忆他是有原因的。 王小波曾经说过,人的一生中,应该认识一些有趣的人,做出一些有趣的事情。_why 先生的代码、他的文章、他的漫画,那是我读到的最有趣的程序员作品。他也是我知道的世界上最有趣的程序员之一。 王小波还说过,一个人只拥有此生此世是不够的,他还应该拥有诗意的世界。在我看来,_why 先生拥有各种充满诗意的作品,他的缄默、他的隐姓埋名也是有诗意的;最后,他让自己的离开也充满诗意。
在_why 先生离开后,有人搜集了_why 先生的 tweets,其中有这样一条让我特别喜欢: “when you don't create things, you become defined by your tastes rather than ability. your tastes only narrow & exclude people. so create.”
So create.
附录 A(链接) 维基百科: http://en.wikipedia.org/wiki/Why_the_lucky_stiff rubyinside: http://www.rubyinside.com/why-the-lucky-stiff-links-2333.html http://www.rubyinside.com/why-the-lucky-stiff-is-missing-2278.html github: http://github.com/whymirror http://github.com/why Hacker News: http://news.ycombinator.com/item?id=773920 http://news.ycombinator.com/item?id=773106 reddit: http://www.reddit.com/r/programming/comments/9c5on/where_is_why/ http://www.reddit.com/r/programming/comments/9c5u4/this_is_a_sad_day_why_disappears/ Free Mind: http://blog.pluskid.org/?p=373
附录 B(写完本文的一点感想)
进入程序员这个行业以来,我常感受到中国的程序员和国外优秀程序员的巨大差距。在金字塔的顶端,中国的数字英雄们大概很难达到 Bill Gates、Jobs 那样的境界。另一方面,在金字塔的底端,我们与国外优秀的程序员差距更大。 在我们这儿,程序员还被看作三十岁前吃青春饭的一个职业,或者走向管理岗位的一个跳板;殊不知,国外四五十岁的优秀程序员大有人在,那些著名公司的 fellow 无论是收入和地位,也并不见得比管理层差。 阅读国外优秀程序员的代码让我觉得是一种享受。像微软、Google 公开的一些代码,像 Matz、_why 先生这些人的代码,非常工整、简洁,一丝不苟,确实可以用欣赏艺术品的眼光去审视。而就我所知,就我看过的国内某些大公司、大型软件的代码,完全可以用一塌糊涂来形容,那完全是人力堆砌的结果,没有任何美感。 有时看国外程序员写的书,在作者的自我介绍中,我经常看到作者说自己在业余时间是一个音乐家、一个画家、或者是一个木匠。_why 先生的业余身份就包括了乐队成员、漫画家、作家等等,Zed Shaw 也是一个杰出的吉他手和作家。正是这些程序员具有的艺术气质,赋予他们的代码美感,赋予他们创作的软件以美感。Coding 本质上也是一门手艺 (craft),我相信这些都是相通的,这些都会有潜移默化的影响。所以中国的程序员中也很难出现_why 先生这样的大师。 但这一切又该指责谁呢,指责中国的程序员只会埋头做事,不会抬头看一看天空吗?但是现在的社会能给普通程序员抬头看天空的机会吗?功利、浮躁的环境,应试教育的巨大伤痕,高额的房价和生活成本,这一切都压得普通程序员喘不过起来,只能低头向着地面,哪里还敢想象甚至奢望诗意的生活? 在中国,我对程序员这个行业是悲观的。
附录 C(Ruby 入门指导)
——我推荐你学习 Ruby 这门语言。 ——我是文科生,我也能学会吗? ——当然能,_why 先生说过,连婴儿都能学会 Ruby!
——可我对编程一点都不敢兴趣啊。 ——给你看一个 PPT 吧,希望你会改变主意。
Q: Why should I learn a new language?
Q: Why so many languages?
Q: Why Ruby?
孟岩的一段话 孟岩的一段话
——好吧,我决定开始学习 Ruby,但我该如何开始呢?