《代码整洁之道》ch5~ch9读书笔记

  本周我阅读了本书的第5~9章节,进一步了解整洁代码需要注意的几个方面:格式、对象与数据结构、错误处理、边界测试、单元测试和类的规范。以下我将分别记录各章的阅读心得体会。

  1.      Ch5代码格式:简单而一致

  一直以来,“让代码能工作”是我编程时的头等大事。但事实上,尤其是涉及到体量庞大、经常修改的工程代码时,代码格式才是重中之重。显而易见,一套整洁规范的代码格式能给软件的开发、测试和维护提供巨大方便,而随心所欲或不统一的代码格式则会大大增加代码的阅读难度,也会让使用代码的人质疑开发者的专业程度、职业态度。

  代码格式的原则有许多版本,因不同团队的需求、喜好,以及不同语言的特性而定。书中介绍了一些普适的原则,比如逻辑上联结紧密的语句应该编写得较靠近,不同功能的函数间最好相隔空行,水平、竖直缩进对齐等。结合适当的变量命名,这些简单的原则足以使代码清晰明确。

    作为一支团队,代码的格式规则更是务必一致,追求“如一人所写”的效果。本周我们组在组会上也针对代码格式进行了讨论,参考网上众多的代码格式规范,决定在下一次组会选定相关格式。

  2.      Ch6:对象与数据类型:仔细的抉择

        对象和数据结构各有特点。对象包含众多行为信息,但隐藏具体数据和实现手段,添加新对象类型并不需要修改既有的行为,较为方便,但难以添加新行为。而数据结构包含数据信息,没有明显的行为,因而添加新行为到数据结构中较方便,但向既有函数添加新数据结构是困难的。

作为开发者,我们需要在这两者间进行权衡和选择。同时,还要考虑到保密性、隐藏细节、用户体验等等。在这一层面,整洁代码的要求就是结构之间划分清楚,不要混杂使用,同时尽量少地暴露技术细节。

   3.      Ch7:错误处理:逻辑的保护

这一章主要阐述的并非整洁,而是强固。一份整洁的代码,也应当具有合格的强固性,不让各种报错将程序逻辑搅成一团乱麻。这也是对代码可维护性的保障。

每当我们编写函数,总要考虑各种预期外的情况及处理方式。至今为止,我采用的处理方式基本都基于函数返回值,这样的方法较简单粗暴,但涉及到大体量的代码时显然难以测试,其返回值还可能对其他调用的函数造成逻辑上的干扰。本章中,作者建议我们使用不可控异常来替代返回码报错,并对异常发生的环境进行说明。这样能将错误处理隔离,且try-catch模块易于测试、记录和理解。

较普适的原则:不要返回、传递null值。在刚接触链表等C语言数据结构时,我就经常犯下传递、调用null的错误,并因此付出了成堆的时间和精力。在大型程序中,null值的传递若引发错误,带来的后果是毁灭性的:当程序的深处抛出NullPointerException异常,实在令人手足无措。

  4.      Ch8:边界:第三方代码使用之道

        编程实践中,我们常常调用他人代码以实现功能,本章就介绍了在“借刀杀人”时可能引发的边界问题以及回避之道。学习和使用第三方代码库事实上相当困难,我们往往需要花很多时间来阅读使用文档、尝试编写测试代码、整合调试等。而采用编写测试来对第三方代码遍览和理解,即学习性测试,能很好地帮助我们上手。

正如作者所言,学习性测试是“免费”的,因为即便我们不这样做,也仍需要在使用时对第三方代码进行反复测试。同时,它不会影响现有工作,还能“与版本俱进”地增强我们对第三方代码的理解,保证整洁的边界。简而言之,想要用好一台机器,比起拆开它研究具体细节或只是翻翻说明书,还是实际上手使用,体验、了解其特性后将其投入生产,来得方便快捷。

   5.      Ch9:单元测试:简洁而不简单

  生产代码与测试代码的分量,事实上旗鼓相当。说来惭愧,我至今几乎没有编写过测试代码,debug时也往往只是根据题目要求手动输入各种数据。本章中,着重强调了单元测试代码的重要性:它们让我们对写出的代码拥有确保其如愿工作的能力,让我们的代码可扩展、可维护、可复用。一段没有被测试代码覆盖的生产代码,往往没有人敢轻易调用和维护。但正因如此,测试代码的篇幅往往不逊于生产代码,对测试代码的管理也成为一大课题。

  对此,作者的观点很简单:可读性为王。测试代码的变量命名应当比生产代码更为精确,并遵循F.I.R.S.T原则:Fast(快速运行)、Indepent(相互独立)、Repeatable(可重复)、Self-Validating(有布尔值输出)、Timely(及时编写)。整洁的测试代码是保证生产代码不腐坏的必由之路。

总的来说,本周我通过对这五章内容的阅读,对整洁代码的编写规范、内核理念有了更深的理解。鉴于本书之后的章节基本围绕系统、并发编程等我尚未掌握相关知识的领域,下周起我将暂时转读其他书籍,待相关知识有一定基础后,再继续此书的阅读。

