“现在,程序设计工作已经成了试图创建更大更好的傻瓜式程序的软件工程师和试图制造更大更高的傻瓜的上天之间的较量。迄今为止,上天赢了。”这话是技术商业作家Rick Cook说的。什么意思?往下看就明白了。
尽管我把软件工程师当作偶像,但他们仍然频繁地撒谎。也许撒谎是创新所必须的,太多人会告诉你,你想做的东西无法达成或者根本没人想要。只要知道他们在撒谎,你就不用担心。下面是一些工程师经常说的谎言。
1.“我对市场一无所知”。这是一句假的谦逊之辞。事实上,这位工程师正在想的是,“我不了解市场营销,但与我所做的工作相比,那又算得了什么?工程和市场我都能应付自如,我只是希望那些MBA能够提出一些配得上我写出的代码的想法”。不过,不用对此太担心,在工程师错过了一个个产品开发的最终截止日期之后,他们会发现自己遇到了麻烦。
2.“我们将要进行测试”。这是一个毫无意义的陈述,因为关键不在于什么时候开始测试,而在于什么时候完成测试。目前看来,惟一能够肯定的测试完成日期,就是钱花光的时候。
在过去,产品Alpha版本的意思是“所有的部分都完成了,尽管不一定能够合格运作”;Beta版本的意思是,“不会再出现重复性的错误了”。而到了现在,Beta版本则意味着,“在承诺的交货期之后,我们就消失了”。
3.“我已经对代码进行了注释,后来者可以看懂我的工作”。工程师确实打算对代码进行注释,不过随着日子渐渐过去,工作重点也发生了变化。管理层将面对这样的问题:“你是想让我为代码进行注释还是尽快完成项目”?答案不言而喻。幸运的是,缺少注释并没有什么关系,因为代码是如此蹩脚,一年之内肯定需要重新编写。
4.“我们的产品结构是可扩展的”。这是我最乐于听到的谎言。一般来说,从未交付过产品的工程师在VB中建立模型后会这么说。整个谎言是这样的:“Google的扩展性不如我们。他们可以支持2,500万次同时搜索,而我们可以轻而易举地处理10亿次。”幸运的是,在大多数情况下,产品真正能够应用所花的时间要比CEO的保守估计还长,所以可扩展性从来也不是一个重要问题。
5.“我们编写的代码支持所有行业标准”。这几乎是事实,当然还需要一点补充:“这些代码支持着我所认同的所有行业标准”。工程师对他不喜欢的标准习惯地选择视而不见——例如那些微软颁布的标准。对工程师来说,这无关紧要,反正客户不会知道这些。
6.“我们有一个数据库和系统,可以有效地报告bug”。但是,故障报告系统的设计前提是系统中没有故障,所以不需要报告。一般情况下,如果记录的故障从不超过1,000个,那只能说明这个公司没有进行仔细的检查。
7.“与印度的外包团队合作,会帮助我们做得更快、更好,而且更便宜”。普通的技术人员通常不会说出这样的谎言,这是CTO的杰作。在他们脑中,印度的程序员优秀、迅速、便宜,而美国人则差劲、拖沓、昂贵。事实显然不是这样。
8.“我们的测试版网站喜欢它”。在技术界工作了25年,我从未听说过任何一个公司说起它的测试版网站不喜欢有软件产品出现在上面。有三个原因:首先,很多测试版网站很荣幸能得到软件的预发行版本,他们不希望提出否定意见;第二,大多数测试版网站并不怎么使用软件;第三,测试版网站并不希望无情地批评公司的新产品。正如告诉父母他们的孩子其实很丑一样,这是一件很难的事情。
9.“这一次我们做对了”。这个谎言的可怕之处在于工程师对此真的相信。问题在于,“这一次”实际上已发生了很多次,到底哪一次做对了?我对工程师很有信心,并认为经过长时间的努力,他们真的能做好,只是我们活不到那个时候。
10.“这段代码太差了,与调试和扩展相比,还是重写更好”。所有的程序员都会对别人的作品做此评价,还有一些人如此评论被重编后的版本。
11.“我喜欢像建筑师一样思考,但是我可以编程”。这意味着该程序员实际上不能编程,而且很可能也不能设计好建筑。
12.“在我的机器上它能正常运转”。“我的机器”很可能是世界上惟一一台该软件能够正常运转的机器。
13.“我当然可以放弃编程,而是去经商”。这是每个转型创业者的工程师的遗言,其意思是他既不能放弃编程,也不能去经商。
14.“即使是我妈妈也可以在屏幕上冲浪”。当然,他的妈妈可能是麻省理工毕业的计算机专业博士。
上面列出了一些工程师经常喜欢说的谎言,我喜欢工程师为了这三个原因而撒下的谎:首先,其谎言暗示了他们像个孩子一样,忽视了计算机是怎样工作的;第二,工程师真的相信他们自己的谎言,而创业者、投资人和律师则不相信;第三,他们的大多数谎言并不是不诚实所致,只是时机太早了,最终总会成为现实。如果你是个工程师,现在你知道了自己在不知不觉中都做了些什么;如果你正和工程师一起工作,那么现在你知道了他们的谎言,明白该怎么理解了吧? (译/星晨)