《代码整洁之道》ch1~ch4读书笔记 

  《clean code》正如其书名所言,是一本关于整洁代码规范的“教科书”。作者在书中通过实例阐述了整洁代码带来的种种利处以及混乱代码、冗余注释等带来的毁灭性后果,并且结合多段代码块、非常详尽地将“书写整洁代码的技巧与守则”教给读者。以下,是我本周细读其前四章的心得体会。

  1.      Ch1:整洁代码三问:是什么,为什么,怎么做

  为什么要写整洁代码?书中首先列举了几条案例,比如某公司的热门软件由于混乱代码导致无法维护、开发团队因为混乱代码而引发“竞赛”内耗资源等,强调了整洁代码的必要性。毫无疑问,能写出整洁代码是我们本能的追求,但往往不是第一追求——它时常让步给时间,毕竟ddl的力量胜于一切。不必说,在过去短短两年不到的编程学习中,我写出的代码绝大多数都是作者所指的混乱代码:表意不清、死气沉沉、难以维护,甚至我自己都不愿意再次点开那些因赶着上交作业而匆忙拼凑成的cpp文件。而作者力图告诉我们,整洁代码应当且必须作为程序员的第一追求,因为整洁就意味着时间和效率。对于学生而言,这一点可能并不明显或甚至截然相反,比如在oj等平台做算法练习题或参加编程比赛时,给变量取个表意清晰的长名字或拆分函数往往是浪费时间;但对于软件开发来说,整洁代码可谓是意义重大。维护、阅读成本等等诸多方面,都能见其益处。

  什么是整洁代码?在我看来,就是不说废话、精炼明确。或者说,“每个例程都让人感到深合己意”。惭愧的是,按这一标准断言,我从未写出过超过5行的整洁代码。怎么写整洁代码?这正是本书接下来二十余章节中将详细介绍的。但有一点令我印象深刻:不要刻意要求自己直接写出整洁代码,写代码应该像写文章,先想到什么就写什么,大致完成后,再逐一拆分润色。直接敲出简洁代码,近乎是不可能的。深以为然。

  2.      Ch2:明确命名

  命名,在任何代码中都随处可见。变量、函数、参数、类、封包……在软件工程中,选择清晰明确的命名无疑是coder的天职。遗憾的是,正如上文所言,很多时候我们基于ddl临头、连夜赶工、需求变更等等因素,或单纯为了一时方便,在命名环节选择草草了事。flag,sign,res,tmp,i,j,k乃至x1,x2等等“言简意赅”的表述,往往使得整个程序难于阅读。我还记得在上一学期的数据结构大作业“银行模拟程序”中,我因为中途将time1与time0代表的部分记混,花了整整一晚上来debug。现在想来,当时若明智地选择arriveTime和waitTime作为命名,便省了诸多烦心事。

  本章节中,详细介绍了“好命名”的必备要素:有意义:让人能“望文生义”,有区分度:与其他命名有“一眼就能看出”的差异,能读出来:方便交流和理解,可搜索:不要太过短小,没有误导性:避免给人“名词动用”等误导,适当添加语境。简而言之,就是要遵循相应的命名原则,愿意花功夫来想一个明确而适当的好名字往往比事后抓耳挠腮debug要有效率得多。这也是代码可读性、可维护性的一大保障。

   3.      Ch3:函数守则

  这一章的目的同样很明确:如何写“整洁函数”。按我亲身经历而言,将功能分拆到各个函数中去是比较自然合理的,但我一般使用一个函数完成一系列工作,这也使得函数中代码量汇聚。本书中,则对我的这一习惯进行了批判,采用一套较严格的函数规范:短小、专一、少参数。

  短小,不但代表代码行数少,还表明逻辑层次上小,即函数中应采用同一抽象层级。另一抽象层级的功能,应该由另一个函数实现。以这一规则组建的函数组,就好像从几颗螺丝钉一样的小零件拼成一个中零件,几个中零件拼成大零件,大零件再拼成小部件……以此类推,直到拼出变形金刚。这种层层推进的函数设计形式不但易于阅读、维护,还有一种逻辑上的艺术感,可谓整洁。

  专一,即一个函数只做一件事。如果我们编写的函数想同时做多件事,那么最好将这多件事分摊给下一级的多个函数各自实现,而不是一窝蜂地在一个函数里扎堆。可以想见,少了各种体量庞大的循环、条件分支中的调用等,函数的可读性将大大提升,这也是实现“短小”的必由之路。

  少参数,则是出于函数效率的考量,既方便调用和测试,又不易产生误导或意料之外的问题。如果需要输入多个参数,例如空间坐标(int x,int y,int z),那么不妨将其封装成一个类,归并到Position Pos 中,再以Pos.x形式调用。

  4.      Ch4:合理注释

  写注释,一直是程序设计老师们反复强调的手段。记得在程序设计和数据结构课中,助教们给我们的要求是注释量应该占代码量的30%以上。而本书中坚决反对这一主张。正如Brian W.Kernighan 与 P.J.Plaugher所言,“别给糟糕的代码加注释——重新写吧”。结合前三章中提到的技巧和规范写出的代码,应当具有明确的意义,让人“不言自明”,无需通过繁复唠叨的注释来阐述其中隐含的奥妙。合理的注释,应当尽可能少,在关键之处如蜻蜓点水、画龙点睛,让人一眼扫过豁然开朗,而不是像臭婆娘的裹脚布一般,把代码块缠得乱七八糟。简单而言,它应该含有必须的信息、函数调用的参数说明、简单解释意图或警示,而不该作为糟糕代码的说明书。

  注释往往是我这样的初学者理解算法的一大有利工具,但对于有经验的程序员来说,使用明晰的命名,结合良好的函数结构,写出的代码往往比注释的可读性强得多。况且,注释往往无法及时修改,陈旧版本的注释只会给人误导和迷惑。更别提直接注释掉某些语句了,这让后来使用这一代码的程序员畏手畏脚、不敢妄动,只会造成冗余代码的堆砌。不幸的是,妄加注释、直接注释掉有问题的语句正是我日前编程的常规操作。今后,当引以为戒。

