代码工匠

Walking The Long Road.

代码大全读书笔记

最近项目开发比较密集,也遇到了一些方式的碰撞,这个时候再翻到《代码大全》,真是瞌睡时碰到枕头的感觉了。决定好好读一遍,记录一下。

xxiv: 软件构建是项目必须完成的阶段,它要为小型项目75%的错误负责,为大型和中型项目50%-75%的错误负责。——我们在项目的错误中,往往只看重设计的重要性,其实大部分错误都来自软件构建(即编程)本身。

P11:如何利用隐喻Metaphors(对软件的建模),将影响如何解决这个问题。

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

P35:前期做好准备的项目,返工的成本是最低的。如果无法做到完全的准备,准备80%的需求,并为20%留够时间是一个可行的做法。

P46:架构应该确定软件采用的组织结构,并尽量列举其他可能的方案以及选择最终方案的理由。依据80/20原则,架构可以对确定决定项目80%功能的20%的类进行详细说明。

架构设计的常规内容(挑几个觉得重要的):

  1. 程序组织 Program Orgnization
  2. 主要的类 Major Classes
  3. 数据设计 Data Design
  4. 业务规则 Business Rules
  5. 安全性 Security
  6. 性能 Performance
  7. 可伸缩性 Scalability
  8. 容错性

P51:在软件开发的链条中,链条的强度不是等于最薄弱的环节,而是所有薄弱环节的乘积。

P53:架构应该描述决策的动机,谨防“我们向来这么做”的说法。有个有趣的例子:Beth 想做丈夫 Adbul 家祖传的炖肉。Adbul 说,先撒上胡椒和盐,然后去头去尾,最后放在锅里盖上盖子炖就好了。Beth 就问了,“为什么要去头去尾呢?” Abdul 回答说,我不知道,我一直这么做,这要问我妈。他打电话回家一问,母亲也说不知道,她一直这么做,这个问题要问奶奶。母亲就打了个电话给奶奶,奶奶回答说,“我不知道你为什么要去头去尾,我这么做是因为我的锅太小了装不下”。

P62:选择合适的编程语言很重要。如果C的表达能力是1的话,C++和Java就是2.5。而perl和python却有 6。

P69:“深入一种语言编程”,而不只是“使用一种语言编程”。

P74:设计是一个险恶(Wicked Problem)的问题——只有解决或者部分解决才能被明确的问题。

P75:设计是一个了无章法的过程(Sloppy Process),优、劣设计之间的差异往往非常微妙。

P77:软件的首要使命是管理复杂度。人们很少把技术原因归结为项目失败的主要因素,项目的失败多数由差强人意的需求、规划和管理导致的。但是,当项目确实由技术因素导致失败时,其原因通常就是失控的复杂度。

P79:拆分实际上是一种“关注点分离”。

高代价、低效率的设计源于三种根源:

  1. 用复杂的方法解决简单的问题。
  2. 用简单但错误的方法解决复杂的问题。
  3. 用不恰当的复杂方法解决复杂的问题。

P81:

高扇入(high fan-in):指底层工具类被更多的类使用。

低扇出(low fan-out):指一个类尽量少的依赖其他的类。

P84:程序调用、组合、继承的依赖程度从轻到中。继承是非常重度的耦合。

P90:

Add a comment