前言
|
|
写代码犹如文章,模仿优秀的作品是提升技能的最有效途径。
虽然入行近10年,依然觉得不够专业,如果身边没有大师,那么拜读大师的书籍就是唯一的出路。这本代码大全买了有五年,每每拿起来读个几日,终因太厚没有勇气读完,遂弃之。
最近由于需要重构软件模块,思路一直模糊不清,所以打算重新深入阅读这本书,期望可以找到答案。
理解软件开发
软件构建
- 软件构建是整个软件开发流程中的最重要活动,完全覆盖编程活动,对于其他活动,比如需求分析,功能分析和测试,也有部分覆盖。由于编程活动是最核心的工作,所以软件构建对于整个软件开发来说非常重要。
隐喻
- 隐喻可以更好的理解构建活动。
- 隐喻也会暗示很多错误的概念,需要注意避免。
- 书法:暗示了可以废弃已有内容,实际上软件开发鼓励重用已有模块。
- 耕作法:春播秋收,不可控因素很多。
- 牡蛎养殖:增量/迭代的增长,而不是一蹴而就的。
- 建筑构造:前期设计,框架构建,后期填充,以及不同阶段改动带来的成本。
- 软件技术:学习使用成熟的工具和技术,可以事半功倍。
- 针对不同规模的软件,可以采用不同的模式。如果只是写个脚本玩玩,完全没必要做太多前期工作;如果想完成可靠的软件工程,那么各种细节都需要仔细斟酌。
前期准备
- 构建活动占整个项目的65%以上的工作
- 想的清楚才能做的明白,保证方向的正确性
- 针对不同层次的项目采用不同的开发模式,序列式和迭代式有各自适合的场景,有些还需要交叉复用
- 问题定义需要使用用户语言去描述,描述问题的语言会限制寻求方案的领域
- 需求稳定是不可能的,能做的事情是保证扩展性。需求变更需要有正式的渠道
- 架构的更改会因为基于结构工作结果增加而导致变更成本增加
- 积极抗拒“尽快开始编码”的欲望
- 架构师吃掉需求,设计师吃掉架构,程序员吃掉设计,如果食物链的第一环就被污染了,结果可想而知
关键「构建」决策
- 编程语言类似自然语言,可以从侧面提高大脑解决问题的能力
- 语言会限制思想,多了解其他编程语言总是有好处的
…待续