学读代码比学写代码更重要
译者:baiyutang
亲爱的开发新人:
编程很有趣,你可以在页面写几句话,按照你的理解赋予它生命,快速输入到编辑器并显示给我们的同事。这是一个改变世界的充满惊奇的职业。
但是,绝大多数的代码被阅读的次数远远大于写的次数,这是真的,原因如下:
公司在代码上花钱了,代码很昂贵,公司要尽可能经过多年来摊销编写代码成本。
业务需要改变,这也意味着支持他们业务行为的代码也需要改变。但是在改变软件之前,修改者需要理解当下发生了什么。即使需求要实施一个全新功能,开发者仍需要理解如何融入已有代码库。
出现 bug,软件几乎是正确的,但不完全是。同样,修复代码的人需要理解现有代码在干嘛。
过了很多年,将会有很多改动和 bug 修复。
确实,偶尔也会有一些“安装了就遗忘了”的软件,很多年也几乎没动过。我曾负责过一个软件就超过五年没改动,但这是很少见的,所以也一直牢牢记得。
这意味着,你实际编写代码花费的时间,要比尝试理解已有代码消耗的时间更多,以便能够改动代码,而不是编写新代码。在你支持的应用中,已经编写的应用要比还没编写的应用多。当然,根据你工作的公司,可能有会有不同的情况。一个还没现有系统的初创公司比正在运行的企业需要更多新代码(我希望我有数据可以支持这些说法,但我有的只有我的经历)。
这对你意味着什么呢?开发新人。
这意味着花时间学习阅读代码是个好主意。
当我接手对我来说是新项目的已有项目,为了改代码我需要理解它,我认为有几个不同的方面:
浏览,这是高层次的概述。“代码尝试解决什么问题,项目用了什么开发语言或框架,他们的使用是否在一个通用的规范或一个特有方式?应用程序最主要部分是什么,他们是如何组合在一起的?”——这些信息非常适合作为文档,但有时需要从某些人的头脑里或者代码里提取出来(你应该写下你学到的)。
深入探索,这是你关注的手头问题的地方,尝试确定应该在哪里改代码。这将可能涉及到打开多个文件并在其中移动,尝试理解系统这部分的所有逻辑。你也可以在代码里寻找更多细粒度的模式,包括不同水平的抽象,自定义库或用到的框架和代码风格。一致性很重要,所以你要编写符合当前代码库风格的代码。
使用科学的方法,写一种假设,做一些小改动看看会发生什么,如果你的改动能够表现在你的系统或你本地机器,那就太好了。调试程序在这里会非常有帮助,单元测试也是(或任何一种自动化测试)。如果你不能复制整个系统到本地,你仍然可以代表性的设置语言本地运行时,运行各种代码块,以更好的理解系统在做什么。
在你改动代码前,应当提防尝试理解全部系统的诱惑。是否需要这么做取决于整个系统是怎么样的,系统被测试的怎么样和系统的关键性。只有与业务部门和你团队的其他同事讨论才能确定最佳前进方向,随着时间的推移,你也会更加理解整个系统。
另外,当心只是想“丢掉旧代码并重写它”的诱惑,特别是如果你并不能完全理解代码在做什么。旧代码是完整的知识,冒险时你会忽略它(的存在)。
阅读代码比编写代码更重要,因为软件系统在启动后花费了大部分的时间在整个软件生命周期中,并且会发生变化。
Sincerely,
Dan
版权声明: 本文为 InfoQ 作者【baiyutang】的原创文章。
原文链接:【http://xie.infoq.cn/article/4fbd12139ebeee2303d4d5813】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论