CodeCompelete

前言

1
2
3
4
5
粗缯大布裹生涯,腹有诗书气自华。
厌伴老儒烹瓠叶,强随举子踏槐花。
囊空不办寻春马,眼乱行看择婿车。
得意犹堪夸世俗,诏黄新湿字如鸦。
--宋·苏轼《和董传留别》

写代码犹如文章,模仿优秀的作品是提升技能的最有效途径。

虽然入行近10年,依然觉得不够专业,如果身边没有大师,那么拜读大师的书籍就是唯一的出路。这本代码大全买了有五年,每每拿起来读个几日,终因太厚没有勇气读完,遂弃之。

最近由于需要重构软件模块,思路一直模糊不清,所以打算重新深入阅读这本书,期望可以找到答案。

理解软件开发

软件构建

  • 软件构建是整个软件开发流程中的最重要活动,完全覆盖编程活动,对于其他活动,比如需求分析,功能分析和测试,也有部分覆盖。由于编程活动是最核心的工作,所以软件构建对于整个软件开发来说非常重要。

隐喻

  • 隐喻可以更好的理解构建活动。
  • 隐喻也会暗示很多错误的概念,需要注意避免。
  • 书法:暗示了可以废弃已有内容,实际上软件开发鼓励重用已有模块。
  • 耕作法:春播秋收,不可控因素很多。
  • 牡蛎养殖:增量/迭代的增长,而不是一蹴而就的。
  • 建筑构造:前期设计,框架构建,后期填充,以及不同阶段改动带来的成本。
  • 软件技术:学习使用成熟的工具和技术,可以事半功倍。
  • 针对不同规模的软件,可以采用不同的模式。如果只是写个脚本玩玩,完全没必要做太多前期工作;如果想完成可靠的软件工程,那么各种细节都需要仔细斟酌。

前期准备

  • 构建活动占整个项目的65%以上的工作
  • 想的清楚才能做的明白,保证方向的正确性
  • 针对不同层次的项目采用不同的开发模式,序列式和迭代式有各自适合的场景,有些还需要交叉复用
  • 问题定义需要使用用户语言去描述,描述问题的语言会限制寻求方案的领域
  • 需求稳定是不可能的,能做的事情是保证扩展性。需求变更需要有正式的渠道
  • 架构的更改会因为基于结构工作结果增加而导致变更成本增加
  • 积极抗拒“尽快开始编码”的欲望
  • 架构师吃掉需求,设计师吃掉架构,程序员吃掉设计,如果食物链的第一环就被污染了,结果可想而知

关键「构建」决策

  • 编程语言类似自然语言,可以从侧面提高大脑解决问题的能力
  • 语言会限制思想,多了解其他编程语言总是有好处的

…待续