读《Clean Code 代码整洁之道》之感悟
盲目自信,自认为已经敲了几年代码,还看什么整洁之道啊。我那可爱的书架读懂了我的心思,很明事理的保护起来这本小可爱,未曾让它与我牵手
最近项目中的 bug 有点多,改动代码十分吃力,每看一行代码都带一句“这是什么XX代码啊,真XX难改”,这样持续了好几天,有天晚上坐在书房回想这几天发生的一切,仰头定睛思考,我终于和它重新确认了眼神

股票见涨你知道买了, 汽车撞墙知道拐了, 孩子死了你来奶了, 大鼻涕到嘴你知道甩了, bug难改知道愤慨了
马上翻开书,前言章节,映入眼帘的就是下面这一张图
代码质量的唯一有效度量是:WTFs(what the fuck)/minute

真的太精辟了,这不就是这几天我白天经历的吗?代码已然是 bad code 了,我们应该怎么面对这种情况呢?
每个公司的规范还不一样,本文是读书笔记,不会说明太多的代码规范,只是阐明我们应该怎样做或者抱着什么样的心态来写代码吧
如果你看到这里,我要引用书中的一句话:
第一,你是个程序员;第二;你想成为更好的程序员。我们需要更好的程序员
专业的态度
做国内项目/产品,通常都是指明deadline的,但是截止到deadline之前,需求量的多少是不固定的,说白了是“以deadline不变应需求万变”,美其名曰「敏捷」
我们经常要面对短期内开发出大量需求的请求,很可能为了快速完成这些需求,胡乱的堆叠代码,上线之后一声长叹庆幸这个功能开发的结束。过了好久,有关这个功能的需求有所变化,重新查看代码时,直接就 WTF 了......,再一看是自己写的,你说尴尬不?

如果是因为任务多胡乱叠加代码,我们就应该在接受需求的时候提出我们的看法:
过多的需求在短期内上线的代码质量不能得到保证
假如你是医生,病人要求你不用洗手就可以给他做手术,因为洗手浪费时间,你会答应吗?医生绝对会拒绝,因为你比病人更了解疾病和感染的风险。如果医生照做,那是绝对不专业的做法
作为程序员,如果遵从了不了解混乱风险经理的意愿,也是不专业的做法
“你以为可以不听经理的?不听经理的,是会被炒鱿鱼的”,经理能否听的进去,我们都要提出我们的看法。提出多次还被无视,也不要灰心丧气,继续提出我们专业的看法... untile die, 为了部落

如果你有底线,守住就好;如果没有,适应就好。只为很久之后看到代码说 WTF 时,避免主角是自己的尴尬
我们是作者
Javadoc 中的@author字段告诉我们自己是什么身份,我们是作者。如果类上没有标注日期和作者,alibaba代码检查工具会给出提示,就像这样:

这里建议大家在 IDE 中安装该插件,如果你不知道作为作者应有的规范,那就让这个插件辅助你吧

据统计,读代码与写代码花费的时间比例超过 10:1, 因为我们在写新代码时会一直在读旧代码,项目越到后期这个比例越明显
我们是作者,就有责任和读者做好沟通。每次写代码的时候,记得自己是作者,要为评判你工作的读者写代码.

这些读者可能是你现在组内的伙伴,也可能是将来要接管你的任务的新伙伴,避免别人嘴里 WTF 的主角是你,定期 Review 自己的代码,你定会发现可以改善的地方,比如用策略模式更改过多的 if else等,代码整洁了,又学会了设计模式,岂不是两全其美
心有余,力要足
很多朋友说,我也想写出整洁的代码,但是目前实力不允许啊。

写出整洁的代码的功力不是一蹴而就的,需要持续不断的学习和修正
学会设计模式,了解 RESTful 接口规范,了解命名规范,注释,函数大小等等太多的东西都是书写出整洁代码必不可少的知识,我们该怎么办?
还记得小时候写作文的词藻不够用,老师让摘抄好文好句。如果程序写的不够整洁,我们可以慢慢学习和模仿好的写法与设计,慢慢改善和积累,有朝一日肯定能写出高分作文的
不做破窗效应第一人
不要说现在的代码很烂了,没必要再改善了,如果你是这样的心态,即便一个全新的项目开始让你去做,你也很可能会成为第一个打碎玻璃,带来破窗效应的人。
如果严重一点说,大家都知道你写的代码带给别人的是一种负担,你可能很难有开始一个全新项目的机会了

如果同事因改善你的代码带来了一些意外的影响,请你不要抱怨甩锅,这些改善就是修复玻璃的开始,终将会给团队带来极大的好处
总结
编写整洁代码的路途漫漫,我们一起求索,推荐大家看下面这两本书,你一定有有自己的发现,让我们悉心照料我们写的每一行代码
灵魂追问
- 工作上你接到过什么奇葩要求?
 - 工作中遇到了哪些无奈或者你觉得XX的事?
 - 你是怎么应对那些不好的问题的?
 
欢迎在留言区讨论,你们项目中的情况,你是怎么看待代码整洁这个问题的

