现在的软件糟糕透顶。没有更好的方式能够形容当前的状态。软件是不安全的,它允许各种恶意软件通过互联网侵入您的家用电脑上。软件也是不可靠的,当您最需要它的时候,它会突然崩溃,使您的几小时甚至几天的辛勤劳动付之东流,而且没有办法挽回。软件非常难用,对于那些最简单的操作,都需要浪费大量的脑细胞才能弄明白怎么回事。
对于您而言,这已经司空见惯。您并不笨,尽管您读过的“傻瓜”系列丛书(译者注:傻瓜系列丛书图文并茂,且简明易懂,是上佳的计算机学习的入门类读物)会让您相信自己是一个傻瓜。现在的软件确实糟糕,您可能也一直这样认为。事实确实如此。虽然这是一本没有使用术语的非技术性著作,但它精确地解释了现有环境是如何形成的,以及您能够做些什么来改变它。“我要立即买下来!还要多买几本送给我的朋友们。”非常好的想法。我说过您不是一个傻瓜。
15年前,甚至是10年前,普通老百姓在日常生活中还不曾接触软件。我的父母不会通过电子邮件将生日贺卡寄给小孙女,也不会希望我通过这种方式发送照片。他们在纸质登记簿上面结算支票账户,并用墨水笔在漂亮的挂历上记录日程安排。只有少数人能够经常使用软件,他们往往将软件作为自己工作的一部分,比如旅行社使用航空订票系统办理订票手续。这些人使用的软件是经过定制的小型应用程序,这些软件需要昂贵的专有硬件,培训和持续支持也需要庞大的开支,并且系统不能用于其他目的。而万维网(World Wide Web,WWW)曾经只是一个仅在学术圈内流行的高科技玩艺儿。大多数人甚至不知道它的存在,更甭提从它上面下载自己喜欢的音乐和图片。
然而,几乎在一夜之间,整个世界发生了翻天覆地的变化,而且人们似乎完全没有注意到这个变化。我的父母现在使用财务软件包来管理他们的支票账户,通过电子方式付账,这样无须浪费邮票,而且能够自动显示电子存折和已结算支票,就像本人亲自到银行柜台处理一样。现在,他们不仅要求使用电子邮件传递孙女的照片,而且还要求视频聊天。现在普通的家庭用户已经可以使用廉价的无限制高速网络接入互联网。Web现在已经无处不在。美国宾夕法尼亚州已经将其汽车牌照上面印制的口号“The Keystone State(基石州)”去掉了,换成了州政府网站地址:www.state.pa.us(参见图1)。佛罗里达州则做得更好一些,它保留了自己的口号,但是将州名换成网站地址:MYFLORIDA.COM(参见图2)。由于普通人可以方便廉价地获取以前需要非常昂贵和复杂的设施才能够得到的信息,因而旅行社的业务很大程度地萎缩了。

图1 宾夕法尼亚州汽车牌照上面显示网址而不是口号

图2 佛罗里达州汽车牌照上面显示网址而不是州名
今天,我们生活在软件的海洋之中,但是大多数用户并不了解软件如何形成或者为什么按照现在这个模式运转。我们只知道自己并不是很喜欢这些软件。每个人都曾有过不愉快的软件使用经历,就像我们曾经经历过不愉快的航空旅行,比如航班延迟或者行李投送错误。您干了一整天的活,但是忘了保存自己的文档,然后这个该死的程序突然瘫痪,致使您所有的劳动成果付之东流。当您看着程序崩溃,内心的滋味我们也深有体会。自从1982年被《时代》杂志评为“年度人物”以来,个人电脑的声誉每况愈下。漫画《退化》(参见图3)很好地诠释了大多数用户的心声。

图3 现在用户已经改变了自己的思想,不是吗?
软件本来不会如此糟糕,也不应该如此糟糕,但事实却是这样。其中一个原因在于开发程序的程序员、架构师和项目经理不能很好地理解他们的客户,而他们本该像其他行业的设计师一样必须了解自己的客户。软件公司的产品之所以糟糕,原因不在于开发人员不知道该怎样做好某一件事情,而是他们不知道要做些什么。他们脱离了自己的客户(某些客户应该被称为“牺牲品”),这些客户花钱购买软件,而且他们往往并不知道真相。软件开发人员往往解决了错误的问题,添加一些除了他们自己没有人会关心的功能,并在这个过程中伤害了所有的用户。如果他们理解谁是他们的用户,他们就可以做出不同的更好选择。
举例来说,微软的Office应用程序比如Word和Excel允许用户通过鼠标,将主菜单(就是那个有着“文件”、“编辑”和“帮助”的菜单)从窗口顶部位置拖到屏幕的其他任何一边,或者漂浮在文档上方(参见图4)。我从来没有见过,也没有听过有人曾经使用过这项功能,即使我在Office团队中的联系人也没有使用过它。那么为什么要在程序中添加这项有损程序的功能呢?偶尔(通常是比较疲倦时)我将鼠标指针移动到“文件”菜单上方并单击,但是移动距离稍微多了一点点,然后就发现自己拖着菜单条在满屏幕地晃动。我必须停下手头的工作,将菜单条重新拖放到它原来的位置,然后将其停靠在原来的位置上,即工具栏的上方。然后再花上半分钟时间痛骂设计这项愚蠢的所谓“功能”的笨蛋的八辈祖宗。这听起来并没有什么大不了,但是每天两次浪费半分钟,再乘以10亿用户,这样每天就累计浪费足足27个人的一生光阴。如果把这项功能从软件中完全删除,我和绝大部分用户的生产效率都将得到提升,因为不必花时间转移注意力去处理这项没有任何意义的功能所带来的各种麻烦。此外,为了提供这项功能,需要增加若干额外的程序指令(程序员称之为“代码”)。而我们知道对于任何一台机器,零部件越多,它的可靠性就越低。同样的道理,这些额外指令会增加程序崩溃和安全隐患的可能性。微软公司花了大笔的钱为这项愚蠢功能进行设计、编写、测试、调试,以及建立文档和提供支持等工作。如果将这笔钱烧掉(当然把这笔钱给我更好),那么这个程序会更好一些。最糟糕的是,这些不利于提高生产力的小玩意消耗了宝贵的资源,而这些资源本来应该用于用户真正最关心的那些功能,比如减少程序崩溃的频度,在崩溃时不要给用户的劳动成果造成损失。有一个比较极端的例子可以用来说明软件公司如何将资源浪费在这些不利于提高生产力的功能上,它就是微软Office助手(Clippy,参见图5),这是个能够说话、能够跳舞而且令人讨厌的回形针形象(1997年微软将其添加进来,但是应广大用户的强烈要求,2002年又将其停用)。

