![程序员的呐喊](http://images.china-pub.com//ebook3765001-3770000/3769953/chatu_1.jpg?2014-5-9%2016:24:11)
前言
第1章
痛苦是本书的灵感源泉。唔,还有酒精。而当痛苦累积到一定程度的时候,我就会忍不住开始抱怨。再加上酒精作祟,什么刻薄(甚至滑稽)的话我都说得出来。现在我还会时不时地回头翻看这些东西,每次都忍俊不禁。原来我很毒舌嘛。
和绝大多数程序员不同,痛苦在我身上留下了独特的印记,迫使我的世界观发生了极大的变化。我现在能一眼看穿很多老鸟都看不到的东西,因为,老实说,他们都太墨守成规了。
过去25年里,经历了很多形态迥异的编程类型,写了太多原本不用写的代码。弯路走多了,反倒让我培养出一种第六感——我能看见死人。这种感觉其实很不好。如果你也这么倒霉,得到了这种第六感,那可以选择的路其实只有两条:要么心怀不满,沮丧不已;要么微笑面对。
于是我试着用乐观的态度去面对它。一开始会很难,不过现在也越来越熟练了。这当中少不了酒精的作用。当然,熟能生巧也是一方面啦。你得习惯自嘲,还要学着嘲笑别人,以及我们所生活的这个疯狂世界。更重要的是要把握好分寸,适可而止。
那以开车来举例好了。每次看着那些显然没有从车祸中吸取教训的人们,我都会笑得很紧张,眼角不由自主地抽搐起来。我总是能注意到那些跟车跟得太紧,结果把前保险杠撞烂的家伙;还有突然急刹,结果把后保险杠撞得稀巴烂的车;车头太出路口,结果被撞得一塌糊涂的车;以及那些冒冒失失偏离自己的路线,在隔离带上擦出巨大刮痕的车。
只要你注意到这些东西,它们可以说随处可见。很多司机似乎都不知道吸取教训。他们总是觉得自己“知道”怎么开车,之前的那次车祸根本不是自己的错!
你周围有多少成年人真的花时间去提高自己的驾驶水平?你认识的人里,是不是有些人的驾驶习惯让你难以忍受,想要帮他们指出来?只不过你知道他们肯定不爱听。
而事实上,每个人都觉得自己会开车。好像开车这件事和用微波炉加热玉米煎饼一样简单似的。任何指责他们驾驶技术不娴熟的人都是不知所谓。
其实这中间是有微妙区别的。大多数司机的问题在于他们觉得“会开车”和“好司机”是一回事。只要考到了驾照,再开上几年车,自己就算是经验丰富的司机了!该知道的自己都知道了。除了一些罕见的情况,比如雪地、沙漠、湿地、烟雾、极冷极热、强风、陡峭山地、人群,等等。那时只要开得慢一点儿不就万事大吉了嘛。而且大多时候是可以避免开车的。如果真的有必要,到时候再专门去学一下就好了。你一定是这么想的吧?
好吧……只不过书到用时方恨少,到了真的需要这些驾驶技巧的时候,通常连佛脚也没处抱了。比如车子正在打滑冲向电线杆的时候。运气好的话或许还能躲过一劫。只不过事故过后,你会想到要去接受培训,提高驾驶水平吗?当然不会啦,除非法官逼你去。毕竟你是“会开车”的人。
如果罗列一下所有的特种驾驶类型——专业赛车手、追捕车辆的警察、在森林公园防火道上的巡逻员、巨型车司机,还有很多闻所未闻的驾驶种类——只要稍微动点儿脑筋就能明白,其实你的驾驶技术根本不算什么,充其量也就是过得去而已。既然有一半的司机低于平均线,那么很可能你也是其中一员,大家都心知肚明,只有你自己还感觉良好。
这似乎是让所谓的僵尸启示录显得合理的原因之一。因为我们都知道,没人对此有所准备。大多数司机都只是僵尸的猎物罢了,因为他们都觉得自己“会开车”,别人也不会点穿他们。
事实证明,编程和开车非常像。只要写几年代码,行了!自己就算是“会写程序”了,好像用微波炉加热玉米煎饼一样。大多数程序员这时都会陷入舒适区,再也走不出来,就像司机会尽量避开自己不熟悉的情况一样。要是有人给他们提点建议和意见,那这个人肯定是有毛病,要么就是搞不清楚状况。
但这种狗屁不通的观点和很多父母对待游泳课的态度不是一回事吗?无数的父母不让自己的小孩学游泳,因为他们有可能会溺水?
程序员和司机一样,总是自我安慰说等到需要的时候再去学新技能也来得及。但是在内心深处他们都明白,其实当需求出现的时候就已经太晚了。因此现实情况是这样的,旱鸭子会和水保持距离,司机会绕开泥泞的路段,而程序员会躲在舒适区里,搭建围栏把自己保护起来,然后祈祷世界和平。
可能你觉得这没什么大不了的——只要每个岗位上都有专门的人才不就万事大吉了嘛。但只要稍微深入思考一下编程和开车的比喻,就会发现事情并没有那么简单。开车很复杂,也是一件很自我的事情。我们都不愿承认这一点,因此产生了很多现实生活中的问题。
. 比如每个地区的驾驶风格就各有不同。尽管西雅图和洛杉矶的交规基本一样,但是两地的司机完全不一样。有一次,有个土木工程师告诉我说,一个地区的车速和咄咄逼人的程度,和这个地区糟糕的交通状况历史成正比。洛杉矶的交通几十年来一直都很差,所以每个人都知道,不凶狠一点是开不了车的。而西雅图的交通变糟只是这十几年来的事情,而且还没糟到洛杉矶的那种程度,所以西雅图的司机开车都像老奶奶。
不过西雅图的司机很不擅长在雨里开车,这一点相当搞笑。就算把车速降到接近零,每年还是会发生无数次车祸。
为什么会这样呢?这是因为西雅图的驾驶风格正处在转变之中,从休闲变得咄咄逼人。其中一部分原因是因为很多加利福尼亚居民沿着海岸线北上的同时,把原来的驾驶习惯也一起带了过来。另一部分原因是当地人口的快速增长,使得西雅图公路上的汽车数量年年翻新。所以现在西雅图的路上,既有彬彬有礼的司机,也有凶狠粗鲁的司机。
驾驶风格发生碰撞的时候,车辆自然也会撞到一起。等到风格统一了,也就是同一个地区的人开车方式“都一样”的时候,车祸数量自然也会减少了——哪怕在外人看来,这些司机都像疯子一样。
编程和开车其实一样错综复杂。编程的世界里也有司机、技工、汽车生产商、交通工程师、地区性的交通法规、交通执法、不同地区的驾驶风格,当然还有大规模的汽车追尾事故等。编程也有自己的亚文化,若硬要把它们放在一起,肯定会出现不协调。
这就是我要写这本书的原因,也是怎么写这本书的指引。我选择了一条不寻常的小路,几十年来不断探索大多数程序员从未接触过的领域,了解了人们在不同的风格和文化里是如何开发软件的。我领导过一帮拥有令人难忘的怪癖的专家,用过十几种语言,活跃于各个社区,见证了巨型项目的崛起、辉煌、衰败和消亡。虽然我不敢自称编程界的“百晓生”,但也是见过大世面的。
现在的狭隘可以说随处可见。就好像不同地区的司机,程序员也会在工业界和学术界里组成自己的小圈子,形成自己的术语、惯例、禁忌、学问等文化产物。他们能创造出自己的知识领地,就觉得自己天下第一、独一无二。
不管发生何种重大事故或交通问题,人们都会把责任怪在不合格的司机和程序员头上。虽然有时候的确是他们不好,但很多时候,冲突都是由文化差异导致的理念不同所产生的。
可惜,大多数自认为“会写程序”的程序员都会狭隘地给异己者贴上“错”的标签。这是人的本性,是我们最容易犯的错误之一,我自己也不曾幸免。
刚刚开始发牢骚的时候,我还是个丑陋的美国佬,在帖子里上蹿下跳,除了大喊“你们这帮家伙到底在搞什么”什么都不会。不过在接下来的十年里,我觉得我渐渐变成了一个业余的软件人类学家。现在我非常赞同文化相对论,尽量不去对那些和我意见不同的人下结论。
当然我不会因此就放弃开他们玩笑的机会,同样我也不介意别人来拿我寻开心。我最终希望能说服那些还在摇摆的程序员认同我对编程的看法,因为编程和开车一样,只有在大家步调一致的时候才是最好的。所以我会继续宣扬自己的观点,也就是所谓的“软件自由主义”,它是完全合理的,甚至可能是很多软件开发都应该采用的方式。
妄图让所有人都更自由肯定是行不通的,这一点毋庸置疑。即便如此,我还是希望能帮助来自不同软件文化的人们更好地理解对方。
我会继续摇旗呐喊,因为这似乎是可以让大众听到我声音的唯一的方法。现在还有人会跟我说我的博客写得太啰嗦了,他们觉得我的观点完全可以在100个字里表达清楚。我发现这些评论主要是来自我的反对者,其实他们真正想要的是在反驳我的时候可以少写点字。不过一些赞同我的人也在抱怨,觉得我的博客太长,没办法抓住他们的注意力。在这里我要说,没抓住重点的人是他们,我的博客根本不长,没有足够的“分量”是无法直指人心的。经过这么多年的试错,我发现最容易抓住听众的办法还是讲故事。而不深入其中,享受过程,是讲不好故事的。
这就是本书的大致内容了。它是由一系列故事组成的。它们形式各异,可能是文章、论文、指南、抱怨,也可能是小说。但不论文体是什么,每篇都和你分享了一个故事。就算你不会同意我所有的观点,至少我希望你能喜欢我的故事,若还能让你觉得豁然开朗的话,就再幸运不过啦。
Hyperink的编辑们挑选了要收录的帖子,而且大部分章节段落的组织都是他们负责的。虽然我自己也做了一点修改,但是你现在所看到的这本书基本上是根据他们的想法组织起来的。他们干得非常漂亮。
愿你能和我一样享受这段旅程。
Steve Yegge
2012年8月
网友评论