背景
硅谷的很多大型科技,比如:google、facebook、amazon 等,为了让代码的编码风格、代码质量更高,一般是有获得公司代码可读性认证(code-review-readability-certification)的人当作代码的审查者。Googler被要求较快地成为优秀的程序员,这是工作的基本要求。所以,Google的readability仅仅强调对某一门编程语言的设计理念、惯用法、细节代码最佳实践的熟练掌握。
Readability训练营与认证在很大程度上考虑了DRY/SOLID/KISS等在代码设计原则与实现层面的应用。

价值
直接的价值就是:推进工程文化建设,个人工程师素养、公司组织管理、工具建设,是搞好现代化研发。
宏观价值:提升团队、公司的整体技术水平,利于产品研发质量、对外开源建设的水平。
个人价值:提升个人能水平,通过日复一日的高水平训练可以整体的架构设计能力、编码水平等。
认证说明
绿带(wet-hands)考试,是给大家一段400行左右的代码做code review。一般集中在一个地方,限时两个小时。
考试给到的代码,可读性都非常差。正常情况,一般是指出核心设计问题,给出明确建议,就直接打回重构了。但是,考试的时候,这样不行。你还得全面地指出它的如下问题。毕竟,这是考试,是在无其他证据基础上,确认你有能力发现问题。
评分与考核标准
问题分级指出问题和解决方案。
- 核心设计缺陷(KCP):彻底无法达到这段代码的bug;认识到这个缺陷,很多代码都需要重写,不是仅仅影响几行代码;等等重大问题。
- 普通设计问题(Design):影响面较小的设计问题。
- 实现问题(Impl):实现细节的问题,比如语言惯用法。
- 规范问题(Spec)。
仅仅指出问题,说出哪里疑似有问题,常常是不能得分的。需要明确给出合理的建议。你指出问题,不给出好的建议,别人也看到comment之后也无法做出修改。不actionable,约等于不存在。
核心设计缺陷叫做KCP(key comment point)。一般是3个最大的问题。根据不同的题情况不同,一般来说,没能指出2个及以上的KCP,就不能通过考试了。你也不需要去猜,哪个点是KCP,你就正常给出建议就好。
啰嗦容易说错,最好言简意赅。必要的时候给出reference。对于表达的把握,算是日常基本沟通能力的体现了。
要读懂一个可读性很差的代码,找出它的设计意图,代码的目标,你去对他的设计、实现指出建议,不是一个简单的事情。是比平时的review更累人的事情。单位行数所花费的阅读时间,也要长数倍。这是一个门槛,是一个挑战。
执行
1、考核出有代码审查能力人
2、培训工程师具备基础能力
3、项目开发过程中严格执行
相关参考: https://zhuanlan.zhihu.com/p/357909913
readbility 规则要解决的几类问题
1、设计问题
解决架构、类、函数、依赖、安全性等设计问题

2、实现问题
- 代码逻辑实现问题[代码逻辑、缺陷、可读]
- 命名问题[命名规范、名称合理性、是否有歧义]
- 一致性问题 [提交与代码一致、代码实现一致性、注释一致、抽象一致、命名一致、写法与调用一致、规范一致]
- 复杂性 [遵守单一原则、封装细节单一、避免冗余代码、避免不必要的复杂度、使用标准库]
- 作用域 [最小作用域、避免全局污染]
- 习惯用法 [避免直接操作DOM, 尽量简写,避免前后规范不一致,用过时的用法]
- 注释
3、规范问题
- MR/commit 信息描述详细准确
- 注释清晰有价值
- 命名规范,拼写正确
- 习惯用户法 [统一、合理]
- 导入导出满足规范 [清晰、一直、绝对路径、避免默认匿名导出]
- 避免魔法数字与参数
- 顺序合理分组合理
- 空行、空格 中英文混合留白合理
参考资料:
[google CR certification] https://www.pullrequest.com/blog/google-code-review-readability-certification/
[google CR pracitces] https://google.github.io/eng-practices/review/reviewer/looking-for.html
书籍参考:
[0]《编程原则( understanding software)》,用最简单的话,讲述了最重要的道理。
[1]《架构整洁之道》因为它够简单,内容又比较有价值。通过细节讲解理念。
[2]《重构:改善既有代码的设计》简单而实用。细节技术流。
[3]《编写可读代码的艺术》简单而实用。细节技术流。
[4]《代码大全》内容较多。简单而全面。细节技术流。最后有一定的理念讨论。(2-4都是细节丰富,可以选择一本读完。然后先读后面推荐的)
[5]《程序员修炼之道:通向务实的最高境界》价值和难度都适中。(细节和理念都很丰富,属于2-4的进阶版本)
[6]《Software Engineering at Google》虽然难度大,但是内容很有价值。只有英文版。
(什么是现代研发模式?看它就够了,非常实在的书。手把手教新人屠龙之术)
[7]《SRE:Google运维解密》运维左移,现代devops的一个重要实践。书很新,理念非常有冲击力。
(核心回答了:为什么要搞运维左移)
[8]《google软件测试之道》难度不大,有点过时,2013年的书了。详细解释了google测试左移的历程。
(核心回答了:为什么要搞测试左移)
[9]《unix编程艺术》内容有价值,难度很大。30小时读完,这个不同的人能接收到的信息量不同,看不懂就快速掠过,可以很快。建议看不懂就尝试强制记下核心观点,在实践中反复咀嚼。