总而言之,本周我通过对本书前四章的阅读,学到了命名、函数、注释等方面的整洁编程规范和技巧。日后的编程中,我将努力实践书中的好方法,做一名能敲出整洁代码的coder。

参考文献:

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

《代码整洁之道》ch1~ch4读书笔记 PB16110698 (~3.8 第一周)的更多相关文章

  1. 2015年第11本:代码整洁之道Clean Code

    前一段时间一直在看英文小说,在读到<Before I fall>这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧. 从5月9日开始看<代码整洁 ...

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

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

  3. 《代码整洁之道》ch5~ch9读书笔记 PB16110698(~3.15) 第二周

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

  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. PHP ftp_rawlist() 函数

    定义和用法 ftp_rawlist() 函数返回 FTP 服务器上指定目录中文件的详细列表. 语法 ftp_rawlist(ftp_connection,dir,recursive) 参数 描述 ft ...

  2. Oozie框架介绍

    Oozie框架: 1.Oozie英文翻译:驯象人 2.Oozie简介 一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce.Pig Jobs的 ...

  3. css Sticky footers

    写在前面 做过网页开发的同学想必都遇到过这样尴尬的排版问题:在主体内容不足够多或者未完全加载出来之前,就会导致出现(图一)的这种情况,原因是因为没有足够的垂直空间使得页脚推到浏览器窗口最底部.但是,我 ...

  4. csp-s模拟测试98

    csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...

  5. fread读入挂and普通读入挂and浮点数读入挂

    fread读入挂 版本一 namespace fastIO { #define BUF_SIZE 100000 //fread -> read bool IOerror = 0; inline ...

  6. NPAPI插件开发新手容易遇到的问题

    在网上找了一个npdemo的例子,编译了一下在FireFox运行正常,在Chrome下就是不行,也没任何提示. 折腾了好久,最后发现是rc文件 支持语言编码问题 NPAPI插件开发详细记录:用VS20 ...

  7. hexo next主题深度优化(九),给博客加入主题,护眼主题,护眼色。

    文章目录 背景 效果 码 _layout.swig custom.styl eye.js 引用eye.js 直接引用 main.js pjax的函数中重写 个人博客:https://mmmmmm.me ...

  8. LeetCode刷题笔记-回溯法-分割回文串

    题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...

  9. 解决:Map的area属性标签鼠标Hover可以给area加背景

    css的area标签是不支持hover的,只有a标签才支持.li标签在IE浏览器下才支持,所以采用jquery的mouseenter和mouseleave事件完成.首先讲jQuery对应的事件:1.m ...

  10. Adobe Fireworks CS6 win64的安装

    网页三大剑客之一    FW的安装 本人也是找了半天才找到的. (没有视频)这里先感谢原帖给我的链接https://blog.csdn.net/qq_38053395/article/details/ ...