软件工程里有一句著名的考核你的代码质量的名句,那就是 “Something bad will never happen. Something good will eventually happen.” 也就是说你写的代码所涉及的状态一定都被你全部想到过,所以不应该到达一个你不能处理的状态;同时,如果你到达了一个不太好的状态,在一定时间之后总会脱离这个状态,回到正轨。这条定律在我大四做乐高导航车毕业设计的时候,给了我极大的帮助。比如,如果小车发现在行驶了五分钟之后身上的感应器一个都没有被触发过的话,那么一定是车体被卡住了。所以只有马达在动,身体却原地不动。这个时候,代码就应该保证 “Something good will eventually happen”。于是小车停止前进,而是随即尝试后退、左转、右转等动作,以达到逃脱的目的。就这样,毕业设计总算是及格了。
之后,我把这句话当成了真理,用它来保证我得人生质量。做任何事情,都要把各种结果想到,来保证 Something bad will never happen;同时,如果发现自己的状态处于低谷,那么就应该尝试新的东西,来保证 Something good will eventually happen。本科毕业后,当我发现我所学到的编程知识并不能很好地和我所学到的软件工程知识所结合,我决定应该是做些改变的时候了。我做了两件事,一件是决定读研究僧;一件是尝试把信仰从一个集市操作系统提升到软件开发和构架上。其实这也是没过多久之前的事情,但是作为一个学习计算机科目的学生来看,这是成长的必经之路。
软件,工具也。这样一个很简单的事实,有些人却不明白。当我们的计算机里面安装了各种各样的应用程序、办公软件,我们却往往人为地在这些产品之间周转。我受到一封电子邮件;我需要根据邮件内容的要求召开一个下星期一的五人会议;我需要打开我的字处理软件,写好我准备开会的内容;同时我需要取出这个文档的一部分大纲做成一个问卷,并找到 30 个人的回复;然后把问卷反馈重新放回这个文档;我需要打开我的演示制作软件,跟我我的大纲把主要内容变成一个个投影。如果这是一个制定产品最新定价的会议,之后我还要把新的定价变成一个个精美的报价表,然后分发到每一个经销商去……一个多么痛苦的不以人为本的过程!其中绝大部分环节完全可以通过软件来自动化。每个环节所浪费的时间可能只有十秒钟,但是滴雨成海。如果这是一个企业的话,这种浪费毫无疑问是奢侈的。
这种以人为本的概念,很多公司都在做。2006年,这四个字在微软被翻译成 People Ready。这个概念很符合我的想法。有些人对这个公司的很多技术不是很了解,比如最受嘲笑的就是 IE 浏览器下的 ActiveX Control。可是恰恰因为有了这样的技术,上级通过浏览器、邮件客户端发布的信息才有可能加以自动化。确实,想符合上面以人为本这种生产模型,我们必须尽最大的可能结合现有的技术,来减少信息流动所带来的延迟。而专门针对减少这种延迟的技术却往往要经过很多安全性上面的考验。所以在技术发展的初期,往往会因为缺少足够的经验以导致漏洞的发生。可是我们一定要因为安全性而像鸵鸟般把头扎在毫无生气但是绝对安全的沙盘里么?安全性和易用性不应该是拔河比赛,并且任何一个极端都是人们不想考虑的。平衡好这个天平,以人为本的想法才可以实现。这两个方面合起来就是软件质量。提高软件的质量并不是不可能的,这就需要程序员们在格式上、协议上、操作模型上不断加以验证和改进。在验证和改进的过程里,只要合理合法,应该是什么平台和概念都可以拿来用的;不一定要求是某种操作系统,不一定要求实某种浏览器。
2006 年愚人节,我拿到了这个公司的一个职位。职衔为测试软件开发工程师,产品为 People Ready 计划的一部分。同年 11 月,这个公司推出由通信、演示、工作流程三大模块组成的 .Net Framework 3。也是在读了一年半硕士研究生之后,我又暂时辍学了,来到了一个叫做 Redmond 的小村庄。(上、中、下)