第1章 软件工程能力
百度内部材料将工程能力定义为: 使用系统化的方法,在保证质量的前提下,更高效率地为客户/用户持续交付有价值的软件或服务的能力.
- 研发的目的是提供价值
- 质量第一
- 实现价值持续交付.软件/服务的价值提供是长周期的,从业者要做好长期维护,长期服务,持续改进优化的思想准备.
- 系统化和科学的方法
- 持续提升研发效率
人是工程能力的根本
工程能力提升源于自我驱动.对于提升工程能力,工程师的自我驱动是最重要的.
如果一个人知道什么是高效而正确的方法,那么他(她)一定不会继续使用低效且错误的方法.
工程能力对个人能力的素质要求
- 项目管理
- 写好文档
- 写好代码 按照重要性排序:项目管理>文档>代码
第2章 代码的艺术
在尽量早的时候,形成正确的意识,对一名软件工程师的快速成长是非常关键的.
软件工程师要具备非常高的综合素质
- 专业知识.要掌握的专业知识包括数据结构,算法,编码方法等,还包括系统结构,操作系统,计算机网络,分布式系统等
- 产品.要对业务有深刻的理解.
- 项目管理.
- 研究和创新
总之,软件工程师不等于"码农".软件工程师要具备综合素质,要成为一名优秀的软件工程师至少需要8~10年的历练和成长.
成为优秀软件工程师的三条路径
- 学习-思考-实践
- 知识-方法-精神
- 基础乃治学之根本
对于软件工程师来说,分析问题、解决问题的能力才是最重要的.
To Identify the Fundamental Problem,and solve it.(去识别、定义那些最重要的问题,并解决)
好代码的来源不是写好代码.好代码是一系列工作的结果,包括需求分析,系统设计,编码,测试,上线和运营等.
第3章 代码评审
代码评审的重要意义
- 代码评审有助于提升代码质量
- 代码评审有助于知识的传递
代码评审的正确态度
- 评审人对被评审的代码逻辑应做到"完全看懂"
- 评审人对什么是好的代码应该有正确的认识
- 评审人对代码的质量应具有一丝不苟的态度
- 要将代码评审放在和编写代码同等重要的位置
- 在代码评审中要以"提升代码质量"为最终目标,代码编写者和代码评审人要共同努力
代码评审的推荐步骤
- 看清代码全貌.要搞清代码中模块划分的逻辑,明确模块间的关系
- 查看模块.要看清各模块内部的逻辑,搞清楚模块内的关键数据,关键的类和函数
- 查看类和函数内部的逻辑.这一步要关注逻辑的正确性,实现的合理性,段落划分的合理性
对坏代码的简单判断
- 花5分钟都不能看懂的代码
- 需要思考才能看懂的代码.Don't make me think
- 需要来回翻屏才能看懂的代码
- 没有空行注释的代码
代码评审的注意事项
- 建立Owner(责任人)制度.由一个技术过硬的工程师作为Owner,所有提交的代码,必须由Owner做最终确认
- 综合多种沟通机制.在必要时,评审的双方可以进行面对面的沟通
- 控制节奏.每次提交的代码不要太多,应尽量控制在几百行内
- 为评审留出时间.在项目估算和排期的时候,把代码评审的时间考虑进去
- 不放过任何一行代码.评审人对提交的代码,都要认真评审.对于评审发现的问题,要一追到底,在问题没有完全改正确前,不能让代码通过
第4章 "代码的艺术"应用
这里主要讲了一个Mini-spider的编程练习题目
第5章 项目文档
对于一名软件工程师来说,编写代码,写项目文档,做项目管理都是最基本的能力要求.代码编写能力是所有软件工程师都需要掌握的能力,写项目文档的能力是对高阶软件工程师的基本要求.不会写文档,就不会做设计,不会写文档的人更无法成为高阶软件工程师
写文档的一些通用模式
1. 分析和解决问题.
一般模式是
- 提出问题
- 分析问题
- 解决问题
2. 提出建议
- 出发点
- 实现的手段
- 工作量的预估
- 收益的预估
3.系统的设计
- 系统的功能
- 系统的组成
- 系统的行为
4.程序的设计
- 程序的架构
- 程序中包含的数据
- 程序的模块划分
- 程序模块间的调用关系
- 程序模块的关键函数接口
第6章 做研究
什么是研究
- 去识别,定义那些最重要的问题,并解决
- 研究的一个重要意义是去探索所有的可能性
- 研究是要做创新的事情
第7章 项目管理
对于一个项目有四个基本要素:时间,范围(定义的目标),成本(定义中的资源)和质量.
项目周报例子
- 做好任务划分.对于一个项目要拆分为多个子任务,在项目周报中,要对各子任务分栏呈现
- 跟进长期计划.应该呈现项目的"总体计划".总体计划包括各项工作预定完成的时间,对于已经完成的任务可以标记实际的完成时间
- 进展和计划的对应."本周进展"和"上周计划"一定要严格对应起来
- 做好计划.一个理想的项目,应该是每周的工作都能按照上周计划来进行
- 责任到人.项目中对工作责任的清晰划分,是确保项目正常进行的一个关键点
- 风险呈现.在项目周报中要充分呈现项目在执行过程中遇到的问题和风险
- 做好调整