参考文献:

[1] Robert C. Martin. 代码整洁之道. 人民邮电出版社, 2010.1.

《代码整洁之道》ch5~ch9读书笔记 PB16110698(~3.15) 第二周的更多相关文章

  1. 《构建之法》CH5~6读书笔记 PB16110698 第九周(~5.15)

    这段时间我阅读了<构建之法>的大部分章节,包括个人技能.软件测试.用户体验和需求分析等相关内容.之前的个人作业和结对作业结束后,我们的工作重心终于转向了团队项目,作为团队中前端组的组长,我 ...

  2. <读书笔记> 代码整洁之道

    概述      1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...

  3. 《代码整洁之道》ch1~ch4读书笔记 PB16110698 (~3.8 第一周)

    <代码整洁之道>ch1~ch4读书笔记  <clean code>正如其书名所言,是一本关于整洁代码规范的“教科书”.作者在书中通过实例阐述了整洁代码带来的种种利处以及混乱代码 ...

  4. <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合

    一.前言                                                                                       几个月前的看书笔记 ...

  5. 《代码整洁之道》(Clean Code)- 读书笔记

    一.关于Bob大叔的Clean Code <代码整洁之道>主要讲述了一系列行之有效的整洁代码操作实践.软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发流派 ...

  6. 如何写出如散文般的代码――《代码整洁之道》读书笔记(Ch1-Ch3)

    不知道有多少人像我一样,程序出现问题时添加函数添加变量解决,变量名用a,b,c等"简单"的字母来表示.不知道有多少人像我一样,看完自己的代码,心里暗骂"什么玩意儿!&qu ...

  7. Programming好文解读系列(—)——代码整洁之道

    注:初入职场,作为一个程序员,要融入项目组的编程风格,渐渐地觉得系统地研究下如何写出整洁而高效的代码还是很有必要的.与在学校时写代码的情况不同,实现某个功能是不难的,需要下功夫的地方在于如何做一些防御 ...

  8. 《代码整洁之道》&《程序员的职业素养》

    这是why技术的第32篇原创文章 春节期间读了两本技术相关的书籍:编程大师Bob大叔的<代码整洁之道>和<代码整洁之道:程序员的职业素养>. <代码整洁之道>出版于 ...

  9. 读《Clean Code 代码整洁之道》之感悟

    盲目自信,自认为已经敲了几年代码,还看什么整洁之道啊.我那可爱的书架读懂了我的心思,很明事理的保护起来这本小可爱,未曾让它与我牵手 最近项目中的 bug 有点多,改动代码十分吃力,每看一行代码都带一句 ...

随机推荐

  1. 「题解」:毛一琛/$cow$ $subsets$

    问题 A: 毛一琛/$cow$ $subsets$ 时间限制: 1 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 题名貌似是个大神??看起来像是签到题然后就死了. 首先$O(3^n) ...

  2. HBase的应用场景及特点

    一.Hbase能做什么?1. 海量数据存储:上百亿行 x 上百万列并没有列的限制当表非常大的时候才能发挥这个作用, 最多百万行的话,没有必要放入hbase中2. 准实时查询:百亿行 x 百万列,在百毫 ...

  3. 网站数据采集|埋点设计|nginx日志文件

    数据获取的方式主要可以分为两种: 1.网站日志文件(log files) 页面埋点js自定义的采集. 优缺点: web服务器自带的日志记录功能:优点方便,缺点信息收集不全 自定义的js埋点收集:优点想 ...

  4. Unity中的值传递与引用传递

    1. 值类型 值类型变量本身保存了该类型的全部数据,当声明一个值类型的变量时,该变量会被分配到栈(Stack)上. 2. 引用类型 引用类型变量本身保存的是位于堆(Heap)上的该类型的实例的内存地址 ...

  5. bat命令自用其(一)

    每秒钟打印ping命令结果到指定文件: @echo off set /p ip=Input the IP required to monitor: :starts echo %date% %time% ...

  6. faster-rcnn算法总结

    faster-rcnn的整体流程比较复杂,尤其是数据的预处理部分,流程比较繁琐.我写faster-rcnn系列文章的目的是对该算法的原始版本有个整体的把握,如果需要使用该算法做一些具体的任务,推荐使用 ...

  7. Python生成Windows可执行exe文件

    环境 python3.6.5 pyinstaller3.5 windows 10 下载地址 python:https://www.python.org/ftp/python/3.6.5/python- ...

  8. LeetCode 67. Add Binary【个位补0,不必对齐】【easy】

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  9. VB.NET利用正則表達式巧妙限制字符输入

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u010028869/article/details/37913867     在通常的程序设计中.对 ...

  10. 纯css写带小三角对话框

    在实际样式中经常会遇到要写类似对话框的样式,而这种样式往往会有一个小三角,如下所示: 那么如何用css写出来呢,其实很简单,先让父元素相对定位,然后运用css的伪类before或after.就可以写个 ...