- 错误处理:异常是一种强大的错误报告机制(对返回值的一种补充)。编写的代码的90%是用来处理错误的
优秀程序员在编写主要代码时同时编写错误处理代码,覆盖了全部的错误可能性
- 日志:收集重要跟踪信息,找问题切入点
- 报告:人机交互留到真正重要的时刻
- 恢复:错误向上传
- 每个函数中应该执行的一些错误检查:监察所有的函数参数、关键点处的不变条件是否满足、外部值得有效性、检查所有系统调用和其他下级函数调用的返回状态
- 管理错误:
- 避免可能造成的错误——预留足够的资源避免资源分配错误,保证的内存缓冲池
- 定义程序在不正常的环境下的预期行为
- 清晰定义哪个组件负责哪个错误,在模块接口中声明
- 检查你的编程实践
- 跟踪一个错误地时候,判断错误来源是这里还是前一个问题的故障现象,如果是后者,不要在这里编写处理代码
- 使用工具构建软件:
使用工具的方式可以看出你是否能成为一名真正多产的程序员,要紧紧抓住能帮助你编写更好代码、更快更可靠代码的工具
在大型项目中尝试不同的编程环境下工作,理解什么造就了好的工具链,并帮助你从全局的角度了解软件工具
尽可能全面了解你的常用工具,为了熟悉这些工具而投入的少许时间会让你很快有所收获
- 成为超级工具使用者:清楚手头有那些工具、花时间了解更充分信息、时刻准备试用新的工具、匀出一部分时间磨练实用工具的技巧,就像你会花时间阅读技术书刊。时刻转杯试用新的工具,花时间学习它,这是一种健康的态度。确保你使用的工具就是你所能获得的最好的。
- 步骤:
- 了解它能做什么:查清功能,究竟能做什么,而不是你觉得它应该能做什么 ;明白其局限性
- 学习如何驾驭它:如何正确使用它,它是如何融入到整个个工具链中的。理解如何驾驭每个工具的功能,并了解它们如何相互操作,会让你的工具使用水平提高一个层次。找出使用每个工具的最好方式,如能自动触发么。
- 了解它适合什么任务:了解每个工具是如何融入到其他可用工具的环境中的。如编辑词法分析器时,yacc很有用。将合适的工具用到合适的任务上,不要拿着牛刀杀鸡
- 检查它是否可用:拥有工具的源代码很重要,查出工具到底在做什么,选择工具的一个决定性因素。
- 找到了解更多信息的途径:认识那些明白的人!!! 工具的文档在哪儿?提供支持的是谁?如何获取更多的信息? 手册、发行说明、在线资源、内部帮助文件、参考指南。
- 查明新版本何时出现:了解工具的最新信息非常重要,但更新时注意慎重。
- 哪个工具:IDE集成的借口当然很方便,但是了解每个工具是如何独立工作的也非常重要,使你明白如何更好利用IDE的每种可用功能,会明白你的IDE缺少哪些有用的功能。大多数IDE是模块化的 ,可以用一个更好的组件替代其中的某个组件。
- 源代码编辑工具
选择编辑器用起来很舒服且能够完成你的任务,
不要仅仅因为某个编辑器嵌入在你的可视化IDE中,就把这个编辑器当做是最好的
应具有以下特点: 易于理解的语法着色、简单的语法检查、良好的渐进式搜索工具、键盘宏录制、高度的可配置、可以在我所使用的所有平台上运行。
根据你的工作性质,你会发现一些其他类型的编辑器,包括二进制文件编辑器、特定文件格式的编辑器如xml文件编辑器。
vim和emacs是著名的unix编辑器,现已发行了适用于几乎所有平台的版本
源代码处理工具
:diff、sed、grep等
源代码浏览工具
:帮助自己研究和理解代码、设计代码、轻松执行搜索浏览交叉引用等操作,有些工具生成调用关系树等、这些工具可能会生成一个图形化的流程图,或与你的编辑器集成一起,提供自动执行、函数调用帮助等功能。
LXR、Doxygen、ctags都是很好的免费工具。
版本控制:
源代码生成:一些自动生成源代码的工具,如yacc生成器;对于那些会写出大量你必须日后进行修改或者矫正的框架的代码,必须小心对待,使用之前,必须真正理解他们,甚至可以自己编写脚本生成重复的代码段。
源代码美化工具:通过创建一致的“最小共通特性”版面,同意原代码办事,但弊大于利。
- 代码构建工具
链接器:与编译器紧密相连,获取编译器生成的所有中间对象文件,java语言链接器与运行时环境结合在一起。
是否会剥出二进制、是否会删除重复的代码、是否可以让链接器生成库对象而不是可执行程序?
构建环境:学会如何最有效的利用集成构建环境,但是不要因此而不了解如何使用每个单独的构建工具。
测试工具链:测试工具是代码构建工具而不是调试工具。一边编写代码一边测试。一些工具自动帮你执行单元测试,提供一个框架,将代码放入测试代码,有些工具可以生成测试数据和创建测试用例,还有些工具可以模拟目标平台,甚至包括模拟如内存不足、负载过高。
- 调试和调查工具
分析器:如果代码运行过慢,分析器分析代码各部分运行时间找出瓶颈,进行优化。
代码校验器:静态(现以内置在现代编译器中,检察源文件等)和动态(内存分配、边界检查器等)
度量工具:静态分析器,进行质量统计,如圈复杂度
反汇编程序:深入到可执行文件中,检查程序的机器代码,高级的反汇编程序生成以高级语言表示的二进制文件的重新解释
缺陷跟踪:提供共享数据库,包含在你的系统中找到的bug的跟踪记录。
- 语言支持工具
运行时和解释程序:java 的jvm是一种常见的语言解释程序。
组件和库
- 其他工具
项目管理工具
优秀的程序员:
- 愿意一次学会如何使用一种适当的工具,而不愿不断重复执行一项单调乏味的工作
- 了解不同的工具链模型,并且用起来每个都感觉很舒服
- 使用工具以使他们的生活更简单,但不会成为工具的奴隶
- 很有效率,因为他们对工具的使用是第二天性