工程师基础-让人崩溃的readbility 考试

技术 · 2023-06-16
工程师基础-让人崩溃的readbility 考试

背景

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

2023-06-16T10:48:28.png

价值

直接的价值就是:推进工程文化建设,个人工程师素养、公司组织管理、工具建设,是搞好现代化研发。
宏观价值:提升团队、公司的整体技术水平,利于产品研发质量、对外开源建设的水平。
个人价值:提升个人能水平,通过日复一日的高水平训练可以整体的架构设计能力、编码水平等。

认证说明

绿带(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、设计问题

解决架构、类、函数、依赖、安全性等设计问题

2023-06-16T10:51:37.png

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小时读完,这个不同的人能接收到的信息量不同,看不懂就快速掠过,可以很快。建议看不懂就尝试强制记下核心观点,在实践中反复咀嚼。

本文作者:小码哥

本文链接:https://blog.wesee.club/archives/49/

版权声明:自由转载-非商用-非衍生-保持署名(cc 创意共享 3.0 许可证

readbility 代码规范
Theme Jasmine by Kent Liao

粤ICP备2023052298号-1