随想006:帮忙的时机
Posted 研究是为了理解
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随想006:帮忙的时机相关的知识,希望对你有一定的参考价值。
我一直不理解发生在我身边的一个现象。
从我第一次发现到现在已经几年了,在一个又一个人身上,不断地出现。
在编程界,重复
可能是软件中一切邪恶的根源,我为此吃过苦头。让我记忆尤深的是,当重复代码需要修改时,你要记得改变所有重复处。这不是你是否能记住的问题,而是你何时忘记的问题。
当新人向我请教问题,我得以看到他们的代码。当我看到代码中有重复时,总是想让他们避免我曾吃过的苦头。于是我暂停当前的问题,告诉他们这里存在代码重复,为了引起他们的注意,我会告诉他们重复的危害,以及改正方法。
让我不解的事情就此发生。当我过几天查看他们的代码时,在不同的时候,不同的人身上,从来没有一个人修改重复代码,哪怕只是简单到把重复部分提取为一个函数。
重复是一件无伤大雅的小事吗?
我想不是的。
无论是《程序员修炼之道》、还是《代码整洁之道》,它们都强调要遵循 DRY 原则
:系统中的每一项知识都必须具有单一、无歧义、权威的表示。重复代码是违反 DRY 原则最为明显的例子。
为何称其为
DRY
?DRY
- Don’t Repeat Yourself(不要重复你自己)。
所以对编程而言,消除重复是一件天大的事情。甚至有人说“自函数发明以来,软件开发领域的所有创新都是在不断尝试从代码中消灭重复”。
这也是我困扰的原因,我已将重复的危害告诉了他们,为何他们还是置之不理?
我的经验对别人来说是一文不值吗?
直到不久前,我知道了原因。
因为他们不需要。
与人类需求层次理论类似,当一个人还为挨饿受冻担心时,跟他谈论个人理想抱负是不现实的。同样,这些新人还在为实现功能而担心时,跟他谈代码质量,他们不需要,也不关心。
从他们向我请教的问题就能看出来:“朱工,我这个 ADC 采集数据是错误的,你能帮我看下吗?”、“朱工,我 Ping 不通板子,你能帮我看下网络部分吗?”
这都是功能实现问题。
在进度的压力下,实现功能,无疑更具有吸引力。
再回到人类需求层次理论,人解决衣食住行后,会自然的追求友情、爱情,追求自尊和尊重。当新人程序员实现功能后,他们会自发的追求代码质量吗?
就我接触到的人来说,完全不会。
当一个项目实现功能后,一些项目会安排我进行代码审查。
对于刚工作3年内的新人,我进行代码审查的标准很简单:
- 不能有重复
- 不能有魔法数
- 函数体不大于 80 行
- 函数嵌套不大于 3 层
- 圈复杂度不大于 15
- 遵循单一职责原则:一行代码只做一件事、一个变量只做一件事、一个函数只做一件事
- 命名要准确清晰。
在审查的过程中,如果我发现了BUG,他们会很积极的修改,但如果是提升代码质量的重构,他们就会开始找理由、找困难,他们开始抗拒。
在我看来,提升代码质量非常重要,高质量代码更清晰,所以可以减少BUG的产生,高质量代码更好修改,所以更适应未来的需求变化。为什么新人对提升代码质量没有明显兴趣?
因为我所提出的一切关于提升代码质量的观点,新人都没有共鸣。
的确,刚刚接触编程的小伙子对代码质量标准是不会有什么感觉的。
要对这件事有感觉,需要经历几个不愉快的项目。
他们没有吃过代码重复的苦头,没有维护过整个项目只有一个超过10000行代码的 main.c
文件、没有经历过一个简单需求改出一堆连绵不绝 BUG 的崩溃事件。
没有类似的经历,就不会有共鸣。
你说的再正确,也改变不了他人。除非他们自己想要了解,不然你就一点办法也没有。就像我进行的代码审查,因为他们不能理解其中的重要性,所以不愿做,最后变成了我指出一个地方,新人修改这个地方,就这么软抗拒。
虽然我很想告诉他们目前不知道的编程法则,但如果他们自身没有这种需要,我就在白费力气。
换句话说,要是没有求助,不要主动帮忙。
以上是关于随想006:帮忙的时机的主要内容,如果未能解决你的问题,请参考以下文章
代码随想录算法训练营第四十九天| 121 买卖股票的最佳时机 122 买卖股票的最佳时机II
代码随想录算法训练营第五十天| 123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV。