Loki bio photo

Loki

Android Developer,做有趣的事情,探寻有趣之物.

Email Github
  1. 第一部分 打好基础
  2. 第二部分 创建高质量代码
  3. 第三部分 变量
  4. 第四部分 语句
  5. 第五部分 代码改善
  6. 第六部分 系统考虑
  7. 第七部分 软件工艺

普通的软件工程实践与最优秀的软件实践差距巨大-多半比其他工程学科中的这种差距都要打。因此,传播优秀实践经验的工具是十分重要的。 —-Fred Brooks

读书目的

正如作者在前沿所说,作者书写《代码大全》的目的,是希望缩小本行业中一般商业实践与大师级人物及专家们之间的知识差距。

我阅读这本书,希望可以从中学到更多的关于软件构建方面的知识,包括

如何理解
如何架构
如何编写
如何优化

读书笔记

用隐喻来更充分地理解软件开发。

隐喻的优点在于其可预期的效果,能被所有的人理解。不必要的沟通和误解也因此大为减低,学习与教授更为快速。隐喻是对概念进行内在化抽象的一种途径,它让人们在更高的层面上思考问题,从而避免低层次的错误。

隐喻是一种启发式的方法,而非算法。

对于编程来说,最大的挑战还是将问题概念化

具有代表性的软件隐喻包括:

Writing Code(写作代码)
Growing a System(培植系统)
System Accretion(系统生长)
Building Software(构建软件)
The Intellectual Toolbox(智慧工具箱)

Loki:作者在书中所列举的几种软件隐喻,恰恰是软件工程发展的一个个阶段,以及人们对软件工程认知的过程,从最开始的当作书写、培育,到系统生长,其代表为增量式开发,再到构建软件,类比建筑学中的build过程,包括问题定义、架构设计、构建、优化、评审和详查。用Fred Brooks的话说,是计算机硬件的发展速度太快,导致了软件没有更上。是否是因为这个原因,人们才会去从其他发展比较久、比较完备的系统中去寻找类比的方法,例如软件设计中的设计模式等。

增量式开发的优势在于未做过度的承诺。

一项规划得当的项目能够提升你“在后期改变细节(设计)”的能力。

一套100万行代码的软件系统,平均需要69种文档,其需求规格文档一般有四五千页长,而设计文档常常是需求的两三倍长。

项目的成败很大程度上在构建活动开始之前就已经注定了。

软件开发中最常见的项目风险是糟糕的需求分析糟糕的项目计划

造成准备工作不充分的一个常见原因是,那些分配去做前期准备活动的开发人员并不具备完成这一任务的专业技能。

程序员是软件食物链的最后一环。架构师吃掉需求,设计师吃掉架构,而程序员则消化设计。

在构建活动开始之前清除一个错误,那么返工的成本仅仅是“在开发过程的最后阶段(在系统测试期间或者发布之后)做同样事情”的1/10到1/100

明确的需求有助于确保是用户(而不是程序员)驾驭系统的功能呢个。

平均水平的项目在开发过程中,需求会有25%的变化。

在典型项目中,需求变更导致的返工占到返工总量的75%到85%

架构指的是适用于整个系统范围的设计约束
高层设计指的是适用于子系统层次或多个类层次上的设计约束

架构的质量决定了系统的“概念完整性”。一个经过慎重考虑的架构为“从顶层到底层维护系统的概念完整性”提供了必备的结构和体系,为程序员提供了指引。

架构应该对那些构成系统80%的行为的20%的类进行详细说明。

架构应该是带有少许特别附加物的精炼且完整的概念体系。

一般来说,一个运作良好的项目会在需求、架构以及其他前期计划方面投入10%~20%的工作量和20%~30%的时间。

构建活动的准备工作的根本目标在于降低风险

“你如何面对自己的编程工作”取决于你在技术浪潮中所处的位置。

Loki:一门技术的前期会有很多坑,前辈踩坑填坑的产物,对于后辈来说,就是宝贵的经验,对于后辈而言,遇到纯新的坑的概率非常小,就像Github上,一些star非常多的项目,并不是因为其本身的设计或者实现非常牛,只是因为它们的作者在早期就踩到了那个坑(当然绝大部分Github上star非常多的项目确实非常牛)。

后感

我看书的习惯是一口气读完,但是对于《代码大全》很明显不太可能吧,记得本科期间就买过一本英文版的,然后就没然后了,这次是借的。为什么会读呢?我觉得不是因为特别想读,而是今年囫囵吞枣了很多书,慢慢的养成了看书的习惯吧,最主要是我有这个耐心可以把它读完吧(我想这也是为什么我今年读书目标设为50本的原因,貌似早就超了哈)

关于这本书,我想我也不需要做太多的说明了,对于程序员来说,应该不会有人不知道这本书吧。接下来会对读的背个部分进行笔记记录吧(毕竟整本书放一起,记录和阅读都不方便),因此我会在笔记的部分就写下自己的一些感悟或者BiBi啥的吧。