随便写点1每当一段时间没写博客就会有人来“督促”我,仿佛他们觉得写博客是我毕生的事业一样,然而其实我一直没有把博客当成很重要的东西。我不需要人的注意力,相反,它让我觉得不舒服。有时候写博客,只不过是觉得有些事情有必要让更多人知道,否则这世界上就没有人知道真相了。我曾经认为世界上有更重要的事情做,比如设计一个新的程序语言,用它写出一个全新的操作系统,全新的数据库,或者完全的消灭这三者之间的界线…… 然而,这些真的是最重要的事情吗?有多少优秀的设计,最后都由于人们的眼光问题而无人问津,逐渐消亡。所以我发现其实最重要的事情,是提高人们的觉悟。换句话说就是教育,真正的教育。 再好的设计,如果没有人理解都等于白搭。这就好像很多伟大的艺术品,要直到作者去世很多年之后才有人发现它的价值。显然如果我设计一个新的语言,它会使用跟 Scheme 类似的语法(实际上我已经设计了很多个这样的语言)。一听到这个,很多人的兴趣就已经消亡殆尽,因为他们“讨厌括号”,“害怕括号”。人真是一种不可理喻的动物,平坦的阳关大道不走,尽喜欢去折腾一些乌七八糟的东西,这让我看到了多年前的自己。 最近由于工作需要用了一下 JSON,才发现它相比S表达式是多么的愚蠢和多余,却被很多人推崇。JSON 的表达力显然不是S表达式的对手,却连“简单”这一初衷都没能达到。就这么点东西,搞出好几十个 parser,各自还有恼人的 bug。最流行的一个叫 Jackson 的,处理大量数据的时候,性能居然还能成问题。从 Unix 那屎一样的 “纯文本哲学”,到 XML,到 JSON,程序员们跳进一个个的大坑,却始终不肯选择最直接,最容易,最优秀,最古老的东西。 我现在理解了,其实大家选择麻烦的东西,是为了创造更多的就业机会,为了可以继续有饭吃。这也就是干净迅捷的技术被排斥的原因,因为事情一旦变容易,就业的机会就变少了。这原理其实跟多年前中国某些城市的清洁工人故意破坏扫地机的行为类似。叉头扫帚万岁,JSON 就是程序员们的新扫帚。只要人剥削人的社会制度存在,这种行为就不可避免。不过作为一个聪明人,我还是继续用我的S表达式全自动扫地机。 2离开 Coverity 之后,我跟很多个公司面试过。从与他们的对话中,我了解到了软件行业的实情,也更加深刻的理解到了自己独特的价值。对于 IT 行业的风气,我不得不用“无可奈何”和“一知半解”这样的词汇来形容。很多人所谓的“技能”,在我眼里不过是会用各种蹩脚的工具拼凑一下而已,有实力设计和实现这些工具的人极其稀少。 有人看见我做的 Python 静态分析,就以为我是一个厉害的“Python 程序员”,于是请我去面试。可是没想到第一个面试问题就是:“Is everything an object in Python?”对于这种弱智的问题,我真的没法回答,因为“Everything is an object”这句话对我来说本来就是无稽之谈。什么是 everything?什么是 object?可是我实在是太友好,太委婉了,都不直接指出这其实是愚蠢的问题。所以在面试者的眼里,我看起来就是懵了,就是徒有虚名的 Python 菜鸟。 所以到后来再有人找我做 Python 相关的工作,我都一概不理了,因为选择 Python 做主要编程语言的公司一般都比较白痴。先搞清楚静态分析和类型推导是什么级别的东西再来联系我好不好?要搞清楚,你们是在跟一个水平远在 Guido van Rossum(Python 的创造者)之上的人说话。他根本不屑于写 Python 程序,也从来没把那个 Python 分析器里面的“Python”当回事。他对这个项目引以为豪的原因其实是因为他从中获得了对“任何语言”(而不只是 Python)进行严密的静态分析的方法,并且他是完全独立的发明了这个方法。做出这个东西教会他的东西,让他在这一领域的技术水平远远处于 Coverity 的所有工程师之上。然而这只是他完全独立的发明的东西中的一个而已,他对 Python 不但没有任何感情。然而由于你们的愚蠢,他现在对 Python 只剩下鄙视。 如果你真想知道我的 Python 分析器有什么用处,它每天都会把 Google 的所有 Python 代码分析一遍。也许不久以后,它就会被用于分析全世界的 Python 代码。请看这里 :-) 3有人貌似觉得我“光说不做”,高估自己,没有“贡献”。我真的不明白,要什么样的事情这些人才认为是“贡献”。而当我搞清楚什么才是他们心目中“有贡献”的人,我哭笑不得。对啊,按照这样的标准,我就是没有贡献。我以自己没有贡献为豪! 不过我对自己水平的估计其实是相当准确的,然而我常犯的错误其实是高估了别人。正应了罗素那句话:这个世界的问题不在于傻瓜和疯子总是自以为是,而在于智者总是充满对自己的怀疑。(“The whole problem with the world is that fools and fanatics are always so certain of themselves, and wise people so full of doubts.”) 我总是怀疑自己,经常以为别人把什么都做好,做对了。可是每次仔细一看之后都大跌眼镜,发现别人的设计与想象中差得老远。现在有一大堆的东西我都希望重新设计,包括程序语言,操作系统,数据库,互联网,手机,甚至国家和社会。还是自己动手才能丰衣足食啊。 4在技术方面我做的已经太多了,做得已经不想做了。如果你知道我头脑里的“计算机科学”是什么样子,肯定会大吃一惊,因为计算机系教会我的东西,几乎全都被我故意的忘记了。我的头脑里有着简化了很多倍的理论和设计。实现过好几十个语言,包括异常强大的类型系统之后,实现各种程序语言特性对我来说都是家常便饭。我也深刻的认识到操作系统和数据库的本质。我深深地知道自己对这些东西理解其实已经处于世界的巅峰,以至于我经常都觉得别人的“新理论”,“新系统”很无聊。 有人问我想不想换一个导师拿个博士学位,可是浏览了世界上最顶尖的一些教授的论文之后,我发现他们写的东西,我其实早就理解了。而且我是用比他们更简单的方式,自己摸索出来的。我的许多知识直接建立在直觉之上,而不是别人的理论和公式,所以我的知识比起其他人的,其实有着质的不同。建立在直觉之上的知识,让我可以轻松地衍生出新的知识,而建立在别人的理论和公式之上的知识,却很难再有发展。我不愿意再跟没有深刻见解,却又把自己的理论看的很重的教授合作,不愿意附和他们的繁复而没有实质的理论。所以不只是博士的头衔对我失去了吸引力,计算机科学世界里的几乎一切(包括图灵奖),我都已经不在乎。我觉得很无聊,我已经到了不得不学点别的东西的时候了。 5拿自己跟别人指名道姓的比较,是一件很尴尬的事情。可是如果不知道自己的相对水平,却又是一件不安心的事情,所以我想了一个办法,用来判断我跟一些著名专家在学术上的相对地位。通常来说,如果我看一个人的书或者论文,发现他说的东西我早就自己想出来了,而且理解更加深刻,从他的书和论文里我学不到任何东西,甚至觉得思维受到严重牵制,那么我就知道自己的学术已经在他之上。 那么我看哪些人的东西有这种感觉呢?这些人包括了大名鼎鼎的 Per Martin-Löf, Robert Harper, Benjamin Pierce, ... 有些人很推崇 Haskell 这样的语言,对它们的创造者顶礼膜拜,可是我最看不起的就是那些针对 Haskell 的论文。本来对于任何其它语言都很简单的一个问题,甚至不是问题的问题,一遇到 Haskell 就变成了罗里吧嗦的 paper,标题必为“A Monadic Approach to Something-I-Already-Know”。所以像 Simon Peyton Jones, Simon Marlow 这帮人的 paper,我觉得言之无物,早就不看了。 其实在程序语言领域,只剩下极少数几个人真正值得我的钦佩,他们的论文我有兴趣看。这里我只提一个人的名字,他叫 Valentin Turchin。 6我发现计算机科学(以及 IT 业)的世界是一个经不起表扬的,欠揍的世界。你越是显得友好,好奇,不耻下问,他们就越是觉得你什么都不懂,越是拿居高临下的态度对你。然而如果你越是鄙视他们,越是目空一切,他们就越是尊敬你。记得有一次,我认识了一个 UPenn 的 PL 学生。出于表示亲切,我告诉他我知道 Benjamin Pierce (他现在 UPenn 任教),并且看过他的 Software Foundations 的前几章。结果呢,他顿显居高临下的态度,说:“那本书其实是我们本科生第一门编程课的教材。”好心恭维了你们教授几句,就真以为我什么都不懂了哦。 然而事实其实是,我的水平远在 Benjamin Pierce 之上。我看 Pierce 那书的时候直冒火,因为它压根就没讲清楚问题的实质,浮于工具的“使用层面”而不是创造者的角度,让人知其然而不知其所以然。这 tactic 那 tactic,到底什么时候该用哪一个,他压根没讲清楚,不然就是他自己都不明白。后来看了 Dan Friedman 的 The Little Prover 手稿,我才发现 Friedman 对类型系统,定理证明系统的理解,其实远比 Pierce 接近本质。实际上 Pierce 很多年前曾被 Friedman 招募到 IU 任教,然而 Pierce 是唯一一个被 Friedman 招募却又离开 IU 的教员。Pierce 的 Types And Programming Languages (TAPL) 我也压根就没看过,然而我对类型系统的理解却比 Pierce 深刻很多,以至于当我真正看到 TAPL 和它的“Advanced”版本的时候,其实早就知道那是怎么回事。那大半本书里讲述的其实都是有严重局限的,过时的,没用的理论。Pierce 的博士论文我也看过,是有关 intersection type 的。那真的是一堆天书公式,可实质上没有多大用处。悄悄告诉你们,一年前我轻松的实现了世界上最强大的 intersection type system。我希望对 Benjamin Pierce,Robert Harper 等人顶礼膜拜的 PL 学生明白,世界上还有比他们厉害很多的人,他们在三四十年前就已经得到了比现在的大牛们先进很多的理论。 7再说说最近流行的“新语言”吧。被 Go 和 Scala 吵得很热的那种 interface 设计,其实是我在好几年前就已经试过,并且抛弃了的做法。我的电脑里有我自己设计的十多个稀奇古怪的类型系统,几乎每一个都比 Go 和 Scala 的强大而且简单。这就是我为什么对它们所谓的“新设计”都不屑一顾。如果你想了解我心目中最好的的类型系统大概是什么样子,可以参考一下我的 Python 静态分析器里的类型系统,以及 Typed Racket。当然,我得告诉你,我的“时代”比起它们又进步了 :-) 8前段时间我有时还去参加一些 Scala 和 Clojure 的“meetup”,可是后来我发现这些圈子里的人有一种诡异的“气质”,让我觉得不大舒服。过度兴奋,过度热情,喜欢当跟屁虫,对这些语言的弱点视而不见,老喜欢把一些东西当救世主,等等。我参加的最后一个 Scala meetup 是一个 panel,首席嘉宾是 Rod Johnson,也就是 Spring Framework 的作者(现在 TypeSafe 工作)。他那天对于函数式语言的那些言论,简直可以用浑水摸鱼,空话大话天花乱坠,专骗外行来形容。跟 Spring 的那些教程一个德行,广告成分多于实质内容,说半天抓不住关键。TypeSafe 找这样的人来搞宣传,让我看到了 Scala 的实质动向。在这种地方人人都在高谈阔论函数式编程,却没有发现一个真正的函数式语言专家在那暗地里摇头。 最后,我悄悄地退出了 Scala 和 Clojure 的 meetup 小组。 |