图4 微软Word主菜单漂浮在文档的上方

图5 已停用的Office助手(Clippy)
软件不仅仅是现在糟糕,而且如果我们不要求它停下来的话,它将继续一如既往地糟糕下去。只有用户开始需要的时候,汽车制造商才会按照我们的要求改进汽车的安全性(安全气囊、ABS系统)、可靠性(能够减少故障的更好引擎)和可用性(CD播放器和茶杯架)。购买具备这些功能的汽车,而不考虑那些没有这些功能的落后产品。我妈妈经常告诫我,如果自己没有更好的想法,就不要抱怨。我确实有很多更好的主意,并且在我指出当前软件设计决策中存在的失误之处时,我会告诉您更好的解决办法。虽然本书并不是一份教您如何设计软件的指南,但是我会教您我所知道的所有方法,消除不良程序设计带来的最恶劣影响(举例来说,关闭确认对话框,这样在将文件拖到Windows回收站时,就不会跳出一个对话框喋喋不休地询问您“真的要删除吗?”)。更重要的是,本书诠释了一种思想:为了能够让软件厂商听到您我的心声,以便不让其软件继续糟糕下去(最好马上停止),我们需要采取哪些措施。微软停用Office助手Clippy就是一个很好的例子。
与此同时,我不得不告诉您,开发软件与制造实体产品之间存在着非常大的差别。假设您在制作一张木桌,原材料的内在性质排除了一些设计选择,但要求其他的设计选择。举例来说,您知道它不能焊接,但是您可以使用螺钉加固,并且不能使其太薄,以免弯曲得太厉害。在另一方面,软件受到的内在约束要少得多,基本上没有限制。正如弗雷德里克·布鲁克斯在他的软件开发著作《人月神话》(The Mythical Man-Month,Addison Wesley出版社1995年出版。译者注:中文版《人月神话》已由清华大学出版社2002年出版)(由于现在多数项目的进度抓得都非常紧,我建议将书名修改为《人周神话》(The Mythical Geek-Week))中所述,程序员处理的“几乎是纯思维对象(thought-stuff)”。我总是这样描述程序设计:“试图将烟雾塞进瓶子里面”。所以,本书将解释哪些事情(比如,断电保护以及编写能够兼容前一版本的程序)用软件确实比较困难,而又有哪些事情仅仅是由白痴设计师做出的愚蠢设计决策造成的,他们本应该了解得更好。
我在哈佛大学开放学院(Harvard University Extension School)以及世界各地的公司讲授软件开发课程。我曾经为程序员和开发经理撰写过9本书籍,此外还有很多杂志文章和新闻稿。尽管如此,我仍然可以向您保证,本书的文字绝对不会枯燥。我尽自己的最大努力不使用技术性词汇。举例来说,您不会在书中找到“gigabyte”,我将使用“占用1/4的磁盘空间”这句话来表示它,因为在写作本书时,这两种表示基本上是同一个意思。
与我所著的其他几本书相比,我发现本书写起来要容易得多。体育新闻记者Red Smith(1906-1982)喜欢说,“写作是一件容易的事情。您只需要划开自己的血管放血就是了。”正如我希望您已经看到的那样,我在讨论这里出现的各种问题时情绪非常激动。当我在现场讲座(“Windows XP是一款物有所值的产品,而Windows 98则是一堆不值得骂的臭狗屎”)讲完之后,我的学生经常会问,“好了,Platt,不要再绕弯子了,告诉我们您到底是怎么想的。”我的回答是“如果您怪我实事求是的话,我承认自己有错。”本书不仅仅为您解决问题,它还在为唤醒这个疯狂职业的理性而大声呐喊。并且,我希望在您阅读完本书之后,也加入到我的呐喊中来。





