更新时间:2022-05-05 21:56:35
封面
版权信息
内容简介
推荐序一
推荐序二
推荐序三
推荐序四
推荐序五
推荐序六
推荐序七
推荐语
前言
作者介绍
第1章 软件工程能力
1.1 为什么要重视工程能力
1.2 什么是工程能力
1.2.1 工程能力的误区
1.2.2 工程能力的定义
1.3 怎样提升工程能力
第2章 代码的艺术
2.1 背景和初衷
2.2 代码和艺术
2.2.1 代码也能成为艺术作品
2.2.2 软件工程师和“码农”
2.2.3 来自艺术的启发
2.2.4 写代码并非易事
2.3 好代码和坏代码
2.3.1 好代码的特性
2.3.2 坏代码的例子
2.4 好代码从哪里来
2.4.1 好代码不止于编码
2.4.2 需求分析和系统设计
2.5 如何做好需求分析
2.5.1 如何描述需求
2.5.2 对需求分析的误解
2.5.3 需求分析的重要性
2.6 如何做好系统设计
2.6.1 什么是系统设计
2.6.2 设计文档的分类
2.6.3 什么是系统架构
2.6.4 系统设计的原则和方法
2.6.5 重视对外接口
2.7 如何写出好代码
2.7.1 代码的沟通价值
2.7.2 模块的设计方法
2.7.3 划分模块的方法
2.7.4 函数的设计方法
2.7.5 代码块的编写注意事项
2.7.6 软件开发中的命名
2.8 如何支持系统运营
2.8.1 可监测性的重要性
2.8.2 以BFE开源项目为例
2.9 成为优秀软件工程师的三条路径
2.9.1 路径一:学习—思考—实践
2.9.2 路径二:知识—方法—精神
2.9.3 路径三:基础乃治学之根本
第3章 代码评审
3.1 代码评审的常见误区
3.2 为什么要做好代码评审
3.2.1 代码评审的重要意义
3.2.2 没有做好代码评审的后果
3.2.3 为什么要提升代码质量
3.2.4 为什么要提升编码能力
3.3 如何做好代码评审
3.3.1 代码评审的常见问题
3.3.2 代码评审的正确态度
3.3.3 代码评审的推荐步骤
3.3.4 对坏代码的简单判断
3.3.5 代码评审的注意事项
3.4 如何成为好的代码评审人
第4章 “代码的艺术”应用
4.1 需求的分析
4.1.1 题目说明
4.1.2 功能分析
4.2 软件的架构
4.2.1 模块切分
4.2.2 系统架构
4.2.3 软件组装
4.2.4 crawler间的数据共用
4.2.5 数据封装
4.2.6 crawler的执行逻辑
4.3 多线程机制
4.3.1 数据互斥访问
4.3.2 临界区注意事项
4.3.3 任务的分发
4.3.4 程序的优雅退出
4.4 其他实现细节
4.4.1 配置的读取
4.4.2 种子信息的读取
4.4.3 import的使用
4.4.4 异常处理
4.4.5 构造函数的使用
4.4.6 正则表达式的使用
4.5 延伸思考
4.5.1 实现对各网站的限速
4.5.2 从单机扩展到分布式
第5章 项目文档
5.1 正确认识项目文档
5.1.1 项目文档的重要作用
5.1.2 项目文档的常见误区