Skip to content

Latest commit

 

History

History
31 lines (16 loc) · 6.88 KB

再见 Voxer,你好 Sourcegraph.md

File metadata and controls

31 lines (16 loc) · 6.88 KB

再见 Voxer,你好 Sourcegraph

作者:王垠

话说离开 Coverity 之后,在 Coverity 创始人和 CTO Andy Chow 的介绍下,我加入了一家叫做 Voxer 的公司,成为了他们的第一个“Data Engineer”。尽管我讨厌 Coverity,但我不得不承认 Andy Chow 是个特别好的人。要是我直接在他手下做事,那可能不至于这么快离开 Coverity。可惜啊,似乎每个 startup 在外部资本介入之后,权力都不再集中在最初的 founder 手里,以至于可以出现“部门暴君”,连创始人都拿他没办法。到现在看来,离开 Coverity 还真是明智的决定,它拯救了我的身体,心情和不少的脑神经。我求上帝保佑仍然在 Coverity 工作的中国同事们。

话说这个 Voxer,它是一种手机 app,作用相当于一个对讲机。跟很多类似的软件(比如微信,Heytell, Whatsapp)不同的地方是,Voxer 的语音传输有各种专利的设计,速度非常快。所以很多需要高效通信的机构(比如出租车公司,快递公司,机场)在使用这个 app。然而我在 Voxer 的工作不是设计这个 app,而是跟一位 data scientist 一起做“大数据”分析。这是跟我的专长非常不同的工作,但由于 Coverity 伤了我的神经,我想换换口味。后来我发现,我迅速的看透了这“大数据”里面的机要,并且设想出了更好的设计。

跟我合作的 data scientist 名叫 TJ,他以前是个天体物理学家,在各大天文中心待过好多年,可谓是看饱了宇宙的奥秘,发表论文 100 多篇。TJ 就是我从小向往成为的那种人:科学家。我一直都非常尊敬 TJ,然而他却谦虚卑微得不得了。我不得不说,这个世界对真正的科学家是非常不公平的。TJ 也是看透了学术界的腐败,迫于美国政府削减天体物理开支的压力,才不得不放弃自己心爱的事业,转行做了 data scientist。曾经使用 Mathematica 和 IDL 的他,现在的主要工具是难用的不得了的 Hadoop,Pig 和 TSV 格式的数据文件,而且每天都有各种 marketing,sales 的人给他提出各种数据分析的要求。

我忽然间发现,科学,对于消灭人类的愚昧和偏见,真是没有多大用处。科学家,其实是社会上的弱势群体。

我和 TJ 愉快的合作了两个多月。我不得不说,Voxer 是一家跟 Coverity 气氛非常不同的公司。我没感觉到过任何压力,没有苛刻的任务时间限制,也没有遭遇到过自大狂。不过从工作的角度说来,我感觉这两个月真的只是散了一下心,没有干多少有创造性的事情。我大部分的时间花在了 “折腾”各种 graph database 上面,这让我感觉回到了写出《完全用 Linux 工作》的那个自己。人们都误以为“精通”某种工具的人很厉害,而抱怨某种工具“对用户不友好”的人就是菜鸟。然而从前的那个精通 Linux 的自己,却是现在最瞧不起我的那种人。他只知道如何转弯抹角的使用各种难用的工具,而不是设法让困难的事情变得简单和容易。自认为是高手,而其实是个没看透东西本质的菜鸟和暴君。

TJ 从来不认为自己是写 Pig 和处理 TSV 文件的高手,所有的计算机工具对于他来说都是临时拿来凑合一下。他很希望有一种方便的工具,可以让他不需要再使用落后的文件来存放数据。再加上对“社交网络”进行分析的需求,我们就走上了探索和折腾各种 graph database 的道路。我们探索的第一个 graph database 是 Neo4j,使用它的原因是我们的 VP 对它非常推崇。开头我还很兴奋,因为我早就从本质上看到了关系式数据库的缺陷。我希望已经有人设计出简单好用的数据库,可以让我像操作内存数据结构一样简单而任意的操作磁盘数据。

然而过了一段时间之后,我发现我的希望破灭了:Neo4j 跟我的目的是背道而驰的。Neo4j 的 Cypher 语言,完全是语言设计的门外汉用来练手的作品。不但表达力有严重缺陷,而且根本不能达到传说中的性能。在对 Neo4j 失望之后,我又测试了 OrientDB, Titan, InfiniteGraph, ... 最后发现它们没有一个能够达到我们的需求,甚至比 Neo4j 更差。不得已之下,我们花钱请来了一个 Neo4j 的 consultant,跟我们一起折腾了一天,结果最后得到的答案是:不要使用最新的 2.0 版本,要用 1.9.4,要减少数据量,让它可以完全放进内存,各种隐秘的“设置”搞了一堆,不要用 Cypher,因为优化做得还不好,并且还要自己用 Java 写“扩展”,才能达到我们所要的基本性能需求。这就是号称 "the world's leading graph database" 的 Neo4j。这跟以前看过的一个漫画里的“超级跳蚤药”的说明书有什么区别吗?这个说明书是这样的:

抓住跳蚤

把跳蚤的嘴掰开

把一粒药塞进跳蚤嘴里

闭上跳蚤的嘴,等五分钟

在 Voxer 的每一天都很轻松,因为 Neo4j 实在是太慢了,光是把数据导进去都要花一两天时间,错了还得重来。有时候从早到晚我就让 Neo4j 自己跑,然后就去喝茶。我已经看到很多人羡慕的目光 ;-) 然而,这还是我自己吗?我感觉到自己的理想正在离我而去,就像 TJ 的理想离他而去一样。我是世界上最优秀的计算机科学家和程序语言专家之一。我不应该把自己的才华浪费在折腾这些无能的数据库上面。我的目标之一应该是设计出全新的数据库系统,完全的改善人们使用数据的方式,而不是绞尽脑汁让一些无可救药的系统能够凑合工作。

就在这个昏昏欲睡的时候,Quinn 和 Beyang 找到了我,告诉我他们采用了我在 Google 写的第一版 PySonar 代码,并且成立了一家叫做 Sourcegraph 的公司。他们想成为世界上最大最精确的代码“语义搜索”引擎,想请我加入他们。程序的语义检索网站,这是我在 Google 的小组试图要做的,然而现在却被这两个毛头小子先做了出来,我不得不佩服 Stanford 同学们的创业精神。随后,我们进行了好几轮的“面试”。从来面试都是别人考我,这次却是我对 Quinn 和 Beyang 提出各种刁钻问题。从技术到市场和投资,一一问了个清楚,甚至他们的天使投资人还给我打了电话。真可谓是三顾茅庐了。最后,我相信了 Quinn 和 Beyang 的实力和活力,看到了他们对于真正优秀的技术的向往,所以虽然工资比 Voxer 少了不少,我仍然决定了加入 sourcegraph,成为他们的 No. 4。那么 No. 3 是谁呢?是 Quinn 的 Mlton,一只会写编译器的大狗。

人生的快乐真的不是钱能买得到的。能找到喜欢的事情做,找到合适的合作伙伴,才是最重要的。