在职业生涯中,程序员难免会遇到糟糕的代码(bad code)——但是你并不需要成为一个打败这些糟糕代码的“恶人”。

从轻松的角度来讲,糟糕的代码可以创造大量的就业机会。比如:

  • 需要从诸多优秀开发人员中找一个人来修复错误代码。
  • 需要一两个高级开发人员来做代码审查,确保代码以后不会再次变得糟糕。
  • 其他人还需要时不时地去咨询那位糟糕的程序员,以便弄明白这些乱七八糟的代码到底在干嘛。

也就是说,我们都有过类似经历。我们不知疲倦地加班加点,试图去解决一个特别麻烦的错误,这时我们发现一个代码块,而它就是问题的根源。当你试图弄明白这堆一团乱麻的代码的意义时,却发现这段代码根本无法阅读,逻辑混乱不堪,且完全未加任何代码注释,你会倒吸一口凉气,然后开始咒骂:

“这到底是谁写的代码?”

“谁竟然如此愚蠢?”

“怎么会有人写出如此毫无条理、人神共愤的代码呢?”

但我要说,这并不是正确的解决方式。毕竟,我们所有人,在某些时期都会写出糟糕的代码。可以这么说,在这个星球上,每一个开发人员都会在他的一生中制造出安全漏洞、不匹配的 UI 元素,而且绝对不止一次犯下这些错误。不能就此评价说这个开发人员很糟糕。我们都是人,是人就会犯错。

作为一名优秀的开发人员,你对糟糕代码的处理方式与你未来的职业发展有很大关系。优秀的开发人员会抛开个人或群体恩怨,对代码进行更深入透彻的理解,而不是将他们的愤怒情绪一股脑儿发泄到那些编写糟糕代码的倒霉开发人员身上。

优秀的开发人员会尽量避免主观性评价,对糟糕的代码给予建设性的、客观的批评,这样糟糕的代码就不会卷土重来。他们把解决这些糟糕的代码转化为学习和分享的机会,这样每个人都能从中受益。

这里我想分享一些优秀的开发人员处理糟糕代码的方法。

1. 识别问题

美国音乐家“艾灵顿公爵”有句话说得很对:

“问题是让你竭尽全力去努力的机会。”

请带着好奇心和同理心去解决问题。一般来说,代码的问题在于,编写代码有多种方法,而没有一种方法称得上是最好的方法。所以在评估代码前,试着找出这样写代码背后的原因。设身处地为其他开发人员着想,并找出问题所在。

程序员往往很固执。他们不喜欢被别人告知他们自己的错误。所以,正确的方法是对他有足够的同理心,找出是什么原因让他们写出如此随处可见的 goto 语句,如此层层嵌套的 switch 语句,以及如此晦涩难懂的变量命名。只要有足够的同理心,你很快就会弄明白背后原因。

“我必须在 1 小时内完成代码”

“没有可用的 API”

“我的领域知识有限”,等等……

通过识别问题,你不仅可以从代码原作者的角度来看待问题,还可以提出具体的解决措施来纠正代码,而不是在黑暗中对别人进行盲目攻击。

2. 谨慎提问

英国哲学家弗朗西斯·培根有句名言:

“一半的智慧来自于谨慎的提问。”

一旦你识别了代码问题,下一步就是与你的同事坐下来,提出一些更深入的问题。这里的关键词是“谨慎”。最好的做法是确保问答环节不会演变成一场像西班牙宗教审判一样残酷无情的审问。

对历史爱好者来说,西班牙教士托尔克玛达在费迪南德二世国王和伊莎贝拉一世女王的帮助下建立。在西班牙宗教审判所时期,许多人在街上围观人群面前被活活烧死。实际上,西班牙宗教审判所的作用是为了巩固新统一的西班牙王国的君主制,但它却是通过这种臭名昭著的残忍手段来达到这一目的。

通过问合乎逻辑的问题,你不仅能巩固自己对问题的理解,而且还允许其他开发人员对错误产生自我认识,并以此让他学会运用正确的自我质询来改善自己的代码,他需要在编写代码前用这些问题来进行自省。

