《程序员的修炼之道》读书笔记

最近看了《程序员的修炼之道-从小工到专家》,里面讲的是怎样成为一个注重实效的程序员。讲的是程序员,但是其实中间的很多道理作为一个职场人来说,都是适用的。因为最近看得个人管理方面的书籍比较多,还是按照很多大师经常提到的道、术、器、用四个字来总结一下这本书,也是给自己的一个发展定位:我自己想要成为一个怎样的程序员。


道:一个注重实效程序员需要秉持的理念

书的第一章的名字叫注重实效的哲学。其实不像很多人想的那样,程序员并不是一个冷冰冰的枯燥的集体。反而,程序员是更多善于思考的一个集体,不仅仅是对工作,对于人生、世界,程序员都有属于自己的解释。所以才会有这么多的程序员的纷争,从大了讲有自由与封建(开源/闭源)之争;往具体处说,又有诸如UNIX哲学等哲学流派。但作为一个注重实效的程序员,秉持的理念是怎样的、他的人生观应该是怎样的?这本书的第一章给开了个头。

注重实效的程序员在编程的时候,他们是完美主义实用主义的结合者。他们对自己的代码要求完美,对自己的错误负责,他们不能容忍破窗户的存在,因为它最终会导致一个失败的项目。但同时,他们也知道在什么时候止步,他们明白他们是在一个不完美的世界上开发代码的,所以他们通常把质量作为一种需求,而不是一个极大的简单期望。

但是他们的世界是宏观的,他们往往想要从更高的角度来思考问题。他们需要确认自己的每一步都是为了自己的最终愿景,每一行代码都是为了项目的完美实现。他们秉持着这样的价值观,不断的判断自己是否偏离了最终的方向。

另一方面,所有的高效的程序员都是进化论的支持者,所以他们十分注重自己的进化。他们往往会定期的投资自己,用知识不断武装自己,来适应不断更新的环境。同时,他们不断的同环境交流,很多时候是使用网络或者书面的形式。同时,他们会让自己的产品同样是可进化的化,具有可撤销性,来适应环境。

最终,是所有注重实效的程序员都坚持的一个原则:简单原则。他们会尽一切可能避免重复,尽一切的可能进行正交的操作。

术:实现高效的流程方法

根据上面的原则,我们有通常的几个规律来实现我们的项目。

当我们面对一个新的项目的时候,我们不应该过于详细的进行每个模块的设计,而是应该使用曳光弹,首先搭建起我们软件框架。随后,在我们缺的程序框架上进行完善。这样能够高效的优先确定我们的路径。

随后,当我们实现具体的功能的时候,我们可以使用原型,原型可以允许适当的忽略某些细节,来快速验证我们的想法。

针对具体的问题,我们应该刨除编程语言的干扰,靠近问题领域编程,使用领域语言对问题进行有针对性的开发。

另外两个适用的通用规律是估算合约。我们应该使用合约对我们的项目需求和设计进行规范,我们应该使用估算对我们的项目建立模型,设定自己的计划,随后进行代码迭代。

器:带来效率提升的工具

从思想上提高了认识之后,我们可以从工具着手提高我们的效率。当然最先确定应该是我们的编辑器,一个高效的编辑器应该满足下面的特点:

  • 可配置
  • 可扩展
  • 可编程

使用适当的编辑器可以快速的帮助我们提高生产效率。此外我们应该使用适当的调试工具,及时的进行我们的测试和错误跟踪。随后我们应学会使用源码控制工具,使用源码控制工具不仅可以帮助撤销错误的操作,还可以让我们能够快速的定位错误,自动化的进行测试。这是最重要的三个工具,另外一些可以提高我们工作效率的工具是:

  • 纯文本,它可以用来保存我们的配置、数据、历史工作等,这是一种通用不过时的工具,可以协同我们的开发、测试,且不受特定语言和系统的影响。
  • 命令行工具脚本语言,有效的利用这两者一方面可以让我更加深入的使用计算机的很多功能,另一方面提供了我们自动化的方式来进行的我们的编码、测试、乃至快捷地搭建我们的架构。同时可以帮助我们编写自己的代码生成器,避免我们进行重复的工作。

用:践行高效的过程

1. 项目之前

在一个项目开始之前,我们需要的是深入挖掘需求,按照合约设计的方法,规范我们的项目。我们应该找到我们的设计的边际,找到我们真正的约束。

2. 项目架构

对于软件的架构,如上所说,应遵顼正交性的原则,这就要求我们将我们模块之间的耦合降低至最低,有下面的方法帮助我们实现这个目的:

  1. 我们按照德墨忒耳法则来编写代码:

    得墨忒耳定律--对象 O 的 M 方法,可以访问/调用如下的:

    • 对象 O 本身
    • M方法的传入参数
    • M方法中创建或实例化的任意对象
    • 对象 O 直接的组件对象
    • 在M范围内,可被O访问的全局变量
  2. 我们使用元程序的设计
    使用我们上面提到的纯文本工具,将我们的配置等抽离出来。将抽象放进代码,将细节放进元数据。

  3. 我们将时间解耦
    将那些时间上不互相依赖的模块解耦,提高并发性。

  4. 使用合适的软件架构,如:
    使用 MVC 架构,将视图和模型分开
    使用 Blackboard 架构,协调工作流。

3. 项目编程

当我们编程的时候,应该首先保证程序的准确性,主要是两个方面:

  • 让错误尽可能早的体现出来,而不是让错误来破坏我们的代码。
  • 对于不可能发生的事情,应该使用断言确保它不会发生。

另外,我们需要认清异常的意义:异常应该用于异常的问题,而不是那些我们自己需要前置判断的问题。比如我们的资源使用,必须考虑到资源配平的问题。

其次,我们应在编程的过程中重视重构测试的意义。

你可能感兴趣的:(读书笔记)