就从这鄙视链说起好了

嘀嗒嘀嗒 2016-01-14


昨天发出第一篇,没想到大家都在帮我转,一晚上居然增加那么多关注的人,一下子搞的我又是惊喜又是紧张。这里感谢一下大家围观的热情!不过私心里想着这第二篇怎么写,可能都有人要失望了。还好一起 carpool (拼车) 上下班的同事给我支了个招,就是每次反正贴照片。文章写烂了,大家进来看个图,觉得图还行,顺手点个赞,就算完事。所以这以后可能还得在摄影这上面花点功夫。今天这张封面就是前面写 hackathon 那篇提到的 JM 的力作,这家伙也是有才的不像个写代码的,这事以后再说。




码工们的鄙视链


想哪写哪吧。前几天刚收到池哥寄来的《MacTalk 跨越边界》,读到其中的有一段不自觉的会心一笑:


最后,贫穷的程序员们还会相互鄙视。文人相轻,程序员似乎也是如此。写汇编的鄙视写 C 的,写 C 的鄙视写 C++ 的,C++ 程序员鄙视 Java 和 C# 程序员,Java 程序员和 C# 程序员相互鄙视,写 Python 的和写 Ruby 的相互鄙视,写 Scala、JRuby、Clojure 的一起鄙视 Java 程序员。写静态语言的和写动态语言的相互鄙视,写前端的和写后端的相互鄙视, Vim 程序员和 Emacs 程序员相互鄙视,然后一起鄙视使用 IDE 的程序员。Go 语言程序员鄙视所有其他语言的程序员,所有其他语言的程序员都鄙视 PHP 程序员。PHP 程序员说,PHP 是世界上最好的语言,因为 Facebook 的扎克伯格也是这么说的。


这个鄙视链,随着时代的变迁会有一些演化,但是身为码工的同仁们心里其实都有个大致如此的谱。没谱的常听周围人说,慢慢也就有了谱。认同这个谱的自然认同,不认同的打死你也不能承你认不认同,否则别人会说你对计算机技术的领悟还不到家。


那么处在这个鄙视链中,到底是一种怎样的体验呢?


我刚学 Ruby 的时候,用的就是 RubyMine,真的是很好的 IDE,尤其对于初学 Ruby 的筒子,可以帮助很快找到类之间的关联,特别方便。后来 Ruby 用的很熟了,又知道这个 IDE 是鄙视链的底层,所以就为了这个,逼着自己改用 Sublime, 开始很不习惯,不过不到一周也就觉得用的挺顺手了。从此以后每次遇到用 RubyMine 的人,我就有意没意的得瑟一下,表示下你怎么还用 IDE,真土。其实内心我还真没觉得 IDE 有哪不好了。


然后有一天,这不拿着电脑问我们组一个更牛的人一个问题嘛,结果我的问题说完,他来了句:“ You use Sublime? Angela, Grow up! ” 换成我们地道的普通话就是:”Angela,你也不是小孩子了,怎么还用 Sublime ?!“ 然后就转头在他自己的电脑上飞快而熟练的 Vim 起来。当时心里觉得就是一只黑乌鸦擦着我的头皮嘲讽地飞过,很是无语。


当然这个鄙视链其实也是有个好处的,就是你可以装逼的推卸责任。比如一个什么 Service 挂了,先不管是不是代码写得不好吧,你可以来一句:“Ruby 就是一坨 X。” 然后可怜的 Ruby 就躺枪了。当然,有的时候其实这句话说的太好了,让你打心底赞同。但不论是不是 Ruby 的错,这种时候,是没有人去给 Ruby 说句公道话的,即使你心里不同意,千万不能说。为什么呢?因为不管什么时候,只要码工之间开始为一种语言开始争论,就一定会以枪烟弹雾收场,谁也说服不了谁,何必当炮灰呢?


可爱的码农们在聊 high 了的时候,也会对鄙视链的应用到了忘我阶段。你会看着群里或者 email 里某君华丽丽地来一句 “写前端其实没什么逼格,处于码农鄙视链最下面的角色。” 然后被人提醒有兄弟是写前端的正看着呢,然后一个笑着擦冷汗,一个满头黑线。。。




码工里那些你不懂的人和代码


除了这个让我似懂非懂的鄙视链,在这个群体里,还有些人的代码,总不是我这种普通人所能读懂的。