通过提问,你也表明了你对他的观点持开放态度。当你的同事感到受到尊重时,他们就不太可能持有防御性态度。

一旦你找到错误和原因,你就有责任在整个团队中传播睿智的话语,这样以后就没有人再编写糟糕的代码了。

3. 抑制重写代码的本能

美国作家 Anthony J. D’Angelo 有一句名言说得很中肯:

“不要重新发明轮子,而是去重新调整它。”

编写高质量的代码会比编写前面所提及的糟糕代码花费更多时间。有时候,更快地“把某样东西做出来”在商业上是有其意义的。

Kimber Lockhart 在一次黑客峰会的演讲中曾经说过,开发人员在处理糟糕代码时所犯的最大错误之一就是去重新编写代码。大多数情况下,重写代码并不能解决糟糕的代码。因此,在采取这重写代码这一步骤之前,不妨先问许多问题:

重写后的代码一定会比旧版本更好吗?

从成本效益的角度来分析,值得付出这样的精力吗?

真的是所有的旧代码都很糟糕吗,或许我们可以重用很多旧代码?

等等……

她提出了一个包含三步骤的方法来处理糟糕的代码。

  • 对代码进行优先排序。首先需要解决哪一部分问题?我们能保留代码的其他部分吗?
  • 封装处理糟糕的代码。仍然让旧代码保持运行,但通过把它封装在一个模块中使其与其他新代码分离,这意味对于这段代码除了修复外,其他人不能再对它添砖加瓦。虽然旧代码仍然可以被调用,但是对它的封装可以防止糟糕代码的进一步传播。
  • 凸显糟糕的代码。显式地标记糟糕的代码,这样就没有人复制这些糟糕的代码让问题变得更加复杂。Lockhart 建议删除糟糕代码,但是要小心地进行删除操作。而且建议为了准确识别要删除的代码,每周花几个小时来创建一个自动化系统,这对于系统的长期清理来说是一个很好的实践。

关键是要从最坏的情况中找出其最好的部分,并以缓慢而稳定的方式来消除最坏情况。并不是所有糟糕的代码都是技术债造成的,如果在这些代码中也有不错的部分,我们应该聪明地对之进行合理重用和适应。

4. 最后,要谦虚

正如美国作家和演讲家 Zig Zigler 所说的:

“谦卑会比傲慢打开更多的大门。”

总所周知,骄傲导致许多悲剧英雄的堕落。

例如,简·奥斯汀的名著《傲慢与偏见》中的达西先生在得到伊丽莎白·班纳特的爱之前,不得不放下他的傲慢。而但丁把骄傲列为七宗罪之一。

我想大家都同意以上对于骄傲的看法。而与之相对的,谦卑的真正定义是一种安静的理解,即使你擅长你所做的事情,但你不期望别人过分赞扬你。

所以,如果你已经修正了代码,也不要让你的自负对你产生影响。不要得意忘形地向整个团队发送垃圾邮件。也不要一有机会就站在高处大声嚷嚷你的成绩。

要知道,你也是凡人,不可能毫无纰漏永不失误。你也可能会写出糟糕的代码并陷入同样的困境,当这种情况发生时,你需要的是每个人的帮助和支持。请永远不要忘记这一点。

简而言之,请以开放的心态处理糟糕的代码,学习,改进,然后你教育其他人去改进。

正如美国作家 Roy T. Bennett 所说的那样:

“要去改进,而不是找借口。要寻求尊重,而不是寻求关注。

作者介绍:

Ravi Rajan,总部位于印度孟买的全球 IT 项目经理。他还是一位狂热的博主、俳句诗人、考古学家和历史狂人。也是一个多产的作家,写作主题从人工智能到爱情,十分广泛。

