程序员必备技能:代码审查 (Google牛人谈Code Review)
在上一篇博客里我暗示自己将不在为Google工作。 我还没有决定好去哪儿-有几个非常不错的工作机会让我选择。鉴于这段时间内我不受雇于任何公司,我想我可以写点和专业相关的东西,这些东西很有趣,但是如果我还在职,可能会导致与同事/老板的关系紧张。
Google是一个相当酷的公司。它们完成了一些非常让人吃惊的事情-包括外部用户可以看到的,也包括公司内的。有些关于公司内部的东西是非保密性的,但是在公司外部讨论的并不广泛,这些就是我想说的。
保证Google的代码质量如此之好的最大原因是代码审查。这不是Google专有的-这是被广为接受的好主意,而且很多人都在做。但是我从来没有见过另外一个大公司会应用的这么普遍,在Google,任何产品/项目的代码只有得到正面的审查才可以提交。
每个人都应该这么做,我不是指非正式的:这是一个严格的软件开发过程必备的普遍规则,其范围不只包括产品代码而是所有的代码。这并不需要做很多工作,但是产生的效果非常大。
你可以从代码审查里得到什么呢?
有一点很明显,在代码提交之前如果有很多双眼睛盯着看可以发现Bug.这是代码审查最广为人知的好处,但是以我的经验看这是价值最小的一点。人们的确可以在代码审查中发现Bug,但是这些Bug大部分都是显而易见的小Bug,开发者分分钟就可以发现,而那些真正需要花时间发现的Bug通常不是在代码审查中发现的。
代码审核最大的好处是纯社会性的。如果你编程的时候知道你的同事将要看你的代码,你的编程方式会不一样。你的代码会写的更整洁,注释更清楚,组织的更好-因为你知道其他人会看你的代码,他们的意见是你需要你关注的。如果没有审查,你虽然知道人们最后会去看你的代码,但是那样不会给你一种紧迫感,也不会给你同样的个人评判的感觉。
还有一个更大的好处就是代码审查可以传播知识。在很多的开发小组里,每个人都负责某一块核心组件,专注于自己的这一块,只要其他同事的模块不会破坏自己的代码就不会去关注。这种模式导致一个模块只有一个人熟悉对应的代码。如果一个人请假或离职,其他人对他负责的模块将一无所知。如果采用代码审核,那么至少有两个人熟悉代码-作者和审查者。审查者知道的代码不如作者多,但是他们都熟悉代码的设计和结构,这意义重大。
当然,没有什么事情会这么简单的,以我的经验,你需要花一些时间来做好代码审查。我已经见过一些坑导致的问题-由于他们在经验不足的审查者中出现的很频繁,这使得那些尝试代码审查的人们体验很不好,以至于成为了实践代码审查的障碍。
最重要的一个规则就是代码审查的关键是在代码提交之前发现代码存在的问题-你要找的是正确性。代码审查最常见的错误-每个初次接触代码审查的人都会犯的错误-就是判断代码是否是以审查者期望的方式编写。
给定一个问题会有一打不同的方’案来解决,给定一个方案,会有一百万种方式用代码实现。作为一个审查者,你的工作不是确保代码是以你所想象的那种方式编写-这是不会的。你的工作是确保代码是正确的。如果打破了这个规则,你会觉得代码审查很难,充满挫折感-这不是好事。
事实上,这是一个很自然的会犯的错误。如果你是一个程序员,当你看到一个问题的时候你会想到一个解决方案-而你会想当然的认为你所想到的就是那个解决方案。然而实际上不是-要成为一个好的审查者,你需要理解这点。
代码审查第二个主要的坑就是人们觉得有义务说点什么。你知道作者花了很多时间和精力写代码-你难道不需要说点什么吗?
不,你不需要。
只是说“哇,不错”从来都不是一个错误。如果你总试图费劲心思来找些什么东西批评一下,那么你所作的只会损害你的个人信誉。如果你只为了说点什么而不断的制造点东西来评判,那么找你做代码审查的人会觉得你所说的只是为了打破沉默,你的意见不会被认真考虑。
第三个坑和审查速度有关。你不应该匆忙的完成代码审查,但是你也应该立刻开始。你的同事正在等你的反馈,如果你和你的同事不愿意花时间来完快速成代码审核,人们会变得沮丧,这种方式只会带来挫折感。看起来代码审查会中断一些手头的事情,但是事实上不会如此,如果有人要求你做审查,你不需要马上放下所有事情,但是在接下来几个小时里,你总会稍停你当前的工作-比如喝杯饮料,去洗手间或者散步闲聊。当你回来的时候,你可以开始审查并完成它。如果你这么做,那没有人会因为等你而耽误很长时间。
[英文原文:Things Everyone Should Do: Code Review ]
程序员必备技能:代码审查 (Google牛人谈Code Review)的更多相关文章
- 代码审查 (Google牛人谈Code Review)
代码审查 (Google牛人谈Code Review) 在上一篇博客里我暗示自己将不在为Google工作. 我还没有决定好去哪儿-有几个非常不错的工作机会让我选择.鉴于这段时间内我不受雇于任何公司,我 ...
- 程序员必备技能之Markdown
Markdown介绍 Markdown是一种纯文本格式的标记语言,比HTML更简单,通过一些简单的语法标记,就可以让文本简洁好看. Markdown已经是程序员一项必备技能了,代码块.流程图.序列图. ...
- Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码
Android java程序员必备技能,集合与数组中遍历元素, 增强for循环的使用详解及代码 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 For ...
- 程序员必备的代码审查(Code Review)清单【转载】
在我们关于高效代码审查的博文中,我们建议使用一个检查清单.在代码审查中,检查清单是一个非常好的工具——它们保证了审查可以在你的团队中始终如一的进行.它们也是一种保证常见问题能够被发现并被解决的便利方式 ...
- 程序员必备的代码审查(Code Review)清单
在我们关于高效代码审查的博文中,我们建议使用一个检查清单.在代码审查中,检查清单是一个非常好的工具——它们保证了审查可以在你的团队中始终如一的进行.它们也是一种保证常见问题能够被发现并被解决的便利方式 ...
- markdown入门基础------程序员必备技能
本人博客:https://blog.csdn.net/qq_39576571/article/details/97256521 ·首先:什么是markdown markdown是一种轻量级的标记语言, ...
- 资料汇总--java开发程序员必备技能
1. 熟练使用Java语言进行面向对象程序设计(面向对象:继承.多态.抽象): 有良好的编程习惯(阿里开发手册 链接:http://pan.baidu.com/s/1dFEA6cT 密码:kqj4 ...
- 「编程羽录」上线,程序员必备的这些技能你能get到嘛?
大家好,我是小羽. 好久不见,给大家带来个好消息,小羽的全新专题「编程羽录」系列正式上新,主要是介绍一些关于面试题和经验总结的文章. 会为大家提供一些技术栈之外,程序员还需要的其他方面硬核知识,做到全 ...
- <转载> 优秀程序员必备的23条好习惯
转自 优秀程序员必备的23条好习惯 编程是一项聪明人玩的游戏,它既是对智力的考验,也是对习惯的考验,智力的好坏取决于父母的基因,人们无从左右,但习惯的好坏却是可以不断培养.一项由美国芝加哥大学国家研究 ...
随机推荐
- mysql--视图,触发器,事务,存储过程
一.视图 视图是一个虚拟表(非真实存在),是跑到内存中的表,真实表是硬盘上的表,怎么就得到了虚拟表,就是你查询的结果,只不过之前我们查询出来的虚拟表,从内存中取出来显示在屏幕上,内存中就没有了这些表的 ...
- JZOJ6096 森林
题目传送门 Description 我们定义对一棵树做一次变换的含义为:当以 1 号节点为根时,交换两个互相不为祖先的点的子树: 一棵树的权值为对它进行至多一次变换能得到的最大直径长度: 初始时 ...
- “全栈2019”Java异常第二十章:自定义异常详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- kinect 2(ubuntu16.04)
安装libfreenect2 参考 https://github.com/OpenKinect/libfreenect2/blob/master/README.md#linux 如果安装后找不到有关库 ...
- 0基础浅谈反射型xss (1)
0X1:在学习xss之前,先快速学习相关的HTML代码 1. <input>标签 文本域用法: <input type="text" /> Type的作 ...
- 结合业务,精炼SQL
现代网站,性能的瓶颈都围绕着数据库的性能来谈.数据库是存储的核心部件,在日益增长的流量中会凸显数据库的性能瓶颈.从<淘宝技术十年>书中来看,淘宝发展历程中从MYSQL换成了ORACLE又换 ...
- RN 47 初始化 Bridge 过程
- (instancetype)initWithDelegate:(id<RCTBridgeDelegate>)delegate bundleURL:(NSURL *)bundleURL ...
- 总结day7 ---- 文件操作,读,写,追加,以及相关方法
内容大纲 一:文件的基本操作, >常见问题 >encoding >绝对路径和相对路径的 二:文件的读写追加相关操作 >读(r, r+ ,rb,r+b) >写(w,w+,w ...
- centos启动错误:Inodes that were part of a corrupted orphan linked list found.
centos启动时,提示错误: /dev/mapper/VolGroup-lv_root contains a file system with errors,check forced. /dev/m ...
- mysql中权限的小知识
参考:https://www.cnblogs.com/apollo1616/articles/10294490.html mysql中user表中host列的值的意义 % 匹配所有主机 localho ...