《卓有成效的程序员》读书笔记
生产力机制
加速法则
加速你与计算机的交互,去除计算机繁文缛节
- 键盘输入总比导航快
使用启动器来启动应用程序,mac上可以考虑 Alfred
花时间学习你手边所有隐藏的快捷键
环境切换会消耗时间
使用多重剪贴板
- 记住历史
忘记历史意味着你得再输入一遍
shell中使用方向键查看近期历史命令
开发加速器
安装按键提示器插件,每次使用菜单时会提醒你用快捷键
在上下文中学习IDE快捷键,而不要去背长长的列表
通读一遍快捷键,把对你确实有用但不知道的快捷键找出并设法记住,联通“可以这样做”与“如何去做”
使用代码模板 - 当你第二次输入一个复杂结构时将它做成模板
代码资源查找采用搜索而非导航
宏
如果要对多行文本做同样操作,应该找出其中模式,并把它记录为一个宏
不用总是重复输入相同的命令,使用宏记录器简化重复的工作
每天花一点点时间来使每一天都更高效
总结:多用键盘输入,少切换环境,记住输入历史,在IDE中多用快捷键、代码模板、搜索等,使用宏搞定重复的事情
专注法则
集中注意力,去除低效率和不必要的干扰
精力越集中,思维越缜密
隔离策略
阻止听觉打扰:戴上耳机
阻止视觉打扰:关闭电子邮件客户端,关掉桌面通知
创造安静时间
搜索优于导航
草堆越大,从中找到一根针就越难
不用文件树,要搜索
使用正则表达式找出难找的目标
使用多显示器
一个显示器写代码一个调试
一个放文档一个写代码
用虚拟桌面拆分工作空间
设置“交流”、“文档”、“开发”桌面,让工作环境不再混乱
改变环境减少打扰,减少来自电脑的打扰,借助工具保持专注
自动法则
不用浪费时间动手去做可以被自动化的事情
计算机原本就该从事简单重复的工作
图形化环境是用来帮助新手的
不要重复发明轮子,使用现有的工具进行自动化构建、持续集成和文档
建立本地缓存,离线文档
使用Rss源交互
在构建之外使用ant
使用应该自动化的关键在于投资回报率和缓解风险
牢记你到底要做什么,不要把时间浪费在做与目标偏离太远的事情上
把重复工作自动化,抽身出来做更有价值的事
规范性法则
规范性指的是消除重复
- DRY版本控制
尽早、尽可能频繁地提交文件到版本控制中鼓励你进行小步改动,减少合并冲突
把公共库和二进制文件放入版本控制,只保存一份副本
用持续集成服务器作为单独的构建机器,阻止一些难以察觉的工具依赖影响你的构建过程
间接机制
使用间接机制确保项目里每个人使用完全相同的一组插件
使用间接机制来保持文件同步
通过复制粘贴来复用是邪恶的,不管你复制粘贴的是什么
编写脚本周期性的保存规范的配置
利用虚拟机使项目依赖标准化
不要让对象关系映射违反规范原则
DRY文档
过时文档比没有文档更糟糕,因为它会主动误导你
阻止文档过时的最好方法是尽可能自动生成它
白板+数码相机强过任何CASE工具
重复是软件开发中最大的阻力,DRY是写出良好代码的根本原则
实践
测试驱动设计
单元测试是一项提升代码质量的最佳实践
TDD改进代码设计
养成更好的代码消费意识
促使你去模拟被依赖的对象,考虑对象间交互
永远保持把测试作为构建过程的一部分
有了测试的保证,完全可以放心大胆的去修改代码
把注释重构成方法
TDD下开发的代码。其方法名描述的就是一个原子操作,更快的发现错误的根源
静态分析
静态分析工具提供了便宜实惠的验证手段
字节码分析
FindBugs
- 源代码分析
PMD
- 代码风格检查 CheckStyle
当个好公民
不用盲目地去创建set/get方法,只有在需要才创建它
使用有意义的构造函数,而不是把默认构造函数当做一个创建对象的机制
静态方法的一个好处是,可以作为一个黑箱式的独立、无状态的方法
不要创建全局变量,即使是对象层次的全局变量
单例模式的邪恶地方在于它内藏的状态使它不能被测试,它是面向对象版本的全局变量
使用简单的对象加一个工厂替代单例模式,工厂负责监管实例,简单对象只管理关于配置的信息和行为
YAGNI - 不要过度开发
只开发当下需要的东西
不要沉溺于预想开发,预想开发会造就框架
如无必要,勿增复杂度
最好的框架不是出自于那些坐在象牙塔里揣测程序员需求的设计师,而是从真实的代码中抽取出来的
把没用的代码从代码库中剔除,在修改功能代码时就不会那么费力
古代哲人
分清楚软件开发中的本质性质和附属性质,致力于本质复杂性,去除附属复杂性
如果对于一个现象有多种解释,那么最简单的解释往往是最正确的 - 奥卡姆剃刀原理
任何对象都不需要知道与之交互的那些对象的任何内部细节 - 迪米特法则,它应该只能调用该对象本身、作为参数传进来的对象、在方法内创建的对象
质疑权威
驼峰命名法未必适合所有情况
使用build模式给对象动态增加属性
反转计算的前因和后因
元编程
编写“会写程序”的程序
java中使用反射
使用Groovy测试java
组合方法和SLAP(单一抽象层次原则)
重构成组合方法能暴露出隐藏的可复用代码
TDD实践推动组合方法模式
SLPA强调每个方法中所有代码都处于同一级抽象层次
把所有实现细节封装在公共方法之外
多语言编程
计算机语言就像鲨鱼,要是保持静止就会死
多语言编程是指除了一种通用语言之外,还使用一种或多种专用语言来构造应用程序
程序员的生产率比计算机的时钟周期更重要,而且摩尔定律自然会解决这种问题
用一种静态语言作为可靠的基础,用一种彰显开发效率的语言来完成日常编程任务,用多种领域特定语言让我们的代码更贴近业务和需求
寻找完美工具
寻找属于你的完美编辑器,并从里到外去了解它
完美编辑器特性
宏记录器
可以从命令行调用
正则表达式的查找与替换
增强的剪切和复制命令
将行为保留在代码中,通过配置实现延迟绑定
命令行的有勇指出在于得到执行结果后你能做什么