笔记:卓有成效的程序员[上]
(The Productive Programmer——Neal Ford)
第1章 概述
其实问题的关键在于,那些对于普通用户而言能提高其生产率的东西(比如漂亮的图形界面、鼠标、下拉菜单等),对于其他一些人(程序开发者们)来说却是他们获得计算机最佳性能的障碍。
本书通过创造模式来描述一些东西,从而为这些事物命名:一旦一件东西有了名字,当再次看到它时就会更容易认出来。本书的其中一个目标是定义一系列的生产率法则,来帮助你更好地定义自己的提高生产率的技术。就像所有的模式一样,在有了名字之后,就能更简单地识别出来。同样,知道为什么一些东西会让你更加高效,会帮助你更快地识别出其他一些能使你工作得更有效率的东西。
(模式的作用)
第2章 加速法则
科幻小说作者道格拉斯·亚当斯有句名言:“我们真正需要的只是已经能工作的东西,但我们能得到的却只是技术。”
一个应用程序列表的有用程度与它的长度成反比。
启动面板
加载器(Launcher)是一类应用程序,允许你输入应用程序(或文档)名称的第一部分来加载它。
- Launchy
- Enso
- Windows 7自带的搜索/运行
Windows-<数字>:启动相应的快速启动项
加速器
首选键盘而非鼠标!
开发人员实质上是特殊的数据录入职员。我们输入计算机的数据不是来自外界资源,而是来自我们的大脑。但是数据录入操作员的教训仍能使我们产生共鸣。根据他们所输入的信息量来收费的数据录入工人知道,使用鼠标会以数量级程度降低他们的速度。开发人员可以从中学到重要的一课。
遗憾的是,VI的学习曲线太陡峭,大概需要两年坚持使用VI才能达到这种程度——就算已经用了一年又364天,你还是会有遇到难题的时候。
Emacs是一个原始的IDE:通过插件结构,它可以做的远不止是编辑文件。VI用户轻蔑地将Emacs称为:“一个只有有限文本编辑能力的伟大的操作系统”。
VI和Emacs都支持一个非常重要的加速器:永远不要将你的双手从字符按键上移开。即使是下移到键盘上的箭头按键都会使你慢下来,因为你必须再次回到主排键来输入字符。真正有用的编辑器会使你的手保持在最佳位置,同时进行输入和导航。
Windows资源管理器的地址栏也提供Tab文件名补全
Alt-D:切换到地址栏
多重剪贴板:成批复制粘贴要比反复多次复制粘贴快
环境切换会消耗时间!
剪贴板增强软件综述:CLCL,ClipX,Ditto等:http://xbeta.info/clipx-clcl-ditto.htm
开发加速器
测验一下:什么是屏幕上最大的可点击目标?答案是:正位于你光标下的那个目标,这就是为什么右键菜单中应当放置最重要的内容。从执行点击的角度来说,你鼠标下的目标对象实际上是无穷大的。第二个问题:什么是第二大的目标?是屏幕的边缘,因为你可以用最快速度把鼠标甩到边缘,却不会越过它。这说明真正重要的内容应该放到屏幕的边缘。这些结论来自于Fitt定律:“需要移动的距离”和“目标的大小”共同决定了用鼠标点击一个目标的容易程度。
在上下文中学习IDE快捷键,而不要去背长长地列表。
当你第二次输入一个复杂结构时,将它做成模板。
宏
如果要对多行文本做同样的操作,就应该找出其中的模式,并把它记录为一个宏。
在一段文本上执行某个特定操作的次数越多,就越有可能会再次重复它。
不要总是重复输入相同的命令。
AutoHotKey:键盘宏工具
小众的AHK专题:http://www.appinn.com/category/autohotkey/
每天花一点点时间来使每一天都更高效。
一切的要点都在于寻找一种平衡:一方面需要花时间去学习,另一方面这些学习会让你变得更高效。
第3章 专注法则
Windows 有时就像一个被惯坏的3岁小孩,一直大喊大叫着想要引起你的注意。
不要文件树,要搜索。
不远的将来:按属性搜索
在诉诸高级搜索之前,先尝试简单的搜索。
有根视图把资源管理器变成了项目管理工具。
适用于普通的资源管理器的参数:explorer /e,/root,c:\work\dir
虚拟桌面可以让原本杂乱无章的一大堆窗口变得整洁。
第4章 自动化法则
计算机原本就该从事简单重复的工作。只要把任务指派给它们,它们就可以一遍又一遍毫不走样地重复执行,而且速度很快。但我却经常看见一种奇怪的现象:人们在计算机上手工做一些简单重复的工作,计算机则在大半夜扎堆闲聊取笑这些可怜的用户。
软件开发中有很多显而易见的东西需要自动化:构建、持续集成和文档。
cURL能用各种协议与加密的网站交互。
Pipes能用来组合、过滤和处理RSS信息,用于创建网页或是新的RSS源。
即便不是工具最初的设计意图,只要是合适的场合,同样可以使用这些工具。
Ant内建对批量文件的支持。
用Rake执行常见任务,配合Ruby驱动底层操作系统。
Selenium用来Web测试的浏览器。
手工执行简单重复的任务会让你变傻,会消耗你的注意力,而注意力是最重要的生产率之源。
写bash脚本的两条原因:
第一,既然你已经做了一次,那么几乎可以肯定以后你还会做同样的事。
第二,把一切有用的命令都保存在脚本中,就等于给你做的事情(甚至还可能包括为什么要做这些事)创建了一份活的文档。
是否应该自动化的关键在于投资回报率和缓解风险。
当你打算把某个任务自动化时,项目经理可能会担心你的工作失控。我们都有过这样的经验:原本以为只要两个小时就能搞定的事,最终用了4天才能做完。要控制这种风险,最好的办法就是“时间盒”(timebox):首先定好一段时间来探索和了解情况,时间一到就客观地评估是否值得去做这件事。使用时间盒是为了掌握更多信息,以便作出切合实际的决策。时间盒到期以后,如果掌握的信息不够,你也可以再增加一个时间盒,以便找出更多信息。我知道,巧妙地自动化脚本比那些无聊的项目工作更让你感兴趣,但还是现实点吧,你的老板一定比较喜欢脚踏实地的工作量估计。
研究性的工作应该放在时间盒里做。
剪牦牛毛是件危险地事,因为它会吃掉你大把的时间。这也能解释为什么任务工作量估算常常出现偏差:剪光一头牦牛的毛需要多少时间?始终牢记你到底要做什么,如果情况开始失控就及时抽身而出。
第5章 规范性法则
你、Bob,还有你所有的同事们正遭受折磨,因为你们使用了某个重要东西的多个版本,事实证明这样的东西一定会失去同步。
规范表示(canonical representation)指的是不损失信息的前提下最简单的表达形式。规范性(canonicality)指的是消除重复。
Don’t Repeat yourself,DRY
作为一种显而易见的规范性的应用,版本控制在绝大多数开发企业中已经成为常态。
我倾向于优先选择不会锁住文件的版本控制系统。如果有不止一个开发者作了改动它会合并文件内容(这叫做乐观修订)。这是一个很好的例子:工具应该鼓励好的行为。惩罚坏的行为。尽早、尽可能频繁地提交文件到版本控制中鼓励你进行小步改动。如果进行了长时间的改动你就会面临合并冲突的问题,认识到这一点将鼓励你越发经常地提交,这种工具产生了一种有用的张力,以微妙但有益的方式改变了你的工作方式。
尽管版本控制系统的使用相当普遍,但通常并没有用到它全部的潜能。版本控制能够让你的项目攻坚尽可能地DRY。构建你的项目所需要的任何东西都应该进入版本控制,包括二进制文件(库、框架、JAR文件、构建脚本等)。唯一不应该在版本控制系统中的是因为路径、IP地址等原因而特定于开发者及其的配置文件。即使在这种情形下,也只有特定开发者机器的信息应该保存在本地文件中。构建工具(像Ant和Nant)允许你把特定的信息抽取到构建脚本之外,从而隔离变化。
对于任何你不自己去构建的东西,只在版本控制中保存一份。
每个开发组织都需要的另外一种实践是持续集成。持续集成是一个过程,在这个过程中尼定期编译整个项目,运行测试,生成文档,以及执行其他一切构建软件所需要的活动。
使用间接机制创建友善的工作空间(workspace)。
针对Windows 2000 和 XP 用户的 junction:是一个命令行工具,允许你创建和删除硬链接。
通过复制粘贴来复用是邪恶的,不论你复制粘贴的是什么。
你有过打电话交谈时有恼人的回声的体验吗?这就是阻抗失配(impedance mismatch),是由信号无法精确同步引起的。阻抗失配是由电子工程领域渗透到软件时间的一个词汇,因为它描述了我们的一些问题。
在软件开发中,阻抗失配是导致违反DRY原则的常见原因之一。阻抗失配发生在两种抽象风格的边界处:从基于集合到基于对象,或从过程式到面向对象。因为你试图融合两种抽象风格,在边界处就出现了重复。
不要让对象-关系映射工具(O/R映射器)违反规范原则。
这个问题的解决方案是创建唯一表示,并以它为基准声场另外两种。第一步,我们需要决定谁是这些向南喜的“正式”持有者。
永远不要手动编辑一个自动生成的文件,因为在你下次执行构建的时候它会被重新生成。
通过扩展开放类或者部分类来为生成的代码增加行为。
过时的文档比没有文档更糟,因为它会主动误导你。
文档总是管理者和开发者之间的战场:管理者想要更多,而开发者想给更少。它也是对付信息重复的战场。开发者应该能够积极主动地修改代码,改进它的结构,使它能够逐渐演化改进。如果所有的代码都必须有文档记录,那么文档也必须同时演化。但绝大多数时候,代码和文档会失去同步,因为进度的压力,没有动力,以及其他原因。
对管理者来说,文档意味着缓解风险。
阻止文档过时的最好方法是尽可能自动生成它。
始终保持“活”的文档。
重复是软件开发中最大的阻力!
>>精选软件资源站
善用佳软 :http://xbeta.info
小众软件 :http://www.appinn.com
SF :https://sourceforge.net
绿盟 :http://www.xdowns.com
汉化新世纪:http://www.hanzify.org
还没有评论