本周我阅读了《Clean Code》。

“神在细节中!”,建筑家范德罗如是说。他当然专注于基于宏伟构架之上的永恒建筑形式,他也同样为自己设计的建筑挑选门把手。同样软件开发也是这样,小处见大。在宏伟的建筑作品中,我们也要关注细节的回响。重点便是整理,从而达成Clean。一个很好的例子是对于变量命名,认真对待每个变量名。书中作者说,我们就像一群代码猴子,无视混乱无序,失去代码的真谛。整洁的代码正是迈向编程之美的基础,重要性毋庸置疑。

作者断言,我们永远需要代码。我们可以创造各种工具,但是永远无法抛弃必要的精确性,代码呈现了需求的细节。糟糕的代码可能毁了一个公司,一个工程,整洁的代码不仅有关效率,还有有关生存。勒布朗法则说:稍后等于永不。我们不能寄希望于稍后清理,抱着混乱代码好于没有代码的态度开发。完成课程任务时,我们往往以得到一段可以运行的代码为目标,不注意各种细节,一旦出现问题,需要重构代码,可能连把自己的代码读一遍都痛苦万分。整洁的代码将有利于后期开发,方便他人或者自己随后的阅读。

那么什么是整洁的代码呢?书中询问了一些知名的程序员,获得了众多答案。

  1. 优雅高效,整洁的代码只做一件事
  2. 简单直接,如同优美的散文
  3. 便于他人增改
  4. 对代码全心投入
  5. 没有重复代码

当然这是他们的观点,每个人都可能得到他们自己的答案,并没有真正的权威答案。就我个人看来,整洁的代码应当高效清晰,便于阅读修改,逻辑结构鲜明,更抽象一点,有简洁的美感。是的,要有美感,这种美感来自于程序员编写代码是的清晰逻辑架构,函数的高效使用,以及细节的投入。

软件中随处可见命名,这一细节虽小,对于代码的可读性有很大的影响。书中给出了一些简单的规则,首先应当让命名名副其实,避免误导,作有意义的区分,比如把抽象的单字母变量换成英语单词,这显然会极大增强代码可读性和可描述性。是想C语言和其他高级语言,想必汇编或者机器语言,让人感到简单方便的重要方面就是各种操作被冠以英语单词的‘名字’,同样读得出来,有意义的命名会极大改善你的代码。同时也要注意回避 ‘扮可爱’(试图有趣的命名),双关,添加没用的语境等。

函数是语言的动词,类是名词。函数是代码必不可少的重要部分,要写好函数首先要明白函数是对具体操作的抽象,每个函数里面嵌套一个函数就是一个抽象层级。混杂不同的抽象层级会导致混乱,失去简介。具体的,函数应该做一件事,做好这件事,只做这件事。这样你会收获一个高效简洁的函数,一般而言,这会是一个短小的函数,符合函数编写的第一原则。

初学C语言,重要的一课是如何添加注释,如何规范清晰地添加注释。好的注释可以提供函数使用的信息,对编写意图进行阐释,或者警示其他程序员要注意的细节。但是,注释不是糟糕代码的遮羞布,混乱的逻辑不会因为被描述就变得清晰,好的注释建立在好的代码基础上。过多的注释有时会引起相反的效果,信息过多就是废话,也难以抓住重点。

《Clean Code》读书笔记——第二周的更多相关文章

  1. “Clean Code” 读书笔记序

    最近开始研读 Robert C.Martin 的 “Clean Code”,为了巩固学习,会把每一章的笔记整理到博客中.而这篇博文作为一个索引和总结,会陆续加入各章的笔记链接,以及全部读完后的心得体会 ...

  2. Linux内核读书笔记第二周

    什么是系统调用 简单来说,系统调用就是用户程序和硬件设备之间的桥梁.用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在,有以下重要的意义: 1)用户程序通过系统调用来使用硬件,而不用关 ...

  3. Clean Code读书笔记

    第一章 整洁代码 1.编程要做什么 代码呈现了需求的细节,在某些层面上,这些细节无法被忽略或抽象,必须明确.而将需求明确到机器可以执行的细节程度,就是编程要做的事. 2.项目过程中经常遇到这样的问题: ...

  4. 《javascript权威指南》读书笔记——第二篇

    <javascript权威指南>读书笔记——第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字 ...

  5. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  6. python学习笔记第二周

    目录 一.基础概念 1.模块 1)os模块 2)sys模块 2.pyc文件 3.数据类型 1)数字 2)布尔值 3)字符串 4.数据运算 5.运算符 6.赋值运算 7.逻辑运算 8.成员运算 9.身份 ...

  7. 《Maven实战》(许晓斌)导读(读书笔记&第二次读后感)

    第一章 Maven简介 Maven是构建工具,但同时还是jar包管理工具.项目信息管理工具 与Make.Ant比较,更为先进 第二章 Maven的安装和配置 Windows和Unix上安装都很简单,下 ...

  8. Getting Started With Hazelcast 读书笔记(第二章、第三章)

    第二章 起步 本章就相当简单粗暴了,用一个个例子说明hazelcast怎么用. 1.map,set,list这些集合类都是开箱即用的,只要从Hazelcast的实例中获取一份就行. 2.增加了Mult ...

  9. 《Linux内核设计与实现》读书笔记 第二章 从内核出发

    一.获取内核源码 1. Git git实际上是一种开源的分布式版本控制工具. Linux作为一个开源的内核,其源代码也可以用git下载和管理 - 获取最新提交到版本树的一个副本 - $ git clo ...

随机推荐

  1. excel矩阵运算操作-转置 行列式 相乘 逆阵

    excel矩阵运算操作-转置 行列式 相乘 逆阵 https://jingyan.baidu.com/article/154b463128e13928ca8f41a4.html Excel中矩阵的相关 ...

  2. typescript - 4.es5与typescript的类与继承

    ES5中的类与类的继承 (1)简单的类 function Person() { this.name = '张三'; this.age = 20; } var p = new Person(); ale ...

  3. EFProf用法

    SQL Server Profiler用来跟踪应用程序发送到SQL Server中的SQL语句,用于检测性能,查找问题.Entity Framework 也有它的跟踪工具EFProf,用于跟踪Enti ...

  4. PP篇10 修改工单组件行

    CO_XT_COMPONENT_CHANGE 修改工单组件行 DATA : is_order_key TYPE coxt_ord_key, is_order_component_key TYPE co ...

  5. node.js生成验证码及图片

    示例代码: var svgCaptcha = require('svg-captcha'); var fs = require('fs'); var codeConfig = { size: 5,// ...

  6. mysql之各版本rpm包安装

    发现每次想用mysql的rpm包直接安装的时候,都会出现找不到对应的rpm包的情况,故记录一下查找过程 进入官网->downloads->community->mysql commu ...

  7. [LeetCode] 195. Tenth Line 第十行

    Given a text file file.txt, print just the 10th line of the file. Example: Assume that file.txt has ...

  8. mysql索引数据结构

    什么是索引?索引就是排好序的数据结构,可以帮助我们快速的查找到数据 推荐一个网站,可以演示各种数据结构:https://www.cs.usfca.edu/~galles/visualization/A ...

  9. 机器学习技法总结(一):支持向量机(linear support vector machine,dual support vector machine)

    第一阶段技法: large margin (the relationship between large marin and regularization), hard-SVM,soft-SVM,du ...

  10. LInux学习之路

    linux 简单操作命令 cd 进入目录 ls 查看 ll详细查看 man ls -- help touch mkdir find 正则表达式 ? [] [a-z][0-9] {字符串,} {a..z ...