怎样处理糟糕的代码?相关推荐

  1. [转]为什么程序员总是写糟糕的代码?这3个原因

    原文请看:为什么程序员总是写糟糕的代码?这3个原因 我最近一直在想我们作为一个行业为什么总是产出糟糕代码的原因. 1.明显原因-- 我一下子想到的最明显的原因是,有好的程序员,也有不那么好的程序员,有 ...

  2. 这么糟糕的代码,真的是我以前写的吗?

    GitChat 作者:Zm 原文:日常开发与设计模式的那点事 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 前言 "很多程序员不知道怎么组织代码.怎么提升效率.怎么提高代码 ...

  3. 优秀的代码 vs. 糟糕的代码

    http://harttle.com/2015/04/13/elegant-and-bad.html 可持续开发不仅在于项目架构设计,还与代码质量密切相关,代码的整洁度和质量成正比.-- Robert ...

  4. 五种糟糕的代码实践,程序员注意避坑

    本文将向你展示五种糟糕的代码实践,它们足以让所有程序员深恶痛绝. 1将变量命名变成解谜游戏 图译:parseDBMXML 代指什么:A.解析 DBM XML .B.解析 DB MXML.C.解析 DB ...

  5. 这五种糟糕的代码实践,程序员要学会规避

    点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 作者丨Marcin Gajda 译者丨马可薇 策划 | ...

  6. 质量糟糕的代码会在项目中像病毒一样传播,尽量在源头控制好代码质量、强调范例的重要性...

    折腾管理类软件项目,有些人折腾来折腾去,最后折腾的要死,最后没兴趣了转行了,有些人折腾来折腾去,正在走向越搞越乱的局面最后很可能也走向做不下去的道路,还有一些人一直坚持到最后,这期间大部分都有很多宝贵 ...

  7. 我见过的最糟糕代码,看了都说好!

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Nothing is impossible for a willi ...

  8. 六则糟糕代码的优化方案分享

    ‍‍ 微信搜索逆锋起笔关注后回复编程pdf 领取编程大佬们所推荐的 23 种编程资料! 来自:掘金,作者:thyme 链接:https://juejin.cn/post/690636663374128 ...

  9. ​为什么大多数代码都很糟糕,能做些什么来改进代码吗?

    全文共2245字,预计学习时长7分钟 来源:Pexels 大多数代码都很糟糕,这听起来有些刺耳,不是吗? 但事实上,其中有一点是真实的.你可能已经研究过一些代码库,并认为它们是一团乱麻. 没有开发者是 ...

最新文章

  1. java uml 为什么_Java开发为什么需要UML
  2. 少量数据训练语音识别的思路
  3. (0052)iOS开发之沙盒(sandbox)机制和文件操作(二)
  4. 【零基础入门数据挖掘】-模型融合
  5. [BUUCTF-pwn]——starctf_2019_babyshell
  6. ARC082F - Sandglass(思维)
  7. 用Unity开发AR创意礼物:会动的照片
  8. Recreate failovered primary database using Flashback Database
  9. MySQL呕血汇总--从基础到毕业【收藏篇】
  10. IIS下发布关于Excel导入导出时遇到的问题集锦
  11. python输入一个三位数、输出它的逆序数值_c语言 从键盘输入一个三位数,输出该数的逆序数。...
  12. java 贝叶斯抠图_毕业论文(设计)基于贝叶斯算法的自动抠图程序设计与实现.doc...
  13. 电脑麦克风,详细教你电脑麦克风没声音怎么设置
  14. 游戏多开检测的几种实现方法及破解方法参考
  15. A4张的尺寸大小是多大?像素又是多少呢?
  16. 响应“交通强国”战略,百度地图重构行业生态价值
  17. linux 搭建mycat
  18. 嵌入式和java工资对比_嵌入式和java哪个前景好
  19. db与放大倍数的转化
  20. 洪涝有源淹没算法及淹没结果分析

热门文章

  1. 普罗米修斯容器化监控、PromQL的使用、Grafana添加普罗米修斯数据源模板
  2. mysql建表索引_Mysql建表+创建索引
  3. 破解 M1卡(洗澡卡、开水卡,健身卡,饭卡)等
  4. Qt5 学习参考资料之--QSqlQueryModel
  5. 华为鸿蒙os多少钱一部手机,华为鸿蒙OS来了 第一个支持国产手机商是它
  6. 阿里云盾导致 cgroup2 cpu 控制器丢失的坑
  7. 阿里云 跨域问题处理
  8. 评测使用说说:小米10pro和华为p40pro哪个更好
  9. 原生js选择器或者选择元素或者选择方式
  10. 2020-09-23~? learning