标题：卓有成效的程序员
卓有成效的程序员
作者:(美国)Neal Ford    [1]译者:熊节   
·出版社：机械工业出版社
·页码：215 页
·出版日期：2009年
·ISBN：7111264061/9787111264064
·条形码：9787111264064
·包装版本：1版
·装帧：其他
·开本：16
·中文：中文
·丛书名：北京华章图文信息有限公司O'Reilly系列
·外文书名：The Productive Programmer
内容简介
《卓有成效的程序员》讨论的是程序员个体的生产力，而不是团队的生产力问题，所以它不会涉及方法论（好吧，可能总会在这里或那里谈论到一些，但肯定不会深入讨论）。同时，《卓有成效的程序员》也不会讨论生产力对整个团队的影响。我的使命，是让作为个体的程序员通过掌握恰当的工具和思想变得更加高效。
前言
很多年前，我曾经给一些有经验的软件开发者上课，教他们学习新的技术（例如Java之类的）。这些学生之间生产效率的差异一直让我感到惊讶：有些人的效率能比另一些人高出几个数量级──而且这还不是指他们使用工具的过程，而是他们与计算机之间的一般交互。我曾经跟同事开玩笑说，这个班上有些人的电脑压根不是在跑，简直就是在散步。顺理成章地，这让我开始反思自己的生产效率：我有没有让跑在（或者走在）我手边的这台电脑物尽其用？
那以后又过了几年，David Bock和我谈论起这件事。很多比较年轻的同事从来就没有认真用过命令行工具，自然也就无法理解为何这些工具能比时下这些漂亮的IDE还要高效。正如 David在序言里说的，我们讨论这个问题，并决定要写一本关于“高效使用命令行”的书。我们联系了出版商，然后开始从朋友、同事那里搜集各种各样的命令行巫术。
随后又发生了几件事：David创办了他自己的咨询公司，他的孩子也呱呱坠地──三胞胎！所以，显然已经有足够多的事情让David焦头烂额了。与此同时，我也明白了一件事：一本单纯讲述命令行技巧的书很可能会成为有史以来最乏味的书。差不多就在那个时候，我在班加罗尔的一个项目里工作，和我结对编程的搭档Mujir和我聊起代码中的模式、以及如何识别这些模式。如同醍醐灌顶一般，我突然意识到在自己搜集的所有技巧中都可以看到模式的踪影。我真正想要介绍的不是一堆命令行技巧，而是那些使得软件开发者们高产的模式。于是，就有了你手中的这本书。
这本书是写给谁的
这不是一本帮助最终用户更有效使用计算机的书。这是一本写给程序员的、关于如何提高生产效率的书，这也就意味着我可以对读者做很多假设，很多基本概念也不需要浪费很多时间去解释，因为软件开发者是极其强大的计算机用户。当然，没有技术背景的用户也应该能够从本书（尤其是它的第一部分）中学到一些东西，但我的目标读者只是软件开发者。
本书没有明确指定的阅读顺序，所以尽管随性翻阅吧──当然如果你喜欢从头读到尾也没有问题。书中的各个主题之间只有少许出人意表的关联，所以尽管从头读到尾的方式会略有优势，但还不足以认为这就是阅读本书的不二法门。
为什么要写一本关于程序员生产力的书？
我是ThoughtWorks的一名员工。作为一家跨国咨询公司，ThoughtWorks拥有大约1000名雇员，分公司遍布全球六个国家。因为咨询工作需要长时间的旅行（特别是在美国），我们公司的员工整体而言相对年轻。记得有一次，在一次公司组织的郊游活动（当然还有免费的饮料）中，我和一个人力资源部的同事闲谈起来。她问我有多大年纪，我告诉了她，她立即“恭维”地对我说道：“哇，你已经老到足够可以丰富我们公司的多样性了！” 这激起了我的一些思考：原来我已经在软件开发领域干了很多年了（莫名的伤感…在我的那个年代，计算机甚至还是由煤油驱动的呢）。这些年来，我观察到一个有趣的现象：软件开发人员正在变得越来越低效，而不是更加高效。在古老的时代（对于计算机的时代而言，那是20年之前），让计算机跑起来都是一件非常困难的事情，更不要说编写程序这些事了。你得是一个足够聪明的开发人员，才能让那难以驾驭的机器变得对你有用。如此残酷的现实，逼迫当时一些非常聪明的人开发出了各种各样的方法来和“难搞”的计算机交互。 
正是因为这些程序员的努力，计算机慢慢地开始变得易用。层出不穷的创新让计算机用户的抱怨也不再那么多。这些聪明的家伙开始为他们所取得的成就庆祝（就像所有其他能让用户“闭嘴”的程序员一样）。然后，一件有趣的事情发生了：对于整整一代程序员来说，他们不再需要“奇技淫巧”，计算机就会乖乖地满足他们的要求，他们也和普通的计算机用户一样，习惯了如今易用的计算机。那这有什么问题呢？毕竟，你不会拒绝提高生产力，对不对？
其实问题的关键在于，那些对普通用户而言能提高其工作效率的东西（比如漂亮的图形界面，鼠标，下拉菜单等等），对于其他一些人（程序开发者们）来说却是他们获得计算机最佳性能的障碍。“易用”和“高效”在很多时候其实是不相关的。那些在使用图形界面（好吧，直截了当地说，就是Windows）的过程中长大的程序开发者们，对那些老一代“聪明人”所使用的不仅酷而且高效的技巧一无所知。他们的计算机在大部分时间里根本不是在”跑“，简直就是在”散步“。我写此书，就是为了解决这个问题。
序
在我们这个行业里，不同程序员的个人生产效率可谓判若云泥──大多数人也许要花一周时间才能干完的活，有些人一天之内就搞定了。这是为什么？简单来说，这些程序员比他们的大多数同行掌握了更多趁手的工具。说得更明白一点，他们真正了解各种工具的功用，并且掌握了使用这些工具所需的思维方式。这些“高产程序员”的秘密是某种方法学与哲学的混合体，而Neal在他的书中准确地捕捉到了这种神秘的东西。
时间回到2005年，在去机场的车上Neal问我：“你认为这个世界会需要再多一本关于正则表达式的书吗？”然后话题就变成了“我们希望有什么样的书”，并从此种下了你手上这本书的种子。回望自己的职业生涯中从“好程序员”跃升为“高产程序员”的那个阶段，思索当时的情景和前因后果，我这样说道：“书名我还没想好，不过副标题应该叫‘用命令行作为集成开发环境’。”那时我把自己的生产效率提升归功于使用bash shell带来的加速，但这并不是全部──更重要的是我对这些工具更加熟悉，我无须思索怎么完成一些日常工作，而是自然而然地就把它们做好。我们还花了一些时间讨论过度生产*以及控制这种情况的办法。几年以后，在经过无数的私下讨论，以及围绕这个主题做了一系列演讲之后，Neal的大作终于得以付梓了。
在《Programming Perl》（O'Reilly出版）一书中，Larry Wall说到“懒惰，傲慢，缺乏耐性”是程序员的三大缺点：懒惰，因为你一直致力于减少需要完成的工作总量；缺乏耐性，因为一旦让你浪费时间去做本该计算机做的事，你就会怒不可遏；还有傲慢，因为被荣誉感冲昏头的你会把程序写得让谁都挑不出毛病来。这本书不会使用这几个字眼（我已经用grep检查过了），但你会发现同样的理念在本书的内容中得到了继承和发扬。
曾经有那么几本书，它们影响了我的职业生涯，甚至改变了我看待这个世界的方式。说实话，我真的希望早10年看到这本书，因为我确信它会对它的读者造成极其深远的影响。 <!--[if !supportFootnotes]--> David Bock 首席咨询师
CodeSherpas
<!--[endif]--> * 译者注：“过度生产”（hyperproductivity）是指在高效的工具和工作流程之下工作的工人得不到休息而过度疲劳、压力过大的情况。
目录
译者序
序
前言
第1章 简介 9
为什么要写一本关于程序员生产力的书？ 9
本书包含哪些内容？ 10
如何读此书？ 12
第2章 加速
启动面板 14
加速器 18
宏 24
小结 26
第3章 专注 27
排除干扰 27
搜索优于导航 29
找出难找的目标 30
使用有根视图 31
设好“粘性属性” 32
使用基于项目的快捷方式 33
使用多显示器 33
用虚拟桌面拆分工作空间 33
小结 34
第36章 自动化 36
不要重新发明轮子 37
建立本地缓存 37
自动访问网站
与RSS源交互
在构建之外使用Ant
用Rake执行常见任务 
用Selenium浏览网页
用bash统计异常数
用Windows Power Shell替代批处理文件
用Mac OS X的Automator来删除过时的下载文件
驯服Subversion命令行
用Ruby编写SQL拆分工具
我应该把它自动化吗？
别给牦牛剪毛
小结
第5章 规范性 54
DRY 版本控制 54
使用标准的构建服务器 55
间接机制 56
利用虚拟平台
DRY 阻抗失配 60
DRY 文档 65
小结 68
第6章 测试驱动设计
不断演化的测试 70
代码覆盖率 76
第7章静态分析 78
字节码分析
源码分析
用 Panopticode生成统计数据
动态语言的分析
第8章当个好公民 82
破坏封装 82
构造函数
静态方法
犯罪行为
第9章YAGNI
第10章 古代哲人
亚里斯多德的“事物的本质和附属性质”理论
奥卡姆剃刀原理
笛米特法则
“古老的”软件学说
第11章. 质疑权威 100
愤怒的猴子 100
连贯接口 101
反目标（Anti-Objects） 102
第12章 元编程 104
Java和反射 104
用Groovy测试Java 105
编写连贯接口 106
元编程的归处 107
第13章 组合方法和SLAP
组合方法实践 109
SLAP 114
第14章 多语言编程 119
历史与现状 119
路在何方？ 121
Ola的金字塔 123
第15章 寻找完美工具 125
寻找完美编辑器 125
编辑器参考列表 127
为你的工作选择正确的工具 128
丢弃错误的工具 132
第16章. 尾声：继续对话
附录 Building Blocks 135