C++
C++ 是地球上最蠢的语言,即使是从蠢这个字的真正意义上出发。C++很无厘头。它不知道自己是什么东西。它没有内视(面向对象里的一个概念,译者注)。C也没
有,但是C不是“面向对象”的,而面向对象很大程度上是关于要让你的程序知道它自己。对象就像演员。所以面向对象语言应该有运行时的自省机制,知道自己是
个什么类的对象。C++不是这样的,真的,你不会那样用它。
关于C:写一个C的编译器是那么的简单,以至于你可以用C写一个关于C的工
具,用起来就像是有内省机制。而C++呢,基本上是不可解析的,所以如果你想写一个很牛逼的工具用来—比如,告诉你你的虚函数的原型,或者帮你重构你的代
码,你将不得不依赖别人的工具集,因为你自己在除非脑子进屎的情况下是根本不会去写一个C++的解析器的。而市面上所有的C++的解析器都很傻逼。
C++很蠢,你不能用蠢语言创造一个好系统。语言决定世界,蠢语言决定蠢世界。
所有的计算都基于抽象。你用低级的东西创造出高级的东西。但是你不能用分子创造出一个城市。尝试使用太低级别的抽象只会给你带来麻烦。
我们就惹上麻烦了 (是指亚马逊的员工,还是所有C++的程序员? 我也不知道,译者注)。
理智的情况下,你用C写的最大的东东就是一个操作系统。而操作系统其实不是很大的,真的。它们看起来很大,但那是因为它们有很多应用软件,操作系统本身的内核是蛮小的。
你 用C++能写的最大的东东是…也是操作系统。好吧,或许稍微再大点儿。让我们说,再大三倍吧。或者10倍吧。但是操作系统内核最多也就,那啥,一百万行代 码?
所以我说你能用C++写的最大的系统大概也就是一千万行代码吧,再大的话就开始不行了,这玩意儿你没法控制了,就像恐怖片里的…
我说的一千万行是指如果你那时候还能让你的系统编译通过的话。
我们(在亚马逊,译者注)有五千万行C++代码。不,现在还要更多了。我已经不知道有多少行了。上个圣诞节是五千万行,那是九个月前,而它以每季度八百万行的规模增长。增长率本身也增长,妈呀。
我们想这个系统里干点啥好像要一万年。一个亚马逊工程师有一次这样描述我们的代码库:“一座很大的屎山,你见过的最大的山,每次你想修正一个bug,你的工作就是爬到屎山的正中心去。”
伙计们,那哥们可是在四年前说的这话。他现在已经到更环保绿色的牧场上去了。真是太可惜了,他可是个实实在在的高手啊。
这 都是C++的错。别跟我争论。就是的。我们用的是世上最蠢的语言。这简直有点老板级的蠢,你说呢?
(译者注,meta在计算机术语里通常表示更高一个层次,比如,meta-language,比普通的language高一个层次,意思是关于语言的语
言。哲学里应该会经常用到这个词。我不懂哲学,但是我觉得老板们总是比我们高一级,所以meta-dump我就翻译成老板级的蠢喽。:-)
说 了以上这些难听的话,话得说回来了。用C++写出漂亮的代码显然是可以的,我的意思是说,这样的代码应该大部分还是C,偶尔很有品味的,很有节制的用一点
C++。但是这种代码几乎从来不会被写出来。C++是个很好玩的游乐场,而如果你把它玩儿得门儿清的话你会觉得自己特牛,所以你总是被诱惑把你知道的所有
的东西都用上。但是那是很难做好的,因为从一开始这个语言就太狗屎了,最终,你会弄得一塌糊涂,即使你很能干。
我知道,我说的都是异端邪 说,该被钉到十字架上的。随便吧。我在大学里的时候老喜欢C++了,因为我那时候就只知道这一门语言。当我听到我的语言教授,Craig
Chambers,绝对的厌憎C++,我想:“为啥呢?
我觉得它挺好的啊”。而当我听到STL(标准模板库)的发明者被采访时说他恨OOP(面向对象编程)时,我更是认为他肯定是磕药了。怎么会有人恨OOP
呢,而这个人竟然还是STL的发明者?
亲不敬,熟生厌(语出圣经,译者注)。说的是在大多数情况下,跟一件事物熟悉了之后你就失去对它的膜拜尊敬了;
在计算机语言里情况不是这样的。光对一门语言熟悉不会导致你看轻这门语言。你必须成为另一门更优秀的语言的专家(才能让你明白原来那门语言有多么多的问题)。
所 以如果你不喜欢我针对C++大放厥词,请你去学另一门语言并成为一个专家(我推荐Lisp),只有那时你才有足够的武器与我争论。然而,那时你将不会跟我
争了。你上了我的当了。你也会跟我一样变得不喜欢C++了,你或许会觉得我这个人很恶心,把你骗得不喜欢自己曾经的最爱了。所以或许你应该把我说的一切都
忘了。C++挺好的其实,真的。它就是很棒棒(译者注,作者在这里用了ducky,这是一个女性喜欢用的夸某物好的词,近来也为玻璃们喜爱)。忘了我说的
话。C++不错的。
Lisp
(我打赌这一节会让你觉得惊讶,即使你已经关注我的博客有一阵了 (译者注,作者也可能是说,即使你成为亚马逊的员工有一阵了)。)
亚马逊创业之初,我们有很多明星级的工程师。我不认识他们所有人,但是我认识几个。
比如? Shel Kaphan。大拿。Greg Linden。大拿。Eric
Benson。即使在他加入亚马逊之前就已经有自己响亮的名气了。也是大拿。
他 们写了Obidos服务器。是Obidos让亚马逊成功的。只是后来那些生产大便很拿手的工程师,网页开发者,搞前端的人—这些人因为生产大便很拿手而总
是能让经理们满意—只是在后来这些人把Obidos搞糟了。(他们的大便)把整条河都堵了,打个比方说的话。但是Obidos是亚马逊最初的成功的一块关
键的基石。
这些最早的牛人们在亚马逊神圣的代码库里只允许两种语言:C 和 Lisp。
你自己去想吧。
当 然,他们所有人都使用Emacs。靠,Eric
Benson是XEmacs的作者之一。这个世界上所有伟大的工程师都在用Emacs[注1]。那种世界因你而不同级别的伟大。不是坐在你旁边的格子里的
那哥们那种伟大。也不是Fred,走廊尽头那哥们。我说的是我们这个行业里最伟大的软件开发者,那些能改变这个工业的面貌的人。像James
Gosling们(Java语言设计者),Donald Knuth们(这个人没有听说过的话赶紧改行吧,别搞计算机了),Paul Graham们[注2],Jamie
Zawinski们,Eric
Benson们。真正的工程师用Emacs。你必须很有点聪明才能把Emacs用好,而如果你能成为一个Emacs大师的话它会给你难以置信的牛力。有机
会的话你应该站到Paul
Nordstrom的肩后看看他是怎么工作的,如果你不相信我的话。对那些一辈子都在用烂Visual。Net之类的集成开发环境的人来说,一定会大开眼 界的。
Emacs是那种你可以用100年的编辑器。
Shel,Eric,Greg,和其他像他们那样的人,我没有足够幸运能跟他们直接一起工作:他们禁止在这里使用C++,他们禁止使用Perl。(或者Java,为完整起见)。他们是明白人。
现在我们都在用C++,Java和Perl了,所有的代码都用这些语言。我们的前辈们已经到更环保的牧场上去了 (指没有大便的牧场,译者注)。
Shel 用C写了Mailman,客服部的人把它用Lisp封装了一下。Emacs-Lisp。你不需要知道Mailman是什么东西。除非你是个Amazon的
老员工,或许不是搞技术的,而且你曾经不得不让客户哈皮
(只有在这种情况下你才需要知道Mailman,译者注)。不是间接的,因为你用C++写的一个狗屎功能跑不起来了,让客户很生气,于是你不得不去搞定它
以恢复客户的哈皮度。不,我是说直接的,意思是,你必须跟他们聊。我们可爱的,不识字的,呱呱其谈的,心地善良的,充满希望的,困惑的,能帮点小忙的,愤
怒的,哈皮的客户们,真正的客户们,那些从咱们这里买东西的人,我们的客户们。(如果你必须跟他们打交道的话,)那你就会知道Mailman这个东西。
Mailman是客服部的客户电子邮件处理软件,我们用了它有…四,五年? 反正是很长时间。它是用Emacs写的,所有人都爱死它了。
人 们现在还很爱它。直到今天,我依旧不得不听我们一些非技术员工跟我长篇大论的叨叨他们是多么的怀念Mailman。我可绝不是满嘴喷粪。上个圣诞节我参加
了一个Amazon的派对,一个我不知道自己怎么会被邀请的派对,里面全是些西装笔挺的商务人士,谁都长得比我帅,比我光鲜。以及一些我在公司里曾经打过
交道的人(这句不知道怎么译)。四个美女认出了我是在客服部里干的,把我包围了,跟我说了十五分钟她们是多么的怀念Mailman和Emacs,而现在的
亚马逊(我们用JSP花了好多年准备换掉Mailman的那一套软件)是怎么的不能满足她们,让她们觉得跟以前一样爽。
这一切都太梦幻了,我觉得她们可能是喝多了。
Shel 是个天才。Emacs是天才。连非技术人员都爱Emacs。我现在就是在Emacs里打这些文字。我绝不情愿在任何其他地方打字。这不只是关于让你的效率
得到飞跃,通过那些地球上其他地方找不到的快捷键和文本编辑功能。我每分钟打一百三到一百四十个英文单词,在Emacs里,当我在写没有格式要求的文本的
时候。我测过这个时间速度。自己写了一个测打字速度的Emacs应用。但我想跟你说的不只是这个。
Emacs有的是一种你叫不出名字来的品质。
我 们现在不用Mailman了。那是因为我们有一种叫得出名字的品质—就是,烂。我们很烂。我们(当时)找不到Emacs-Lisp足够牛的人把
Mailman继续搞下去。今天这应该不难了; 亚马逊现在到处都是Emacs
Lisp的黑客。但是在那时候,客服部的人没法从别人那里得到帮助。于是他们就用他们当时手头有的资源去搞这件事。他们当时没有足够多的Emacs-
Lisp的人。有一段时间,他们甚至找来Bob Glickstein当合同工,那个给O'Reilly写了那本Gnu
Emacs扩展的书的家伙,坐在一个小办公室里给Emacs写Mailman的扩展。
客服应用部是Amazon的第一个两块比萨饼的团队
(我也不知道什么意思,看下文)。这个团队是完全自立的。不管是那时还是现在。没人跟他们说话,没人帮他们。没有枪,没有炮,他们自己造。他们没有网页工
程师,没有支持工程师。屁也没有。有的只是一堆骨灰级的工程师和一个能带新人的文化。这就是他们需要的一切了。
但他们最终不得不让Mailman光荣退休。妈哎。而我呢今天还听到人们说他们是多么的怀念它。甚至在派对上。
我想今天按人头比例来说,客服部仍然拥有比亚马逊任何其他团队更多的Lisp黑客。可能他们用到Lisp的机会不多了,但是Eric
Raymond说过,即使你很少用Lisp写程序,学习Lisp会是意义深远的一个经历,能让你下辈子都成为一个更好的工程师。
卡尔,宗教现在已经不是大众的精神鸦片了。现在鸦片是集成开发环境了。(卡尔。马克思。这个人不知道的话应该打屁屁)。 |