最开头的时候 Steve 给了我两个选择:检索 C++ 或者是 Python。我觉得 C++ 的设计太繁琐,所以就选择了看起来好一点的 Python。Steve 就让我去找一个开源的 Python IDE,然后把里面的语义检索部分挖出来插入到项目里面。可是在看过十个左右的“Python IDE”之后,我发现它们没有一个能够正确的“跳转到定义”。分析其原因,是因为这些 IDE 基本上做的是正则表达式匹配,而完全不理解 Python 的语义。所以我对 Steve 说,我要自己从头写一个。但他反对这个提议,因为他觉得这是三个月的时间之内不可能完成的。不但是我不能,而且就算一个小组的人也不可能完成。就算完成了,他也不想“维护”这些代码。所以他宁愿让我去拿一个不怎么样的开源项目,因为这样“维护”的工作就转嫁到开源项目身上去了。
在 Google 的整个夏天,我都觉得跟其他人没有共同语言。我感兴趣的东西,他们一点都不了解,所以我也不想谈。我觉得不以为然的一些东西,却被捧上了天。总体感觉就是过度“和谐”,像是回到了小学。每个人都像是“祖国的花朵”,对 Google 的一切都赞不绝口。你本来有时不想笑,不想说好话,身边的“社会压力”却让你不得不满脸堆笑,所以很累。没有人说真话,以至于你不知道到底什么好,什么不好。
人们总是喜欢谈论一些人的显赫“地位”,传说他们如何的“牛”。比如,有一次几个人在谈论一个 Google 的“牛人”,说他做了一个多么了不起的项目,很快就升为了 Staff Software Engineer (“Staff”是比“Senior”高一级的职位,Steve 就是个 Staff)。我去看了一下这项目,发现不过就是 JUnit 的“C++ 版本”。JUnit 这东西技术含量本来就是相当低的,做这样一个东西就能当“Staff”,那我岂不是轻而易举就可以成为“Principal”了?哈哈。我心里这样想,但是没有说出来。一个 Staff 就如此,谈到 Google 的两个创始人的时候,有些人就简直是黑白不分了。对他们的各种武断的甚至不讲理的做法,居然都津津乐道。创始人在他们眼里俨然就跟皇帝一样,他们做什么都是对的。甚至有人以自己的办公室在创始人办公室的正下方为豪。这种浮夸和互相吹捧之风,恐怕是在其它公司也少见的。Google 要求员工们保持一种“Googley”的态度,原来就是这样的态度,过度的“正面”和“积极”。美国所崇尚的“个人主义”和“批判性思维”,在 Google 貌似高度缺乏。
另一些时候,我会遇到一些对某种语言或者技术有宗教情绪的人。有一次吃午饭,一个工程师主动坐到我面前,像是在面试我一样,正儿八经的开始自我介绍,后来我们就谈到 C++。我说 C++ 设计实在是太繁琐了,其实很多简单的语言效率并不比 C++ 低,C++ 最近其实在向其它高级语言学一些东西…… 后来这人就不说话了。那天以后我就发现跟他打招呼他都不理了。后来我才发现,在 Google 是不可以指出某种语言,特别是 C++ 的缺点的。C++ 在 Google 的“势力”之大,连 Java 都只能算二流货色。
最搞笑的其实是 Google 总喜欢故弄玄虚,把一些微不足道的东西说得很玄乎。很多文档,视频,活动都挂着“Google Confidential”的标签。等你去看了,却发现其实是众所皆知的东西,没有什么机密可言。可是大部分的实习生们却有一种受宠若惊的感觉,以至于产生优越感。每个星期五,都会有一个“TGIF”,两个创始人会像主持人一样组织一个大会。本来无可非议,但是总感觉气氛过于群情激昂了,有点像小学的时候升国旗开大会的感觉。好不容易大家聚在一起,总是在听新闻发布,不然就是谈工作进度,不然就是表彰某些人。总之,你总是感觉在受到某种挑拨,有一种传销公司大会的感觉。大家轻轻松松一起玩的真正的 party,却非常稀少。
由于 Google “免费”提供一日三餐和娱乐,健身设施,你总是感觉欠了公司什么一样,而其实这些钱都是出自你自己的劳动。而且因为这些设施离工作的地方太近,你总是感觉 Google 在你的生活里无所不在,连玩的时候都在想着它。Steve 经常叫几个人出去 Starbucks 买咖啡,我开头还觉得奇怪,因为 Google 有上好的咖啡机。后来才明白原来他们只是想出去换个环境和人气。一些别的公司的人(比如我寄宿房子的主人)也在疑惑,Google 的员工到底有没有下班的时间。
我就是这样度过在 Google 的每一天,以至于后来我都不怎么在饭桌上吃饭了。自己把饭端到靠墙的吧台去吃,或者坐在“冰激凌吧”跟里面的厨师聊天,省得遇到一些高谈阔论的人无语。我发现自己跟打扫卫生的大妈小妹们也谈得来,她们也喜欢跟我说话。后来我发现有这种感觉的不只是我,另外两个比较厉害的博士生也懒的在那边吃饭了。其中一个说他一个星期就把自己的项目做完了,然后假装仍然在做,免得又被增加任务。这就是所谓“能者多劳”吧。掌握了核心技术的人,往往会有一般程序员几十,上百倍的效率,可是得到的“回报”却是更多的任务量和压力。
皇帝的织布工
虽然 Steve “允许”我自己从头做一个 Python 分析器,但这却不是没有压力的。这种感觉就像是“皇帝的新装”里的织布工一样。我扬言自己会做出精美绝伦的布料,皇帝的大臣们却看不见,所以他们就相当的小心。总是对我很敬畏的样子,有时会来问候一下,做得怎么样了。可是一旦扯到深入的话题,却又怕被看穿其实他们不懂很多东西。因为我的教授们研究 Scheme,所以 Steve 有时候也会很激动的表扬 Scheme,或者类似 Scheme 的语言比如 Clojure。这种奉承真的让我受不了,生搬来的术语都是错乱的,所以经常来回两句之后,他就无语了。为什么程序语言总是引起这种宗教的态度,不是抵制就是膜拜?
直到有一天,我才发现 Steve 为什么这么紧张。那天有另一个“分舵”的 director 来访,给我们做了一个关于“创新”(innovation)的演讲。基本内容就是说,技术上的创新,如果吸引不到用户,那就不算什么创新,拉得到用户的东西才叫创新。完全就是扯淡嘛,可是他那个气势真像是在宣布圣旨一样。
那天下午,这个 director 来到我们的办公室。表情严肃的“审问”Steve:“你说你每天有 5000 个用户。可是 Google 总共还不到 10000 个程序员。你是怎么算的?你把接受你的服务的那些下游项目的用户全都算进去了吧!”唉,想不到大名鼎鼎的 Steve Yegge 在这种钦差大臣面前也只能唯唯诺诺。
我可以说,这个 Python 的东西,虽然没有费特别多力气,但却是 Google 里很少有人可以做出来的。所以实际上这个东西在很大程度上拯救了这个濒临灭亡的项目,因为一旦 Grok 支持所有的“Google 语言”,就会有很多人注意到这个东西,从而会有“影响力”。这确实是后来发生的事,我走了之后,Grok 开始通过 API 给很多项目提供服务,包括 CodeSearch。
Google 给我的那点工资,其实是根本买不起这样的软件的。你可以参考一下像 CodeSonar 之类“静态分析”软件的价格,一份基本上就是我三个月的工资。由于我上学想找点外快,让他们捡了一个便宜。可是这种“上级领导”的压力居然也间接的传到了我身上,而且是以一种非常不尊重的方式。这种感觉就是,你做得再多再出色,你相对于 Google 的“大拿”们,什么都不算。这也许就是 Google 为什么雇佣 Dennis Ritchie, Brian Kernighan, Ken Thompson, Rob Pike, Peter Norvig, Guido van Rossum 等大牛吧。因为它就可以说:“看我们 Google 有这些顶尖牛人,你算个什么,要不断努力!”Steve 不止一次的对我说:“你要为 Google 做出杰出的贡献啊!Google 的东西总是最好的,你要做出 Google 一贯的品质来。你知道 Python 的创造者 Guido 也是 Google 的员工吗?我一定会在他面前给你美言几句。” 这种语气,我好像在几十年前的中国听说过呢?“你要为祖国做出杰出的贡献!”他也许以为我会受宠若惊,可是我心里却不是个滋味。
这些就是我对 Google 的印象。有好几次我都看到很不错的工程师进入 Google 之后就销声匿迹了,为 Google “默默奉献”,不再有自己的发明创造。我感觉 Google 就是一个埋没人才的机器,而它的“创造性”的名声,却让越来越多的人才被埋没。主动找上门的人才被埋没了不说,还吞并其它公司,并且对他们施行同样的“Google 文化”,埋没更多的人才。
Google 总是号称自己的工程师“build things ground up”,实际上却总是拿一些现成的代码来修修补补,往往耗费更多的时间。当你真的想要“从头”做起,却发现重重的阻碍和压力。
Google 跟其它公司有一个明显的区别就是,Google 不稀罕你,你不被尊重,你活在某些你说不出他哪里牛的“大牛”的阴影下。我没有很多其他公司的工作经历,但是我面试过其它一些公司。也许它们在技术上或者名气上会比 Google 差一些,可是我能感觉到他们对人才的渴望和尊重。所以如果你有很强的能力,何必去 Google 受气呢?无论你走到哪里,那个地方就随你而改进。