《代码大全(第二版)》读书笔记(4)
总览与心法
史蒂夫·迈克康奈尔写这本书,目标不是教你某一门语言或框架,而是回答一个更根本的问题:一个专业的程序员,在动手写代码之前、写的时候、以及写完以后,究竟该做些什么。他把这一整段工作统称为软件构建,也就是从详细设计到编码、调试、单元测试、集成和代码评审的过程。全书近千页、分七个部分三十五章,本质上都在为同一件事服务——软件的第一技术使命,管理复杂度。作者开篇就点明,软件之所以复杂,根源不在计算机,而在人脑处理细节的能力有限,我们一次能同时想清楚的事就那么几件。所以一切具体实践的底层逻辑,都是把复杂度压制在人脑能够驾驭的范围之内。理解了这把钥匙,再判断某个做法该不该用,只需问一句:它是在帮我减少认知负担,还是在给以后读代码的人添乱。
全书结构由外而内。第一部分奠定基础,讲构建是什么、如何用隐喻理解软件开发、动手前要做哪些准备、以及语言规范协作方式这些关键决策。第二部分创建高质量的代码,是全书的精华,从设计、类、子程序一路讲到防御式编程和伪代码编程过程。后面几部分依次讲变量、语句、代码改进、系统层面的构建管理与集成,最后回到人本身,谈布局风格、自文档代码、个人性格和软件匠艺。作者一个鲜明特点是很少说“我觉得这样更好”,而是大量引用业界研究和统计数据,用证据平息信仰之争,比如代码评审能发现约六成缺陷,而缺陷发现得越晚修复成本越高,所以把质量做在前面远比事后补救便宜。
在设计这一章,作者把设计目标直接归结为管理复杂度,核心手段是抽象与封装。他列出一份理想设计的特性清单:最小的复杂度、易于维护、松散的耦合、高度的内聚、可扩展、可复用、清晰的分层。耦合是模块间相互依赖的程度,依赖越少越好;内聚是一个模块内部各元素关联的紧密程度,最好只做一件事。两者合起来就是判断设计好坏的黄金标准。信息隐藏是作者反复强调的设计秘密——把将来可能变化的细节藏起来,只对外暴露稳定接口,需求变化时牵动范围才能最小。
谈到类和子程序,作者的主张朴素而有力:一个函数只做一件事,短到一屏之内就能看懂;类的设计同样要遵循单一职责,最忌讳包揽一切的“上帝类”,以及用继承代替组合的偷懒。函数名用动词加名词,让调用处读起来像一句自然的句子。防御式编程这一章提出一句令人印象深刻的口号:垃圾进、垃圾出是不对的,正确态度是垃圾进、什么都不出,或者垃圾进、就报错。作者把断言和异常做了清晰分工——断言记录那些理论上绝不该发生的前置后置条件,让程序在开发期就大声失败;异常处理那些可能发生且需要向上传播的运行时错误。最忌讳吞掉异常,写一个空捕获块把问题悄悄藏起来,让 bug 在更远更难查的地方才爆发。
浙公网安备 33010602011771号