前几天有人在 Stack Exchange 上提了一个问题 How can a new programmer impress the software engineer (boss)?(作为新手程序员如何给软件工程师出身的老板留下好印象?),Joel Spolsky(Joel on Software 的主人,《软件随想录》的作者) 看到了这个问题,他没有正面回答,而是在下面讲了悲催的程序员阿士顿的故事。我很喜欢这个故事,于是就大概翻译过来分享一下。翻译得很仓促,错误难免,见谅。
正文:
我告诉过你有关阿士顿的事情吗?
阿士顿是一个典型的吃玉米长大的农场男孩,他的父母曾经是嬉皮士,从来没有真正地同心协力过,直到有一天他的妈妈继承了密歇根农村的15亩地。然后他全家搬到了那里,买了一对奶山羊,靠在农贸市场把有机山羊奶酪卖给雅皮士们谋生。
那个时候阿士顿才10岁,他需要每天早晨4点起床给那些该死的山羊挤奶,这活非常累。阿士顿很喜欢上学,因为上学就意味着不需要跪在羊粪里工作了。整个高中他都异常努力,希望可以拿到一所名牌大学的奖学金,然后他就可以离开农场了。在大学里,他发现大学生活比农场的生活轻松多了,所以搞不明白为什么每个人不能像他那样每科都拿到A。他选择了软件工程作为自己的专业,因为他深信一个工程师绝对不需要早晨4点就起床。
阿士顿就这样从学校毕业了,他对软件产业并没有很多了解,所以他去了招聘会,申请了3份工作,并且都拿到了 offer 。然后他挑了一个给钱最多的offer:年薪高达 32,000美元,这是一家位于密歇根西南部的大家具公司,为全世界的企业生产办公小隔间(cubicle farm)。入职之后,因为阿士顿再也不想回到农场了,所以他决定给他的老板查理谢尔曼留下一个好印象。
“这个可不简单”,坐在他隔壁的同事杰夫说:“她在这里也算是个传奇人物了。”
“你的意思是?” 他说。
“嗯,你还记得几年前吗?那个时候到处都是关于千年虫的话题。”
阿士顿可能是太年轻了。“千年虫?”
“是这样的,没有人预料到在60年代写的程序在2000年还会继续运行,所以当时给年份只留了2个数字的存储空间,也就是说 1999 被存储为 99 。所以当 2000 年到来的时候,计算机系统就会崩溃,因为它会试图将 100 存储成2个数字。”
“真的?我还以为那只是个传说,” 阿士顿说。
“世界上所有其它的公司都没有发生什么事故,” 杰夫说。“因为它们花了数十亿美元去检查每一行代码。但是在我们公司,当然了,因为他们是狗娘养的混蛋,所以他们不愿意做任何测试。”
“完全没有做吗?”
“几乎没有。零测试。所以你瞧,当人们在2000年1月2号开始工作的时候,发现所有东西都不能工作了。他们不能打印生产计划,甚至不能打开半个装配生产线。没有人知道如何进行工作,工厂差不多停滞了。”
“你在开玩笑。” 阿士顿说。
“绝对没有。工厂整个都停止运转了。这个时候查理出现了。她那个时候还是个新人,曾经在微软,可能是NASA,也可能是其它机构工作过……没有人清楚为什么像她那样的牛人会到我们这种地方工作。然而她坐了下来,然后开始写代码。然后写代码。继续写代码。
查理整整写了九天代码,这九天她没有睡觉,没有吃东西,有些人说她甚至没有去过洗手间。她检查了一个又一个系统并且逐个修复了它们。那真是一件壮观的事情,老天,那些需要被修复的可是 COBOL(一种非常古老的编程语言)系统。在整个工厂处于停滞状态的时候,查理派人去大学图书馆找来了古老的 COBOL 手册。装配线上的工人站着直哆嗦,因为连恒温器也有千年虫问题。而查理则一杯接一杯地喝咖啡,像一个疯婆子一样不断敲击键盘。”
“哇。她没有去过洗手间?”
“呃,那个部分可能有稍微那么一点点的夸张成分,但是她的确连续9天工作24小时。总之,在1月11号的时候,就在开工前一天的5分钟,她走出了她的隔间,来到了打印机面前,按下了一个按钮,然后,奇迹出现了!生产计划打印出来了,团队计划也打印出来了。一切都是完美的,经过了完美的格式化,使用了一个稍微较小的字体把 ‘2000’放到了原来写‘99’的地方,她甚至还写了一个新的优先级优化系统,可以帮助工人在不得罪那么多客户的情况下赶上过去9天的生产进度。所有的装配线都开始工作,好像从来没有出现过错误一样,供暖也恢复了,打印出来的发票的年份由‘19100’变成了‘2000′。而且,之后谁也没有找到过一个bug.”
“得了吧!” 阿士顿说。“谁也写不出没有bug的代码。”
“她做到了。我亲眼看到的。这是他们第一天无间断地生产了相当于以往两天生产的小隔间。”
阿士顿目瞪口呆。“这简直是史诗阿。我怎么才能做到那样?”
“你做不到,伙计,没人能做到” 杰夫边说边回到了自己的电脑前面,继续玩已经玩了4个多月的斯波克和蝙蝠侠之间的在线战争游戏。
阿士顿不是一个轻言放弃的人,他发誓某一天他也会做一些富有传奇色彩的事情。但现实情况是,再也没有出现另外一个千年虫问题。而且在密歇根的那个地方,没有人可以提供一丁点儿关于如何写好程序的信息。事实上几乎没有什么事情需要程序员去做。分配给阿士顿去做的都是一些无聊的小项目……有一次他花了三个星期来处理这样一个事情:由于两个不同的销售税区域使用了相同邮政编码,导致在某个县的销售税是错误的。有趣的是,这个县位于纽约一个人烟稀少的地方,那里没有人买过办公小隔间,公司在那里也从来没有一个客户,所以他写的代码永远都不会运行。
日子就这样过去了。
两年来阿士顿一直带着热情和兴奋投入工作,迫不及待地想有所作为,想做一些了不起的事情。与此同时,他的同事却在上网冲浪,给朋友发短信,连续几个小时地玩电脑纸牌。
坐在他旁边的那个同事杰夫,只有一个工作内容:每周更新一个“显示本周有多少人在工作中受伤”的 Excel 电子表格。从来没有人受过伤。每周杰夫都打开那个电子表格,然后移动到页面的底部,在那里输入日期和一个数字0,点击保存,然后就完成了工作。
阿士顿甚至帮杰夫写了一个宏来自动化他的工作。杰夫不想被逮到,所以他拒绝安装这个宏。从那之后他们的关系就变僵了,真是尴尬。
在阿士顿工作两周年的那天早晨,他和以往一样开车去工作,然后忽然意识到了一些事情。
他写过的任何一行代码都没有运行过。
过去两年内他做的任何一件事情都没有对世界产生过什么影响。
而且在密歇根州的这个地方气温他妈的有24度,天空是灰色的,弥漫着臭味。他开的本田车也是一坨垃圾,在这个小镇上他没有任何朋友,他自己也什么都不是。
当他开车到林肯大街的时候,他看到了左边他所在的那个家具公司。在公司园区前面飘扬着三面旗帜:美国国旗,伟大的密歇根州的州旗以及一面有公司标识的红白相间的旗帜。他开车进入了转弯车道等待左转,他的前面有一长排车,在高峰期的时候需要等四到五个红绿灯才可以左转,所以阿士顿有足够的时间来回想他写过的代码有没有哪怕一行是被别人使用过的。
没有。他怔怔地留下了眼泪。
然后他没有左转,直接往前开了出去,这差点酿成了一起交通事故。阿士顿忘记了自己已经打了转向灯,而打了转向灯就意味着你不能直接往前开。
他沿着林肯大道开了下去,然后上了高速公路,他只是不停地往前开,一直来到了机场。他把他的垃圾本田扔在了航站楼的前面,心里非常清楚它会被拖走。他甚至没有去关车门就径直走到了柜台前面买了下一趟飞往旧金山的航班的机票,20分钟内起飞。然后他上了飞机,永远地离开了密歇根。