第29章 工程师的谎言

当今的程序设计是软件工程师与宇宙之间的较量,前者拼命创造更大、更好、更容易操作的傻瓜程序,后者努力制造更大、更好的傻瓜。截至目前,宇宙是获胜者。

——里克?库克

虽然我非常看重和尊敬工程师,但他们确实经常说谎。或许说谎是进行伟大创新所必需的,因为那么多人告诉你想做的事情不可能实现或者人们根本不需要。但是只要你明白他们在说谎,那就没问题。

1.“我对市场营销一窍不通。”这是个故作谦虚的谎言,其实这个工程师在想:“我对市场营销一窍不通,但是与我的开发工作相比,又能难到哪儿去?我应该进行市场营销和工程设计,我只希望工商管理硕士们提出一些配得上我的程序的想法。”不过,不要过度担心这个谎话,因为当工程师错过一个又一个最后期限,开始意识到他自己的问题更大时,他们会对这个谎话进行自我更正。

2.“我们就要进行贝塔测试了。”这是句毫无意义的话,因为什么时候进行测试关系不大,真正重要的是什么时候结束贝塔测试(当今贝塔测试既有效又迅速的最后期限是“在你花完钱以前”)。

在过去的好日子里,阿尔法测试的意思是 “所有的功能都实现了,虽然不一定正常运行”,贝塔测试的意思是“不会再出现重复性漏洞”。但今天贝塔测试的意思是:“我们向投资人承诺的产品推出日期已经不能再往后拖了。”

3.“我会对程序进行注释,这样接替我的人会明白我做过什么。”这是一个善意的谎言。工程师的确想对程序进行注释,但是随着时间消逝,最重要的任务已发生了改变。给管理者的问题变成了:“你是想让我对程序进行注释呢?还是快点完成编程?”答案猜都猜得出来。幸运的是,缺少注释通常影响不大,因为程序本身漏洞百出,不到1年就有要整个重写。

4.“我们的程序结构具有可扩展性。”这是我最喜欢听的谎话。典型的情况是,一个没有推出过产品的工程师会先利用Visual Basic语言创造出一个原型,然后再这么说。整句谎话似乎是这个样子:“谷歌搜索引擎的结构不像我的这个这么有伸展空间,它同时可支持2500万个搜索。我们能轻轻松松地解决10亿。”幸运的是,大多数情况下,产品的采用比总裁“保守的”预测要慢,因此可扩展性没成为一个问题。

5.“这个程序支持该产业的所有标准。”这几乎是真的,但是遗漏了一小点:“这个程序支持所有我同意的行业标准。”工程师私自决定忽略那些她不喜欢的产业标准,比如微软公司发布的标准。对于工程师来说,这只是小事一桩,反正用户不会知道。

6.“我们有一个有效地错误提交报告数据库和系统。”可是,设计错误提交报告数据库和系统背后的假定是程序没有漏洞,所以数据库和报告没多大意义。一般来说,如果有记录的错误最大值不超过1000,那就说明公司没有仔细地追踪错误。

7.“我们可以让一个境外的印度程序组更快、更经济、更好地完成这个工作。”程序组普通成员通常不会说这个谎话,一般只有首席技术官这么说。不知怎么会使人们认为印度的每个程序员都又快,又好、报酬又低,而美国的每个程序员都又笨、又慢、又昂贵。这显然不是事实。

8.“我们的贝塔测试站点喜欢这个。”在从事技术行业的25年中,我从没听说到过有公司报告它的测试网站不喜欢它的产品。这有三个原因:首先,很多测试网站十分荣幸地获得发行前的软件,他们不想说任何负面评论。第二,大多数测试网站对这个软件的使用率不高。第三,大多数测试网站不想说坏话来批评一个公司的新产品。因为如果那样做会就像告诉某人他的宝宝是个丑八怪一样不为社会所接受。

9.“这一回我们对了。”有关这个谎言的可怕之处是工程师又真的相信了,问题是“这一回”反复出现。我很信任工程师们,并且相信从长远来看他们能做对,但问题在于从长远来看我们都是会死的。

10.“这个程序太差了,完全重做都比调试和扩展当前的版本要快。”每个程序员都会这么评价其他程序员的程序,有些人照样会对重写后的版本这么评价。

11.“我喜欢思考结构的问题,但是我会写程序。”这说明这个程序员不会写程序,并且还可能不会设计一个好结构。

12.“这在我的电脑运行良好。”“我的电脑”没准儿是世界上唯一一台能正常运行这个程度的计算机。

13.“当然我可以不写程序,改做业务。”这是每个工程师出身的创业者著名的最后箴言。这说明他(或她)既放不下写程序,又不能做业务。

14.“连我妈妈都能操纵显示器。”当然能啦,你妈妈有麻省理工学院的计算机博士学位。

我喜欢工程师们说的谎话,原因有三:首先,他们的谎话表现了工程师对公司实际运作情况的孩子般的无知。第二,工程师们确实相信他们说的谎话,而创业者、风险投资人和律师则不是。第三,他们说的大部分谎话并非不诚实,而只是“有点早”或者最终会实现。如果你是一名工程师,现在你就

读书导航