有意思:Code Review是一场苦涩但有意思的修行

最近 CodeReview(以下简称CR )心态相当的平和 , 代码是一个讲道理的东西 , 是就是 , 否就否 。在 CR 时 , 沟通特别轻松 , 问题讨论也特别聚焦 , 因为它是量化和定向的 。CR 的过程不是恃强凌弱 , 也不是一言堂 , 大家看着代码 , 当作是一种灵魂的交流 , 那么每一次的 CR 也是同事间提升和谐度的一种方式 。
优良的 CR 传统可以体现团队温度 , 体现高年级同学传帮带的技术文化 。平时 , 大家抬头看 PRD, 低头写代码 , 很少有时间静心气闲地交流一下业务流程、业务逻辑、业务未来扩展 , 在 CR 时 , 往往可以反复被讨论到 。
一个人的能力不是体现在解决了问题上 , 也不是发现了问题 , 而是利用某种手段预知问题并解决问题 。曾经有段代码 , 我觉得取反逻辑生涩难懂 , 反复修改之后 , 发现写代码的小伙伴是错误领会了业务意图 。
提升技术质量、促进人才成长、培养技术情怀这些口号我们今天先放一边 , 聊聊最近CR的切身体会 。CR 不是互相看天书 , 而是产生天天看书的感觉 , 每一段写得好 , 写得不好的代码都是一本书 , 好的代码希望见贤思齐 , 差的代码希望见不贤而内自省也 。
总之 ,CR 是一种修行 , 也是一种自我积累 , 苦涩的是看到惨不忍堵的代码 , 心里说:我去!有意思的是看到优雅的代码 , 心里也说:我去!
一、业务跑得这么快 , 没时间Code Review
这是一个很大的谎言 , 不要为自己的丑代码找华丽的借口 , 没有时间好好 CR, 总有时间焦头烂额地处理故障和投诉 。
时间老人是公平的 , 我一直认为某个同学在工位上噼里啪啦打字 , 就是说明他干活快 , 通过团队打字比赛 , 发现其中 20% 在按 BACKSPACE 键 。业务跑得快 , 代码写得快 , 可能写的是一堆没有营养甚至是有毒的代码 。我们需要追求的是 CR 的效能 , 而不是逃避 CR。
【有意思:Code Review是一场苦涩但有意思的修行】CR 是一种修行 , 对于双方都是一样的收获 , 因为如果想象成一个摊派任务 , 抵触情绪总会油然而生 。业务跑得快 , 也得两腿是健康的 ,CR 就是保证业务持续跑的快的一个小医生 , 不正常的业务节奏对公司的中长远发展肯定是弊大于利 。
二、代码是讲道理的
我认为靠烧香来保佑代码不出问题时 , 保平安往往也是暂时的 。优秀的代码 , 就是在小流量、单线程没有问题 , 在高流量、高并发时还是没有问题 , 你的限流 , 你的容灾 , 你的降级各种导弹防御系统一样自动打开并正确地发挥价值 。
很多人的思维觉得 , 代码只要在场景和逻辑上没有问题就行 , 那是因为夜路走得不够多 , 还没有碰到鬼 。代码是讲道理的 , 就像有一个同学说>=比>更加慢 , 那只是我们的潜意识猜测 , 经过深达编译层的分析 , 发现两个指令几乎是完全一样 。其实凭我们的想象 , 那也是一个位运算级别的操作 , 从左向右比 , 如果一处有 1, 另一个没有 1, 那么前者一定是更大 。
没有无缘无故的爱 , 没有无缘无故的恨 , 一切的故障总是代码的字里行间 。我们需要做的 , 就是读懂她 , 用好她 , 写好她 。如果代码任性闯祸 , 只能是我们不懂代码的心思 。
三、每一行代码的存在是有意义的
更加严格地说 , 每一个字符的存在都应该是有意义的 。如果某行代码的存在完全是可有可无的 , 这个时候 , 我们考虑过 JVM 的感受吗?凭白无故地要编译这些字节码 , 然后栈进栈出的忙活一阵子 , 然后告诉它 , 你的劳动是没有任何价值的 。
比如 , Boolean assetFlag = Boolean.true ; 这里都已经明确地给给出来显示的初始值 , 可是在调用端 , 居然还有这样的判断:if ( assetFlag != && assetFlag == true) {...} , 什么情况下为 值啊?另外参数在框架里已经做了值的判断 , 那么下边又是 n 行 , 对所有参数重新判断一遍 , 是对我们的代码有多少不自信 , 还是对框架不自信?每一行的代码 , 相当于生命 , 它的存在一定是有意义的 , 一定是能够被执行到并且能够为实际的业务负责的 。


推荐阅读