读《Clean Code 代码整洁之道》之感悟的更多相关文章
- Clean Code 代码整洁之道
		
军规:让营地比你来时更干净. 整洁代码 Leblanc : Later equals never. (勒布朗法则:稍后等于永不) 对代码的每次修改都影响到其他两三处代码. 修改无小事. 如同医生不能遵 ...
 - 《代码整洁之道》(Clean Code)- 读书笔记
		
一.关于Bob大叔的Clean Code <代码整洁之道>主要讲述了一系列行之有效的整洁代码操作实践.软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发流派 ...
 - 2015年第11本:代码整洁之道Clean Code
		
前一段时间一直在看英文小说,在读到<Before I fall>这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧. 从5月9日开始看<代码整洁 ...
 - 读<<代码整洁之道>>的感想
		
花去了近一周的时间浏览一下这本书.总体感觉这本书写得不错. 我发现自己以前写的代码时多么的糟糕.有很多改进之处... 同时我也发现写出优秀的代码不易.优秀的代码不仅仅易读,并且易修改,易维护,程序易维 ...
 - Programming好文解读系列(—)——代码整洁之道
		
注:初入职场,作为一个程序员,要融入项目组的编程风格,渐渐地觉得系统地研究下如何写出整洁而高效的代码还是很有必要的.与在学校时写代码的情况不同,实现某个功能是不难的,需要下功夫的地方在于如何做一些防御 ...
 - 《代码整洁之道》ch1~ch4读书笔记 PB16110698 (~3.8 第一周)
		
<代码整洁之道>ch1~ch4读书笔记 <clean code>正如其书名所言,是一本关于整洁代码规范的“教科书”.作者在书中通过实例阐述了整洁代码带来的种种利处以及混乱代码 ...
 - 免费电子书:C#代码整洁之道
		
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:<Clean Code(代码整洁之道)>是一本经典的著作,那么对于编写整洁 ...
 - Python代码整洁之道(一)
		
很多新手在开始学一门新的语言的时候,往往会忽视一些不应该忽视的细节,比如变量命名和函数命名以及注释等一些内容的规范性,久而久之养成了一种习惯.对此呢,我特意收集了一些适合所有学习 Python 的人, ...
 - <读书笔记> 代码整洁之道
		
概述 1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...
 
随机推荐
- mysql主从之主机名导致主从机制失败的问题
			
一 主库 mysql主服务器的正确配置需要指定log-bin.log-bin-index server-id = 1 log-bin=master-bin log-bin-index = master ...
 - 洛谷$P4331\ [BOI2004]\ Sequence$ 数字序列 左偏树
			
正解:左偏树 解题报告: 传送门$QwQ$ 开始看到的时候$jio$得长得很像之前做的一个$dp$,,, 但是$dp$那题是说不严格这里是严格? 不难想到我们可以让$a_{i},b_{i}$同时减去$ ...
 - ssh免密登陆和加密解密
			
一 丶实现无密码的远程管理 1.生成公钥 私钥 [root@room9pc14 桌面]# ssh-keygen [root@room9pc14 桌面]# ls /root/.ssh/ 2.上传公钥到虚 ...
 - 在nginx服务器里面搭建好node.js本地服务器后,利用Node.js的FS模块,实现简单数据的写入和读取
			
先在server.js里面引入: var fs = require('fs'); 然后写入 // 往writeme.txt文件 写入一些内容 fs.writeFile('./writem ...
 - Go Web 编程之 程序结构
			
概述 一个典型的 Go Web 程序结构如下,摘自<Go Web 编程>: 客户端发送请求: 服务器中的多路复用器收到请求: 多路复用器根据请求的 URL 找到注册的处理器,将请求交由处理 ...
 - Spring Cloud(二):Web服务客户端之Ribbon
			
上文介绍了服务如何通过Eureka实现注册,以及如何从Eureka获取已经注册的服务列表.那么拿到注册服务列表后, 如何进行服务调用?一个简单的实现是可以从被调用服务的实例列表中选择一个服务实例,通过 ...
 - 巧用位运算规律 Flags
			
找规律 (1 ) &1 =1 (1 ) &2 =0 (1 ) &3 =1 (1 ) &4 =0 (1 ) &5 =1 (1 ) &6 =0 (1 ) & ...
 - 用Django自动生成表遇到问题
			
因为以前在数据库中已经生成过Django 叫App01下的表,所以无法生成,在数据库中执行这个命令 DELETE FROM django_migrations WHERE app='App01';然后 ...
 - python 作用域,global与nonlocal的区别
			
在Python中并不是所有的语句块中都会产生作用域.只有当变量在Module(模块).Class(类).def(函数)中定义的时候,才会有作用域的概念. 如果在函数中要对全局变量做改变可以使用glob ...
 - 想玩转JAVA高并发,这些概念你必须懂!
			
我们在找工作时,经常在招聘信息上看到有这么一条:有构建大型互联网服务及高并发等经验,你第一时间想到的是媒体常说的双十一吗?带着问题,我们一起思考技术…. 高并发高并发 它是互联网分布式系统架构设计中必 ...