在算法与软件开发项目中,难免会接手到一些组织结构混乱、模块耦合度高、硬编码横行、注释缺乏、文档错误百出的“烂代码”。这个时候,无论你如何抱怨与沮丧都不起作用,只能硬着头皮实现指定的功能,从而不辱使命。更何况,存在即是合理:“烂代码”虽然看上去毫无逻辑可言,但是只要它曾经被成功地运行过,那么就仍有一定的内在逻辑在里面。而我们的工作便是要从一堆乱麻中整理出头续,发现这些逻辑,为我所用。本文便结合我个人的经验与体会介绍几点小方法和技巧,以期能够为陷入类似上述困局的开发者带来启发和帮助。

  • 代码理解
    • 重在了解代码的整体结构与大意,而千万不要过分追究代码细节。
    • 使用思维导图或者更专业的UML工具对数据结构、算法流程、应用逻辑、通信协议、线程或进程同步关系等方面进行可视化。这对于增进理解、把握主旨大有裨益,甚至能够做到比原开发者的理解更为清晰透澈。
  • 文档阅读
    • 对于与实际代码不一致且错误频出的文档,不用太较真和固执。在大致理解的基础上,大胆猜测、推断和测试,以实现自己的目标。
  • 代码调试
    • 充分利用调试过程中出现的错误信息进行思考和分析。这包括:
      • 拷贝错误信息中的感兴趣字符串并在源码中搜索,用以定位可能出错的地方。
      • 基于自己的理性、经验、常识进行分析和推理。即便这么做也找不到出错的原因,但总比瞎猜乱试强。
  • 新功能开发
    • 在理解大意的基础上,尽量相信、依赖和利用原有代码为自己的意图服务。不要另起炉灶做重复工作,尽管这能够让代码结构更加清晰,行文更加漂亮——这对于优秀的产品固然不可或缺,然而这并不是当前工作的首要目的。
    • 除非对代码结构、流程与实现的具体细节有准确的了解,否则不要擅自、轻易地修改源代码。
    • 上述说法并非绝对。必要情况下,例如,对于那些直接影响性能与限制达成开发目标的部分,则完全可以将已有代码推倒重来。这时,为了更好的设计与性能,即便是重新发明轮子也是没有问题的。
  • 测试代码编写
    • 设计日志文件格式,编写测试代码、数据后处理与可视化脚本,从而提高测试效率和测试参数的覆盖范围。

Last but not least,在以上技术性的处理之外,一定的心理调节也是必不可少的。面对没有品位、毫无美感甚至是令人作呕的“烂代码”,要始终保持轻松、淡然的心态,千万不要将因其产生的不良情绪带入到自己的生活中。工作即是工作,生活中还有更多美好的事物等待我们去发掘、去研究,因此不要用他人的错误与低级表现来惩罚自己。