生产率是指在一定的时间内所完成的有效工作量。在同样的时间内,生产率高的人能比生产率低的人完成更多的有效工作。本书就是讲述如何在开发软件的过程中变得更加高效。同时,本书的讲述将会跨语言和操作系统:很多技巧的讲述都会伴随多种程序语言的例子,并且会跨越三种主要的操作系统,Windows(多个版本),Mac OS X以及 *-nix (Unix或者Linux)。
本书讨论的是程序员个体的生产力,而不是团队的生产力问题,所以它不会涉及方法论(好吧,可能总会在这里或那里谈论到一些,但肯定不会深入讨论)。同时,本书也不会讨论生产力对整个团队的影响。我的使命,是让作为个体的程序员通过掌握恰当的工具和思想变得更加高效。
我是ThoughtWorks的一名员工。作为一家跨国咨询公司,ThoughtWorks拥有大约1000名雇员,分公司遍布全球六个国家。因为咨询工作需要长时间的旅行(特别是在美国),我们公司的员工整体而言相对年轻。记得有一次,在一次公司组织的郊游活动(当然还有免费的饮料)中,我和一个人力资源部的同事闲谈起来。她问我有多大年纪,我告诉了她,她立即“恭维”地对我说道:“哇,你已经老到足够可以丰富我们公司的多样性了!” 这激起了我的一些思考:原来我已经在软件开发领域干了很多年了(莫名的伤感…在我的那个年代,计算机甚至还是由煤油驱动的呢)。这些年来,我观察到一个有趣的现象:软件开发人员正在变得越来越低效,而不是更加高效。在古老的时代(对于计算机的时代而言,那是20年之前),让计算机跑起来都是一件非常困难的事情,更不要说编写程序这些事了。你得是一个足够聪明的开发人员,才能让那难以驾驭的机器变得对你有用。如此残酷的现实,逼迫当时一些非常聪明的人开发出了各种各样的方法来和“难搞”的计算机交互。
正是因为这些程序员的努力,计算机慢慢地开始变得易用。层出不穷的创新让计算机用户的抱怨也不再那么多。这些聪明的家伙开始为他们所取得的成就庆祝(就像所有其他能让用户“闭嘴”的程序员一样)。然后,一件有趣的事情发生了:对于整整一代程序员来说,他们不再需要“奇技淫巧”,计算机就会乖乖地满足他们的要求,他们也和普通的计算机用户一样,习惯了如今易用的计算机。那这有什么问题呢?毕竟,你不会拒绝提高生产力,对不对?
其实问题的关键在于,那些对普通用户而言能提高其工作效率的东西(比如漂亮的图形界面,鼠标,下拉菜单等等),对于其他一些人(程序开发者们)来说却是他们获得计算机最佳性能的障碍。“易用”和“高效”在很多时候其实是不相关的。那些在使用图形界面(好吧,直截了当地说,就是Windows)的过程中长大的程序开发者们,对那些老一代“聪明人”所使用的不仅酷而且高效的技巧一无所知。他们的计算机在大部分时间里根本不是在”跑“,简直就是在”散步“。我写此书,就是为了解决这个问题。
浏览器的地址补全
在这里我举一个简单的例子:你每天会访问多少网站?我们知道大多数网址都以”www.“开头并以”.com“结束。但很少人知道现在的浏览器有一个很方便的快捷键:地址补全。地址补全使用热键组合,来为你在浏览器地址栏中输入的字符串前后分别加上”www.“和”.com“。地址补全功能在不同浏览器中的使用会有细微的差别。(注意,地址补全和浏览器的自动补全是不同的,现今的浏览器也都有自动补全功能。)他们之间的差别在于效率。自动补全功能会到网络中寻找与你输入的名字相符的站点。如果没有找到,浏览器会为它加上前缀和后缀,再次尝试到网络中寻找。如果网速够快,你可能根本注意不到这个微小的延迟;但这些错误的点击累积起来会拖慢整个网络的速度。
Internet Explorer (IE)的地址补全功能,会使输入有标准前缀和后缀的网址变得更加快捷。使用快捷键Ctrl+Enter,浏览器中的地址就会分别在前后加上”www.“和”.com“。
Windows版的Firefox浏览器,它的快捷键跟在IE中一样。而在Macintosh上,快捷键是Apple-Enter。Firefox还有一个快捷键Alt-Enter,它会给地址加上”.org“后缀,这个快捷键在所有支持Firefox的平台上都一样。
Firefox还有其他一些似乎很少有人用到,但却很方便的快捷键。比如在Windows下使用快捷键Ctrl + <标签号>或者在OS X下使用快捷键:Apple + <标签号>,就可以直接跳到某个标签。
好吧,用上这个快捷键,无非在每个页面上少敲8下键盘而已,看起来似乎没有太多价值。但是,想想看你一天要访问多少页面,这每个页面上的8次击键就会体现出它的价值。这是加速法则的一个很好的例子。
当然,节省每个页面上的8次键击,并不是谈论这个例子的真正目的。我曾经在所有我认识的开发人员中做过一个非正式的调查,得到的结果是只有20%的人知道这个快捷键。他们都是无可争议的计算机专家,但他们从来没有使用过这些非常简单的方法来提高他们的生产力。我的使命,就是改变这样的现状。