传奇程序员Larry Wall:Perl的乐趣
“Larry Wall是如何发明了一门凌乱的编程语言 —— 接着改变了WEB的面貌?”
LarryWall微笑着回忆起Yahoo的共同创始人David Filo几年之前发给他消息,当时正值Yahoo公开面市之前的不久。Filo写道:"如果没有Perl——Wall发明的通用编程语言,Yahoo是不可能开始的。那么,Larry你愿意买一些便宜的Yahoo的原始股么"?
回溯到1996年早期,当时正值硅谷Internet IPO的疯狂处于绝对高度,这样一个提议无异于问你是否接受让一辆装载了固体黄金制品的自动卸货卡车往你的门前草坪上运输。但是对于Wall, 钱永远不是主要的动机。尽管被认为是黑客们使用的最有价值的工具的作者,Wall仍平静地住在偏远的加州的Mountain View中一个小镇上,为陈旧的1977 Hoda Accord做加工。Perl与钱无关, Wall只是为了解决在日常工作中的碰到的一个编程问题才发明了这门语言,并且从开始他就确认Perl的源代码是可以自由获得的。人们总是想到用Perl来做修补工作 —— 无论是用它来构造一个上百万美元的Internet目录公司或者只是在他们自己的主页上面做一项调查。
尽管Wall可能很节俭,但他并不笨。他接受了这个提议并且为他的14岁的女儿购入一些Yahoo的股票 —— 这也足够支付她的大学费用。关于Internet上古老的"互惠经济"(gift economy)的规则的更好的例子是几乎不可想象的 —— 投资网络,你就可以获利。
Larry Wall喜欢把Perl叫做一门"粗陋的"语言,用他那温和的嗓音,他这样描述Perl:他是一个顺从,温顺的仆人,只是为了"让他服从于你的需要"而存在。拥挤在Web上的大多数Perl黑客却欠温和:他们宣称,Perl是一种不可缺少的粘合剂,使得整个Web紧紧联系在一起 —— 不止是Yahoo, 还有Amazon和其他成百万的站点。Perl的支持者认为,如果没有Perl和Larry Wall, 那么网络只是它现在样子的一个苍白的影子。
无论是在推动Web的发展,还是在制造了众多Internet基础设施的FreeSoftware/OpenSource运动的发展过程中,Wall都扮演了一个重要的角色。但是,即使他的同事尊称他为FreeSoftware的"极为重要的首领和睿智的老者",Wall的领导风格绝对是谦卑的 —— 这个显著的个性使得他区别于该运动的其他领导人物。
作为传教士的儿子和孙子,Wall是一个虔诚的教徒。据他的朋友,Perl的亲密合作者Tom Christiansen说,他的任务是实现他的理想 —— "使人们合作工作。他计划以他内心无私的感知能够为Perl做一些互利的工作"。但是他不会允许自己卷入到不重要的"信仰"战争中,这些战争正困扰着编程世界 —— 那些无休无止的争论诸如是否一个编程语言或者操作系统天生地比另外一个好。这样激烈的争论是那些喜欢泾渭分明的黑客的偏好,他们不允许哪怕是狭小的变通空间的存在 —— 相对计算机世界中的基础概念如是/否,0/1等数字的问题,模糊性属于外边的世界。
但是Wall和Perl就是狭小空间的全部,就是凌乱的非理想性和模糊的创造性。毕竟,传送的价值不仅在于它为你解决了某个具体问题,而在于它帮你完成了某项工作。某种程度上,Perl不是第一流的。但那不是Wall关心的,他谦虚的目标就是有用
,就是帮助帮助人们做他们需要做的 —— 实现编程语言,硬件平台,多种软件领域和同一个宇宙空间中共同工作的人们的互相连接。
如果你仔细思考,你会发现Perl是网络的全部所在。 Wall十多年之前首先发明的Perl,直到1994年网络成长时才开始爆炸性地传播,这并非出于偶然。网络是一个黑客云集的,凌乱的既成事实存在,它需要快速的思考和更快的反应次数。Perl是一个网络黑客的最好朋友。
Larry Wall是如何改变整个计算机文化的
“我试图同时得到适量的灵活性和稳定性”,在他Mountain View的有些凌乱的家中,Wall说道,他正地在谈关于Perl的事情,但他的态度融合进了日常生活的基础。
Wall有一个Caller ID(主叫标记)连在计算机上面,这样对于每一个进来的电话他有指令来发出对应的声音。CallerID有什么好的,Wall问,如果你不得不走很远去接电话以知道是谁打电话?同样的,按下他的门铃也从一个Wallace&Gromit粘土木偶发出一系列对话;当他的干衣机(藏在车库中)停止转动时,一种汽笛声将响彻整个房间。
Wall的职业是一个系统管理员,而不是一个软件工程师。系统管理员对编程和技术倾向于一种功利主义的态度 —— 他们关注于使网络不停运转,解决紧急的问题,飞快地编程。Wall做为一个程序员,一生都用来解决这种问题 —— Perl就是他个人工艺品仓库中最近的工具。在他构造出Perl的几年之前,他已经达到了黑客的名望,他写了"Rn" —— 一个用于读Usenet新闻组的程序。
对于软件开发,Rn是一种现在称为FreeSoftware或者OpenSource模型早期的原型 —— 在其中各地的程序员通过网络互相协作,通过使得大家都可以获得代码来改进产品。Wall写了Rn,在Internet上发放了源代码之后,然后就开始做升级版本,这个升级版本包含了来自最初的网络空间中其他黑客提出的建议和错误修正。
但是回溯到80年代中期,通过网络不是很容易发放升级版。人们通常通过300-1200波特率的modem连接网络,是不可能以轻松的态度把上兆的源代码来回传递,而现在这种情况很正常。
所以Wall写了一个小程序,称为"patch"。Patch带有一个压缩的新的升级源代码并可以应用于以前的源代码。Patch能够提高旧代码更新的速度,并且甚至非常聪明地考虑以前的源代码作过的变化。
作为黑客,Wall是一个相当慎重的人,但那并不意味着他总是很谦让。“patch改变了计算机文化",wall说。
"我多年来一直相信patch是一个对OpenSource文化最重要的贡献,尽管它从来没有象Perl或者Rn作到的那样吸引这种更大,更诱人的工程的注意力。”OpenSource运动的最著名的领导人之一Eric Raymond说。
“Patch可能是迄今为止最成功的活儿”,Raymond说道,“Larry有效地创造了,至少是关键性地促成了,被Linux验证了的现代化的高度分布的开发模式。”
Patch之后是Perl。表面上,它是完全不同的东东,一个高度复杂的"脚本"语言,为那些需要写自动任务,连接不兼容程序和系统或者解决难以应付的问题的程序员打算。Perl起源于1986,那时Wall是Burroughs公司的附属公司的一个系统管理员。那时,他致力于加州Santa Monica和Paoli,Pa.的计算机之间信息的同步交换有关的"NSA的一个秘密项目",但NSA不止希望希望信息的同步 —— 它还希望生成关于每次交换的报表,而Wall现有的工具没有一样可以胜任这个任务。把所有的事情结合起来需要一个应急解决方案,一个编程的活儿,最终成为Perl —— 实用提取和报表语言(Practical Extraction and Report Language)。
“我意识到在C语言和Unix Shells之间有极大的空白区域,”Wall说,“C可以处理复杂的事情 —— 你可以叫它’可操作复杂性’而Shells却擅长处理那些我称做’whipupitude’的事情。但有一大段空白区域,无论C还是Shells都无法很好地处理,
这就是我设计Perl的目的。”
从那时起,Wall把他的业余时间和精力花费在探索一门可以连接计算机领域中所有大的空白区域的语言的需求。
“人们总是在寻找空隙”,Wall说,“他们总是在寻找新的生态环境,而你进入这些生态环境的速度是真正重要的,因为第一个进入这些环境的人总是赢家。”
Perl是一个赢家。Wall保证Perl的特别强大的能力 —— 文本处理,灵活性和一个对于解决快速/困难问题非常有用的工具集 —— 他们使得程序员可以立即了解Perl的本质:比如David Filo和Jerry Yang,这两个Stanford大学的本科生创造了
Yahoo。他们发现Perl不可缺少,他们用Perl来生成Web页面,为他们的执行Web数据搜集的机器人编写代码,并且维护Web地址的数据库。
“我们极大地依赖于它”,Filo说,由于可以快速地开发,你可以很快地做这些事情。
Yahoo的经验不是唯一的,Tim O’Reilly,计算机图书的出版公司O’Reilly & Associates的CEO和奠基人说,不止是O’Reilly出版最畅销的Perl计算机图书,3年前他们还聘请Wall作为Perl的全职推销者。
“Perl做这个很顺利”,O’Reilly说,“Perl比传统的编程语言要容易理解的多,并且我认为是人们开始构造和想象Web时一个很重要的部分。他让业余爱好者进入 —— 你不必是一个专业程序员....尽管Perl可能有点难,并且可能有点模糊,它对于
那些人们想做的事情还是可用的。你可以把事情迅速地捆绑在一起并且迅速解决问题。”
我只是尽力使得计算机比程序员多想一些
到底Perl能够做什么?在地位上,它与Sun的其他计算机语言 —— Java/Python/Tcl相比,到底有什么差别?
Perl的拥护者说,它是一个"瑞士军刀" —— 一件可以高效地做任何事情的工具。 学习Perl,一个人不必是那种精通Java/C++的编程天才,尽管Perl自己的灵活性使得它有时比较混乱 —— 尤其对那些习惯于只用一种方法解决问题的程序员。但是Perl最大的优点在于它在其他计算机语言之间建立了一座桥梁。
“Perl曾经是,并且继续是原型式的胶水语言",Chip Salzenberg, Perl最主要的代码分发商之一说,“按照设计,它的演进就是为真实程序员面对日常的挑战、需要使复杂和非协作的系统协调工作的需求所驱动的。”
Larry Wall相信这个演进过程体现了真实的世界是如何工作的。
Perl作了许多工作,Wall说,并且对他认为是你程序的错误给出了很好的反馈,所以当你试图快速开发一些东西的话,会有非常迅速的好转。你试验一些东西,然后它出错,你再改正。你就这样使它成长,发展。我就是这样写程序的。许多人就是这样编程的,他们也是这么去思考的。
Wall说,Perl对真实生活的反映 —— 他的人性特征 —— 是内建于这门语言的深厚的哲学结构。Perl是第一个后现代的计算机语言,Wall说,一个人造自然语言,模拟了程序员是如何思考的。
所有语言的深厚的结构都是Wall的主要关注点。在他作为一个系统管理员和相关hacking的一生中,他和他的妻子是Uc-Kerkeley的语言系的学生。Wall说,他们的计划是,成为战地的传教士,并致力于翻译圣经。他们将从一本没有书面语言的圣经开始工作,从头学起,再写下来,然后帮助将圣经翻译成那门语言。
他和妻子放弃了这项任务,但是他转而从事另一项工作 —— 协助其他人为实现类似的目标 —— 与其他人想连接做一些有用的事情而努力。当这件事情转而成为创造一门编程语言,而不是彻底地从头建造一些事情的时候,Wall —— 从他的语言训练中得到灵感 —— 选择去建造一些事情来复制真实的人们的思想和行为。
首先而且最重要的是,这意味着为解决每个可能的问题提供许多不同的途径 —— 这导致Perl的战斗口号,“有不止一条路径可以实现”。“如果你认为人们的语言是一个艺术媒介”,WALL说,“他已经给你创造力的空间。如果你想能够为不同的事情做优化 —— 如果你想能够用同一种语言开处方,作诗,写报纸专栏和杂志专题 —— 他就必须具有灵活性。这与人们在计算机科学中学到的截然不同。人们被教导如果有任何冗余,那就是有害的,恶劣的。从自然语言的角度看,我不买它(指计算机科学的教导)的帐。”
Perl沿着一门真实语言的道路发展,吸收了长期以来其他语言的优点 —— 有一些Unix, 一些C++, 一些BASIC, 一点这个,一点那个。如果其他任何人有一些新鲜,有用的东西,Perl会包含他。当Wall调用这些"后现代主义"的概念,他是指Perl的折衷,包容的方式 —— 在每一个隐蔽处和裂缝中都可以找到的一点点真理的能力 —— 同时不用使它自己被任何大的真理所包围。
“当它出现的时候,大多数计算机语言试图使程序员想计算机一样思考”,Wall说,“我试图使计算机比程序员多想一些。并达到了一定程度的成功。问题是,到底谁是主导者,这就是全部所在”。
尽管Perl十分普及,但这门语言不是没有反对者。MarcEwing,RedHat的首席技术官员,Linux商业版本的主要分发商,情愿使用Python;Infoseek, Internet的搜索引擎公司,用Python做内部开发工作。也许最有力的批评来自Eric Raymond, 他长期将Perl吹捧为Open Source运动最成功的故事之一,“这门语言的设计显示出他的年纪和明显的膨胀的标记,Perl从来不是一个漂亮或者优雅的语言;他的引诱力在于他的直接的可用性。长期之后,在我看来,Larry’s早期选择产生的问题是积聚和加强其他优点只比效益的堆积快一点点。”
“这些问题导致了很多人从使用Perl流失到其他脚本语言”,Raymond说,“我个人是这种趋势的一部分,我已经完全从Perl转向Python, 一门年轻的语言,有点象应用程序但是有更清晰的设计...我期望在未来Perl相关的重要性可能降低,即使它的开发人员的基数在绝对数字上持续增长,因为它的竞争者的增长将比Perl的竞争者快的多"。
Perl有很多优点,但决不清晰 —— 实际上使用Perl的黑客用"混乱"作为称赞的话。但是对于Perl的攻击者,甚至是Python的支持者,混乱犯了编程的大忌。
我最近从Perl的用户(同时也是Python的用户 —— 但他们并不总是喜欢Python)听到的最多的一个抱怨是 —— 当你有一段时间没有接触Perl后,即使你自己的Perl代码也很难再读懂 —— 更别提别人的Perl代码了。” GuidoVanRossun, Python的主要作者说,“对于过去的或者不熟悉的Python代码这很少是一个问题。当Perl的支持者极力提倡Perl用户写清晰的代码,并且较新的Perl版本包含一些帮助特性,Perl坚持“混乱”的价值意味这总是Perl的一个问题。”
在某种程度上,Perl/Python的争论只是无休止的那些为了体现黑客特性争夺主导权的比赛的另一个例子。但关键差别是真实的 —— 那些探询纯正和那些坚持工具的有效性之间的差别。“纯正语言的支持者总是说Perl是丑陋的”,O’Reilly说,“说
Perl是一个’厨房水槽’式的语言,说Perl会被他的自重压垮,而Perl继续比其他脚本语言的合集解决越来越多的问题”。
“我们出售关于Perl和Python的最畅销书,”,O’Reilly说,“并且我们继续看到Perl使用情况的健康增长,而Python的增长很平常。Perl的使用比Python高的多,至少根据书籍销售的情况来看是这样。”
“Perl并没有经历任何大规模的使用者分流“,Salzenberg说,”至多你可以说,在Perl继续发展的同时其他也在发展。这对Perl是很好的。当有许多事情需要胶合,一门粘贴语言是最有用的...Perl将继续发展以使得任何事情可以与其他任何事情
相连接。”
Wall让其他人反击对Perl的攻击。当我询问他对于Raymond的直接的批评的反应是,他发给我一份在线email,其中引用了托尔斯泰的话:“这真奇怪,托尔斯泰写道,漂亮就是好的这个错觉是如此地完美!”
对于@all,好就是作好连接,这正是他自身的美丽所在。
Perl不但连接了C程序员的世界和UnixShell的世界,或者连接了计算机世界的数字服务和人类现实不成熟的混乱。Perl还在自由软件世界的两个极端之间架设了一座桥梁,一方是Raymond为代表的商业实用主义,他们支持自由软件因为它作出了
最好的软件,一方是自由软件基金的RichardStallman领导的激进的道德学家,他们相信自由软件是绝对好的。
那些希望修改或者改变Perl的人们可以通过在两种不同的许可声明下的限制达到这个目的。他们可以在GPL下操作 —— Stallman的FSF制定的非常严格的许可证,为了保证自由软件总是保持自由。或者他们可以选择Wall自己的"艺术许可证" —— 一套更宽松的规则的集合,Wall说,这意味着“本质上,你可以用Perl做任何你想的事情,只要你把艺术的控制权给我就行了。”
它已经不会招致FSF任何过分的不满了,Wall说,但实际上艺术license接近与我在这个问题上的感受,我希望Perl能够被使用。
的确是这样。Perl在一个似乎是死路一条的地方开辟了一种可能性 —— 为什么有如此之多的Perl 黑客的一个主要的原因是,当被问到为什么他们喜爱Perl,一个简单的回答就是"fun"(有趣)。
我问Larry Wall为什么认为Perl有趣。“他让你富有创造力”,他说,“他给你众多选择。你常用的计算机语言就象一种训练,他会把你带到他到过的任何地方。Perl就象一辆偏离大路的汽车,将把你带到你想去的地方,即使到那里没有任何正式的道路。”
当你能够利用那种路径搜索的方法,你就从努力中得到回报。Larry Wall, 坐在Mountain View家中的起居室,抚摩他的小猫,听着回荡在房间中神秘的音乐,就象一个非常高兴的男孩。他对Web作出了有价值的贡献,Web不会让他忘记它的。
“几乎每一天,都有人会给我写一条消息说我喜欢你发明的那个东西”,LarryWall说,“它改变了我的生命,我曾经讨厌编程 —— 现在编程又是一个快乐的事情。”