《代码大全2》读书笔记

本书强调管理软件项目的核心是管理复杂性,代码是人与人沟通的载体。第一部分讨论打好基础,如通过隐喻理解和设计软件。第二部分介绍如何创建高质量代码,强调设计的目的在于管理复杂度。第三部分讨论变量的使用,包括变量的初始化、作用域和命名。后续部分涵盖代码改善、系统考虑和软件工艺,提倡防御式编程、测试驱动和重构等方法,以提高代码质量。
摘要由CSDN通过智能技术生成

这本书的核心思想是:

  1. 管理软件项目的本质是管理复杂性。

  2. 代码承载的是人与人之间的交流。

第一部分 打好基础

第2章 隐喻

重要的研发成果常常产自类比(analogy)。通过把你不太理解的东西和一些你较为理解、且十分类似的东西做比较,你可以对这些不太理解的东西产生深刻的理解。这种使用隐喻的方法叫做“建模”。

目前最合适隐喻:建造软件(Building Software)

第3章 前期准备( Measure Twice, Cut Once)

测试只是完整的质量保证策略的一部分,而且不是最有影响的部分。

迭代开发往往能够减少“前期准备不足”造成的负面影响,但它不能完全消除此影响。

如果需求变更过于频繁,就建立一套变更控制程序(流程)。

错误处理

架构中应该清楚地说明一种“一致地处理错误”的策略。监测到一个错误时,应该“说”出来。

过度工程

在软件中,链条的强度不是取决于最薄弱的一环,而是等于所有薄弱环节的乘积。

变更策略

架构应当清楚地描述处理变更的策略。架构应该列出已经考虑过的有可能会有所增强的功能,并说明“最有可能增强的功能同样也是最容易实现的”。

质量

你不应该担心架构的任何部分。架构不应该包含任何仅仅为了取悦老板的东西。它不应该包含任何对你而言很难理解的东西。你就是那个实现架构的人;如果自己都弄不懂,那怎么实现它?

第2部分 创建高质量的代码

第5章 软件构建中的设计(Design in Construction)

好的高层次设计能提供一个可以稳妥容纳多个较低层次设计的结构。

设计是一个“Wicked Problem” – 你必须把这个问题“解决”一遍以便能够明确地定义它,然后再次解决该问题,从而形成一个可行的方案。

软件设计的最重要目的是管理复杂度(Managing Complexity)。有两类复杂度:

  • 本质的(essential):一件事物必须具备,不具备就不再是该事物的属性。比如业务逻辑。

  • 偶然的(accidental):碰巧具有的属性。比如集成环境,编程工具等等。

大脑没法装下整个程序。好的设计,让人在一个时刻可以只专注于一个特定的部分。

你可以把它想做是一种心理上的杂耍(边抛边接:通过轮流抛接,使两个或两个以上的物体同时保持在空中) – 程序要求你在空中(精神上)保持的球越多,你就越可能漏掉其中的某一个,从而导致设计或编码的错误。

理想的设计特征(Desirable Characteristics of a Design)

  • 最小的复杂度(Minimal Complexity)。要避免做出“聪明的”设计。因为“聪明的”设计往往都是难以理解的。如果你设计的方案不能让你在专注于程序的一部分时安心地忽视其他部分的话,这一设计就没什么作用了。

  • 易于维护(Ease of maintenance)

  • 松散耦合(loose coupling)

  • 可扩展性(extensibility)

  • 可重用性(reusability)

  • 高扇入(high fan-in)。高扇入就是说让大量的类使用某个给定的类。这意味着设计出的系统很好地利用了在较低层次上的工具类。

  • 低扇出(low fan-out)。低扇出就是说让一个类里少量或适中(小于7个)地使用其他的类。

  • 可移植性(portability)

  • 精简性(leanness)。伏尔泰曾说,一本书的完成,不在它不能加入任何内容的时候,而在不能删去任何内容的时候。

  • 层次性(stratification)。假设你正在编写一个新系统,其中用到很多设计不佳的旧代码,这时你就应该为新系统编写一个负责同老代码交互的层。在设计这一层时,要让它能隐藏旧代码的低劣质量,同时为新的层次提供一组一致的服务。

  • 标准技术(Standard techniques)

优秀设计师的一项重要特质就是对变化的预期能力。好的程序把变化所带来的影响限制在一个子程序、类或者包的内部。

测试友好的设计&#x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值