• 随想006:帮忙的时机


    我一直不理解发生在我身边的一个现象。

    从我第一次发现到现在已经几年了,在一个又一个人身上,不断地出现。

    在编程界,重复 可能是软件中一切邪恶的根源,我为此吃过苦头。让我记忆尤深的是,当重复代码需要修改时,你要记得改变所有重复处。这不是你是否能记住的问题,而是你何时忘记的问题。

    当新人向我请教问题,我得以看到他们的代码。当我看到代码中有重复时,总是想让他们避免我曾吃过的苦头。于是我暂停当前的问题,告诉他们这里存在代码重复,为了引起他们的注意,我会告诉他们重复的危害,以及改正方法。

    让我不解的事情就此发生。当我过几天查看他们的代码时,在不同的时候,不同的人身上,从来没有一个人修改重复代码,哪怕只是简单到把重复部分提取为一个函数。

    重复是一件无伤大雅的小事吗?

    我想不是的。
    无论是《程序员修炼之道》、还是《代码整洁之道》,它们都强调要遵循 DRY 原则系统中的每一项知识都必须具有单一、无歧义、权威的表述。重复代码是违反 DRY 原则最为明显的例子。

    为何称其为 DRYDRY - Don’t Repeat Yourself(不要重复你自己)。

    所以对编程而言,消除重复是一件天大的事情。甚至有人说“自函数发明以来,软件开发领域的所有创新都是在不断尝试从代码中消灭重复”。

    这也是我困扰的原因,我已将重复的危害告诉了他们,为何他们还是置之不理?

    我的经验对别人来说是一文不值吗?

    直到不久前,我知道了原因。

    因为他们不需要

    与人类需求层次理论类似,当一个人还为挨饿受冻担心时,跟他谈论个人理想抱负是不现实的。同样,这些新人还在为实现功能而担心时,跟他谈代码质量,他们不需要,也不关心。

    从他们向我请教的问题就能看出来:“朱工,我这个 ADC 采集数据是错误的,你能帮我看下吗?”、“朱工,我 Ping 不通板子,你能帮我看下网络部分吗?”

    这都是功能实现问题。

    在进度的压力下,实现功能,无疑更具有吸引力。

    再回到人类需求层次理论,人解决衣食住行后,会自然的追求友情、爱情,追求自尊和尊重。当新人程序员实现功能后,他们会自发的追求代码质量吗?

    就我接触到的人来说,完全不会

    当一个项目实现功能后,一些项目会安排我进行代码审查。

    对于刚工作3年内的新人,我进行代码审查的标准很简单:

    • 不能有重复
    • 不能有魔法数
    • 函数体不大于 80 行
    • 函数嵌套不大于 3 层
    • 圈复杂度不大于 15
    • 遵循单一职责原则:一行代码只做一件事、一个变量只做一件事、一个函数只做一件事
    • 命名要准确清晰。

    在审查的过程中,如果我发现了BUG,他们会很积极的修改,但如果是提升代码质量的重构,比如要求用宏来替换魔法数、用函数封装重复代码、将复杂函数拆分成简单小函数等,他们就会开始找理由、找困难,他们开始抗拒。

    在我看来,提升代码质量非常重要,高质量代码更清晰,所以可以减少BUG的产生,高质量代码更好修改,所以更适应未来的需求变化。为什么新人对提升代码质量没有明显兴趣?

    因为我所提出的一切关于提升代码质量的观点,新人都没有共鸣

    的确,刚刚接触编程的小伙子对代码质量标准是不会有什么感觉的。

    要对这件事有感觉,需要经历几个不愉快的项目。

    他们没有吃过代码重复的苦头,没有维护过整个项目只有一个超过10000行代码的 main.c 文件、没有经历过一个简单需求改出一堆连绵不绝 BUG 的崩溃事件。

    没有类似的经历,就不会有共鸣。

    你说得再正确,也改变不了他人。除非他们自己想要了解,不然你就一点办法也没有。就像我进行的代码审查,因为他们不能理解其中的重要性,所以不愿做,最后变成了我指出一个地方,新人修改这个地方,就这么软抗拒。

    虽然我很想告诉他们目前不知道的编程法则,但如果他们自身没有这种需要,我就在白费力气。

    换句话说,要是没有求助,不要主动帮忙






    读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
    千金难买知识,但可以买好多奶粉


  • 相关阅读:
    ffmpeg的使用
    语文课内外杂志语文课内外杂志社语文课内外编辑部2022年第1期目录
    使用vcpkg安装指定版本的开源软件
    Go&Java算法之同构字符串
    基础语言-第18天-csv、Excel文件操作
    Jenkins 安装
    《Unix 网络编程》13:守护进程和 inetd 超级服务器
    ChatGPT 和 Midjourney 将改变我们的生活,日常工作流程将完全改变并与这些新型工具集成
    【论文阅读|深读】Role2Vec:Role-Based Graph Embeddings
    Oracle/PLSQL: Cast Function
  • 原文地址:https://blog.csdn.net/zhzht19861011/article/details/126603595