话说 Java 是业界用的最广的语言之一了。用 Java 的必用一个叫做 dependence injection 的 framework(中文应该叫 “依赖注入”)。国内好像用 Spring 的比较多。湾区这边自从 Google 的 Bob Lee 和 Jesse Wilson 发明了 Guice 之后,Google 就开始大规模使用 Guice 了。所以 Bob 和 Jesse 可以并称 Guice 之父。湾区的码农隔个两年,最多四年,一般会跳槽。那么大批的 Google 的技术宅就成了新技术传播的载体。Bob 就到 Square 当了 CTO,Jesse 也来了 Square。这两个神一样的人还有一群原来 Google 的神一样的工程师搭就了 Square 最早期神一样的架构,技术无可挑剔。这群 Java 和 Guice 玩到神一样的人绝对不满足仅仅是写一些可以运行的代码这种层次,他们要让 Guice 发扬光大,更为强悍。于是,除了通常我们的依赖注入用到的 general context 之上,我们有了复杂无比的 request context。正常的 injector 太简单,来个 injectorinjector。总之,这项技术在 Square 得到了极大的升华。


那你说我有幸在这个氛围下工作过,这 Guice 也得是个小专家吧?还真不是,Square 把 Guice 整得太复杂了,我硬是没学明白。所以,离开 Square 的时候我的 Guice 还是用的不明不白的,直到最近,换个 Guice 用的比较正常的环境,才勉强算是可以写写了。




当然,技术就是被这样的一群人不断推动的。硅谷里,很多新的技术都是起源于 Google,Facebook 这种大公司的。然后通过人员跳槽把一项技术最有效的从一个公司带到另一个公司。但也有些,就好像少林武当的绝技绝学,却总是最大程度的保留在了它的发源地。或是因为同样规模类似的问题不那么多,或是技术实现起来太复杂。


就说 Google 开发的一款叫做 Spanner 的全球级分布式关系数据库管理系统,它是BigTable的继任,也是史上第一个分布式系统可以在全球范围支持对外的分布式事务的一致性。2012年的时候 Google 就发表了一篇论文(white paper)介绍了它的一些技术实现(http://research.google.com/archive/spanner.html)。其中关于这个数据库系统的时间管理的 API 就及其复杂。它准确的体现了对时间的不确定行的描述。


什么意思呢,假如我们说一个数据库事件发生在大概 1 秒钟之前,那么一般数据库的时间系统可能就用 “ 1 秒前” 这个近似值来表达。但是 Spanner 里面,这个时间就会被表达成一个区间,比如说被描述成一个事件发生在 0.99 秒之前到 1.01 秒之前这样一个时间范围。这个技术是该数据库能做到对外绝对一致性的关键,也是很多其他 Spanner 特有的属性的根本。


很有一些 Google 的朋友,提到这个技术,也是觉得牛掰的不行。但是纷纷表示不是太懂。甚至有人还觉得,其实 Google 在 Spanner 之前的系统 Megastore(http://research.google.com/pubs/pub36971.html)已经是足够牛以处理大部分的问题了,Spanner 实在是复杂的有点不像样。


无论如何,硅谷里,你的身边,就存在着大批这样的牛人,他们的代码就是传奇,估计我也是没机会懂了。





嗯,说技术很无聊,以后我也尽量写写跟技术不搭边的话题吧。不过这第一篇总得写的有点码农的味道是吧。


注:以后每发一篇新的,我会转载重发一篇我以前发在别的地方的旧文。所以下一篇会是您可能已经读过的了。



本站仅按申请收录文章,版权归原作者所有
如若侵权,请联系本站删除
觉得不错,分享给更多人看到
嘀嗒嘀嗒 热门文章:

亲身参与“引力波”项目之体验    阅读/点赞 : 55310/363

说说 Code Review    阅读/点赞 : 29680/314

我的编程之路    阅读/点赞 : 17059/314

迷茫和进步    阅读/点赞 : 14860/361

说说跳槽这件事    阅读/点赞 : 14005/307

从一条读者留言说起    阅读/点赞 : 13835/411

10%,和那背后的 90%    阅读/点赞 : 13518/351

我的博士生导师    阅读/点赞 : 11227/298

程序媛的碎碎念    阅读/点赞 : 9766/370

嘀嗒嘀嗒:我和微信公众号这一年    阅读/点赞 : 7328/354

嘀嗒嘀嗒 微信二维码

嘀嗒嘀嗒 微信二维码