王垠现在Sourcegraph

再见 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,他不久以前还是个天体物理学家,PhD,在各大天文中心待过好多年,可谓是看饱了宇宙的奥秘,发表论文 100 多篇。TJ 就是我从小向往成为的那种人:科学家。我一直都非常尊敬 TJ,然而他却谦虚卑微得不得了。TJ 也是看透了学术界的腐败,迫于美国政府削减天体物理开支的压力,才不得不放弃自己心爱的事业,转行做了 data scientist。Data Scientist 这职位名字好听,但工作的性质其实并不是那么让人兴奋。曾经使用先进的 Mathematica 和 IDL 的他,现在的主要工具是相当难用的 Hadoop,Pig 和 TSV 格式的数据文件。每天都有各种 marketing,sales 的人给他提出各种临时的,一次性的数据分析要求。所以过了这么久,他的工作其实并没有留下很多有延续性价值的东西。 

这不能怪 TJ,他也只是想混口饭吃。我又想起在西雅图实习的时候,租的房子另一间里面住着一个老人,自己有房子不住租给别人作为每个月的收入,自己过来租别人的很小一间房,开一辆 80 年代门都关不拢的破车,吝啬俭省的过分。后来才听说他曾经是波音的工程师,做的是军方的通信项目。于是这次遇到 TJ 之后,我再一次的发现,科学对于消灭人类的愚昧,偏见和贪婪,真是没有多大用处。科学家其实是社会上的弱势群体,只是被人临时利用,在高尚的理想破灭之后,下半生的生活都没有保障。这个可悲的世界,其实被野心家和贪婪的人统治着。 

我和 TJ 愉快的合作了两个多月,我觉得 Voxer 公司对人还不错,就像一家人一样。这是一家跟 Coverity 气氛非常不同的公司。我没感觉到过任何压力,没有苛刻的任务时间限制,也没有遭遇到过自大狂。它也是跟 Google 非常不同的公司,因为这里没有人把自己的公司当做神。不过从工作的角度说来,我感觉这两个月真的只是散了一下心,没有干多少有价值的事情。我大部分的时间花在了 “折腾”各种 graph database 上面,这让我感觉回到了写出《完全用 Linux 工作》的那个自己。人们都误以为“精通”某种工具的人很厉害,而抱怨某种工具“对用户不友好”的人就是菜鸟。然而从前的那个精通 Linux 的自己如果能来到现在,恐怕会鄙视现在的我。从前那个我,只知道如何转弯抹角的使用各种难用的工具,而不是设法让困难的事情变得简单和容易。他的知识是非常容易过时的肤浅的东西,自认为是高手,而其实是个没看透东西本质的菜鸟和纳粹。很可惜的是,我发现现在软件行业里的大部分人就跟十年前的我一样。 

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

然而过了很短一段时间之后,我就发现我的希望破灭了:Neo4j 跟我的目的是背道而驰的。Neo4j 的数据模型并不能表示多样化的数据结构,它的查询语言 Cypher,完全是对语言设计门都没摸到的人用来练手的作品。不但表达力有严重缺陷,而且根本不能达到传说中的性能。我换了不下四种方法,写了一大堆代码,在内存里建了一个 20G 的哈希表,才把数据导进去。感觉这不像是一个产品,而是我自己写代码实现了大半个数据库。在对 Neo4j 失望之余,我又测试了 OrientDB, Titan, InfiniteGraph, ... 最后发现它们没有一个能够达到我们的需求,甚至比 Neo4j 更差。特别是 OrientDB 明显在泄漏内存,80G的内存不一会儿就被它用完,然后就当掉。但是我们已经在 Neo4j 上投入了很多时间和精力,不得已之下,我们花钱请来了一个 Neo4j 的 consultant,跟我们一起折腾了一天,结果最后他给我们开出的“处方”是: 

不要使用最新的 2.0 版本(bug 太多),必须回到麻烦和难用很多的 1.9.4 

要减少数据量,让它可以完全放进内存 

不要用 Cypher,因为它的优化做得还不好 

必须用 Java 写“扩展”,插入到数据库 server 里面,然后通过 REST 接口调用它,才有可能达到我们所要的基本性能需求 

其他的“秘方”配置,performance tuning... 

这就是号称 "The World's Leading Graph Database" 的 Neo4j。这让我想起了以前看过的一个笑话里的“超级跳蚤药”。这个跳蚤药的说明书是这样的: 

抓住跳蚤 

把它的嘴掰开,塞一粒药进去 

把嘴闭上,等五分钟 

当然了,这跳蚤药是百发百中的。如果不管用的话,那肯定是你没仔细看说明书 ;-) 

我想大家把这一切应该都看得很透了,很可惜的是我不是掌权的人,TJ 也不是。有人对 Neo4j 执迷不悟,硬要往这坑里跳,我没办法,TJ 也只能附和。在 Voxer 的每一天都很轻松,因为这些 graph database 实在是太慢了,光是把数据导进去都要花一两天时间,错了还得重来。有时候从早到晚我就让 Neo4j 自己跑,然后就去喝茶。我恐怕是 Voxer 最悠闲的程序员。我已经看到很多人羡慕的目光 ;-) 然而,这还是我自己吗?我感觉到自己的理想正在离我而去,就像 TJ 的理想离他而去一样。我是世界上最优秀的计算机科学家和程序语言专家之一。我不应该把自己的才华浪费在折腾这些无能的数据库上面。我的目标之一应该是设计出全新的数据库系统,完全的改善人们使用数据的方式,而不是绞尽脑汁让一些无可救药的系统能够凑合工作。实际上我已经知道该怎么做,可惜的是 Voxer 并不是一个制造数据库的公司,没人愿意冒这个险让我自己设计一个数据库给他们用。 

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

说实话 Voxer 真的是非常友好的,扶老携幼的好公司,Voxer 的 app 我也很喜欢,可惜的是我在那里是不大可能有用武之地的。人们都说加入新的 startup 不但艰苦而且风险很大,但是我是不甘心死于安乐的。我相信自己的实力可以帮助 Sourcegraph 立于不败之地。人生的快乐真的不是钱能买得到的。能找到喜欢的事情做,找到合适的合作伙伴,才是最重要的。 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容