《代码的艺术》读书笔记

131 阅读6分钟

第1章 软件工程能力

百度内部材料将工程能力定义为: 使用系统化的方法,在保证质量的前提下,更高效率地为客户/用户持续交付有价值的软件或服务的能力.

  1. 研发的目的是提供价值
  2. 质量第一
  3. 实现价值持续交付.软件/服务的价值提供是长周期的,从业者要做好长期维护,长期服务,持续改进优化的思想准备.
  4. 系统化和科学的方法
  5. 持续提升研发效率
    人是工程能力的根本
    工程能力提升源于自我驱动.对于提升工程能力,工程师的自我驱动是最重要的.
    如果一个人知道什么是高效而正确的方法,那么他(她)一定不会继续使用低效且错误的方法.

工程能力对个人能力的素质要求

  1. 项目管理
  2. 写好文档
  3. 写好代码 按照重要性排序:项目管理>文档>代码

第2章 代码的艺术

在尽量早的时候,形成正确的意识,对一名软件工程师的快速成长是非常关键的.

软件工程师要具备非常高的综合素质

  1. 专业知识.要掌握的专业知识包括数据结构,算法,编码方法等,还包括系统结构,操作系统,计算机网络,分布式系统等
  2. 产品.要对业务有深刻的理解.
  3. 项目管理.
  4. 研究和创新

总之,软件工程师不等于"码农".软件工程师要具备综合素质,要成为一名优秀的软件工程师至少需要8~10年的历练和成长.

成为优秀软件工程师的三条路径

  1. 学习-思考-实践
  2. 知识-方法-精神
  3. 基础乃治学之根本

对于软件工程师来说,分析问题、解决问题的能力才是最重要的.

To Identify the Fundamental Problem,and solve it.(去识别、定义那些最重要的问题,并解决)

好代码的来源不是写好代码.好代码是一系列工作的结果,包括需求分析,系统设计,编码,测试,上线和运营等.

第3章 代码评审

代码评审的重要意义

  1. 代码评审有助于提升代码质量
  2. 代码评审有助于知识的传递

代码评审的正确态度

  1. 评审人对被评审的代码逻辑应做到"完全看懂"
  2. 评审人对什么是好的代码应该有正确的认识
  3. 评审人对代码的质量应具有一丝不苟的态度
  4. 要将代码评审放在和编写代码同等重要的位置
  5. 在代码评审中要以"提升代码质量"为最终目标,代码编写者和代码评审人要共同努力

代码评审的推荐步骤

  1. 看清代码全貌.要搞清代码中模块划分的逻辑,明确模块间的关系
  2. 查看模块.要看清各模块内部的逻辑,搞清楚模块内的关键数据,关键的类和函数
  3. 查看类和函数内部的逻辑.这一步要关注逻辑的正确性,实现的合理性,段落划分的合理性

对坏代码的简单判断

  1. 花5分钟都不能看懂的代码
  2. 需要思考才能看懂的代码.Don't make me think
  3. 需要来回翻屏才能看懂的代码
  4. 没有空行注释的代码

代码评审的注意事项

  1. 建立Owner(责任人)制度.由一个技术过硬的工程师作为Owner,所有提交的代码,必须由Owner做最终确认
  2. 综合多种沟通机制.在必要时,评审的双方可以进行面对面的沟通
  3. 控制节奏.每次提交的代码不要太多,应尽量控制在几百行内
  4. 为评审留出时间.在项目估算和排期的时候,把代码评审的时间考虑进去
  5. 不放过任何一行代码.评审人对提交的代码,都要认真评审.对于评审发现的问题,要一追到底,在问题没有完全改正确前,不能让代码通过

第4章 "代码的艺术"应用

这里主要讲了一个Mini-spider的编程练习题目

第5章 项目文档

对于一名软件工程师来说,编写代码,写项目文档,做项目管理都是最基本的能力要求.代码编写能力是所有软件工程师都需要掌握的能力,写项目文档的能力是对高阶软件工程师的基本要求.不会写文档,就不会做设计,不会写文档的人更无法成为高阶软件工程师

写文档的一些通用模式

1. 分析和解决问题.

一般模式是

  1. 提出问题
  2. 分析问题
  3. 解决问题

2. 提出建议

  1. 出发点
  2. 实现的手段
  3. 工作量的预估
  4. 收益的预估

3.系统的设计

  1. 系统的功能
  2. 系统的组成
  3. 系统的行为

4.程序的设计

  1. 程序的架构
  2. 程序中包含的数据
  3. 程序的模块划分
  4. 程序模块间的调用关系
  5. 程序模块的关键函数接口

第6章 做研究

什么是研究

  1. 去识别,定义那些最重要的问题,并解决
  2. 研究的一个重要意义是去探索所有的可能性
  3. 研究是要做创新的事情

第7章 项目管理

对于一个项目有四个基本要素:时间,范围(定义的目标),成本(定义中的资源)和质量.

项目周报例子

  1. 做好任务划分.对于一个项目要拆分为多个子任务,在项目周报中,要对各子任务分栏呈现
  2. 跟进长期计划.应该呈现项目的"总体计划".总体计划包括各项工作预定完成的时间,对于已经完成的任务可以标记实际的完成时间
  3. 进展和计划的对应."本周进展"和"上周计划"一定要严格对应起来
  4. 做好计划.一个理想的项目,应该是每周的工作都能按照上周计划来进行
  5. 责任到人.项目中对工作责任的清晰划分,是确保项目正常进行的一个关键点
  6. 风险呈现.在项目周报中要充分呈现项目在执行过程中遇到的问题和风险
  7. 做好调整

第8章 项目沟通

使所有项目参与人都能掌握应该了解的信息.在项目中,要尽量做到项目信息的透明化,使项目信息能够被准确、高效地传递.