第七章 欲善其事,先利其器
- 要创造出非凡的代码,不仅需要有技艺精湛的编程高手,还要有好用的工具和灵活运用工具的能力。
- 你使用工具的方式可以看出你是否能称为一名真正多产的程序员,在极端的情况下,这些工具可以提供决定你的项目成功与否的简化操作,软件工厂哪不懈的前进步伐,要求你紧紧抓住任何可以帮助你编写更好的代码,以及更快和更可靠的编写代码的工具。
我们用于构建软件的工具多种多样,一般在以下几方面会有所不同: - 复杂性,有些工具是精心设计的环境,具有许多功能和不可思议的可配置性,还有一些则是为了但个人物而设计的小巧的工具。
- 使用频率,有些工具使用的非常频繁,离了它们我们就没法生活,而有一些工具我们好久才使用一次,但是当你需要它们时就会发现它们价值连城。
- 接口,有的工具有着非常美观的GUI,而有些则只是CLI接口。
- 集成,有些工具适合较大的工具链,常常包含在一个图形接口的集成开发环境中,独立的命令行工具主要用作一种数据过滤器,倾向于生成纯文本的输出,其输出的格式适合作为其他工具的输入。
- 成本,许多免费工具都很优秀,但是一般来说付出多少就得到多少,免费工具的文档一般较差,支持较少。
- 质量。
- 尽可能全面的了解你的常用工具,为了熟悉这些工具而投入的少许时间会让你很快就有所收获。
- 工具不是替我们做我们该做的工作,而是使我们有能力做我们的工作,软件的质量总是取决于程序员的能力。
- 成为一名成熟的程序员的条件之一,就是明白不同的情况下需要不同的解决方案,并将正确的工具应用到正确的工作上。
- 用实际的眼光来对待软件工具——仅当工具能够让你的生活轻松些的时候再使用它们。
- 我们需要了解可用工具的种类,确保自己知道从哪里可以活的这些工具,即使你现在还不需要它们。
- 了解它能做些什么。查清它的功能有哪些,即它究竟能做些什么,而不是你觉得它应该能做什么。
- 学习如何驾驭它。仅仅因为你在运行某个工具时没有出错,并不能说明它是完全按照你的要求来完成工作的,你必须懂得如何正确使用它,并却性你可以让它执行你的命令。找出使用每种工具的最好方式。
- 了解它适合什么任务。了解每个工具是如何融入到其他可用工具的环境中的,将合适的工具用到合适的任务中,不要拿着牛刀去杀鸡。
- 检查它是否可用。每个人都有可能在某个时刻称为糟糕工具的牺牲品,对于诊断你所遇到的任何问题来说,拥有你的工具的源代码是非常有用的。
- 找到了解更多信息的途径。你不必事事都了然于心,关键是要认识那些明白的人。
- 查明新版本何时出现。
- 工具的数目多的惊人,而且增长的速度很快。你的工具套件到底包含哪些工具将取决于你的工作类型。
源代码编辑工具包括: - 源代码编辑器。可能是你最重要的工具,比编译器还要重要。你应该选择一个你用起来感觉很舒服并且能够完成你的任务的编辑器。
- 源代码处理工具。
- 源代码浏览工具。
- 版本控制。
- 源代码生成工具。
- 源代码美化工具。
代码构建工具包括: - 编译器。
- 链接器。对于JAVA和c#来说,链接器是与运行时环境结合在一起的。
- 构建环境、
- 测试工具链。测试工具是代码的构建工具,而不是调试工具。
调试和调查工具包括: - 调试器。拥有一个高质量的调试器并了解如何使用它,可以为你节省大量用于追查意外行为的开发时间。所有IDE和工具链都有其自己的调试器。
- 分析器。分析器用于分析代码各部分的运行时间并找出瓶颈所在。
- 代码校验器。代码校验器分为静态和动态两种,前者以一种与编译器类似的方式整理代码,检查你的源文件,以确定可能存在问题的区域以及对语言的错误使用,例如lint;后者在代码被编译时对代码进行修改和茶装,然后在运行时执行检查,例如内存分配/边界检查器。
- 度量工具。它们会生成关于代码质量的统计评估,有效地指出最脆弱的代码区域,通常都是以函数为基础来进行收集的,最基本的度量数据就是代码的行数,其次就是注释与代码的比率。
- 反编译程序。
- 缺陷跟踪。提供一个共享的数据库,其中包含了你的系统中找到的bug的跟踪记录。
语言支持工具包括: - 编程语言。语言本身也是一种工具。掌握几种语言,每个语言都会教给你一种解决问题的不同方式,将语言作为工具来考虑,为每项任务选择最合适的语言。
- 运行时和解释程序。大多数语言没有必需的运行时支持就无法使用。
- 组件和库。
其他工具包括: - 文档工具。良好的文档非常宝贵,它是设计良好的代码的关键部分。文档不仅需要编写,也要被阅读,好的在线帮助系统非常重要。
- 项目管理。是你可以报告和跟踪工作的进度、管理缺陷和监视团队的绩效等。
- 当我们无法为一项任务找到合适的工具,而手工完成它看起来有时不可能时,我们可以使用“自行设计”的工具,如果这项任务会重复的出现,短暂的工具开发从长期来看可以为你节约大量的时间。
创建工具的方式包括: - 以一种新的方式来组合现有的工具。
- 使用脚本语言。
- 从零开始创建完善的程序。
在编写工具时,需要考虑以下因素: - 使用者的期待。
- 是否可以扩展一个现有工具。
- 任何程序员都应该拥有的最小工具集包括:1. 某种形式的编辑器;2. 必需的最小语言支持;3. 运行这些工具的计算机。
- 一个高效的程序员的工具箱一般还至少包括:1. 代码版本控制系统;2. 一套比较好的库;3. 一个构建工具。
- 对你的工具箱抱有一种职业的、负责的态度,将使你成为一名更好的程序员。
- 优秀的程序员:1. 愿意一次学会如何使用一种恰当的工具,而不愿意不断的重复执行一项单调乏味的工作;2. 了解不同的工具链模型,并且使用起来每个都感觉很舒服;3. 使用工具以使他们的生活更简单,但是不会成为工具的奴隶;4. 将他们所使用的所有东西当做是工具,一种可以替换的工具;5. 很有效率,因为他们对工具的使用是第二天性。
- 糟糕的程序员:1. 了解某些工具的使用方法,并且从这些工具的角度来看待所有不同;2. 害怕花时间来学习新的工具;3. 从一开始使用某种开发环境,到现在一直近乎虔诚的使用它,从不尝试改变,甚至不尝试了解其他开发环境;3. 当遇到一个颇有价值的新工具时,并不将其添加到他们的工具箱中。