本周我阅读了《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. Dictionary导致IIS CPU 100%案例分析 学会使用WinDbg工具

    .NET  开发注意 线程安全性问题.弄不好可能会导致CPU满载 特别主要 Dictionary作为静态变量使用的情况. 解决方法: Dictionary 换成  ConcurrentDictiona ...

  2. ABS函数 去掉金额字段值为负数问题

    )) from OrderDetail

  3. tomcat乱码解决

    一.修改Tomcat的conf的server.xml文件加上 URIEncoding="UTF-8" 二.在tomcat的bin 目录下的catalina.bat 配置文件中,添加 ...

  4. 关于将汉语拼音字母“ü”改成“v”的设想和建议

    http://bbs.tianya.cn/post-free-1667253-1.shtml?_t=t -- 徐州工业职业技术学院 孙生强 <汉语拼音方案>为中国人的语言文字学习带来极大方 ...

  5. [LeetCode] 34. Search for a Range 搜索一个范围(Find First and Last Position of Element in Sorted Array)

    原题目:Search for a Range, 现在题目改为: 34. Find First and Last Position of Element in Sorted Array Given an ...

  6. [LeetCode] 213. House Robber II 打家劫舍 II

    Note: This is an extension of House Robber. After robbing those houses on that street, the thief has ...

  7. python:使用Djangorestframework编写post和get接口

    1.安装django pip install django 2.新建一个django工程 python manage.py startproject cainiao_monitor_api 3.新建一 ...

  8. Ansible-Hoc--样例

    一.常用场景 1. 列出支持的模块及模块功能说明: 2. sudo用法: 3. 检查服务器存活,复制本地文件到远程: 4. 多线程判断服务器的存活: 5.  显示所有主机的hostname: 6. 列 ...

  9. python tkinter中的事件绑定

    一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...

  10. Git的各种工作流

    Git工作流可以理解为团队成员遵守的一种代码管理方案,在Git中有以下几种常见工作流: 集中式工作流 功能开发工作流 Gitflow工作流 Forking工作流 1)集中式工作流 这种工作方式跟svn ...