写点什么

学读代码比学写代码更重要

用户头像
baiyutang
关注
发布于: 5 小时前
学读代码比学写代码更重要

译者:baiyutang

原文: https://letterstoanewdeveloper.com/2018/09/24/learning-to-read-code-is-more-important-than-learning-to-write-it/


亲爱的开发新人:

编程很有趣,你可以在页面写几句话,按照你的理解赋予它生命,快速输入到编辑器并显示给我们的同事。这是一个改变世界的充满惊奇的职业。

但是,绝大多数的代码被阅读的次数远远大于写的次数,这是真的,原因如下:

  • 公司在代码上花钱了,代码很昂贵,公司要尽可能经过多年来摊销编写代码成本。

  • 业务需要改变,这也意味着支持他们业务行为的代码也需要改变。但是在改变软件之前,修改者需要理解当下发生了什么。即使需求要实施一个全新功能,开发者仍需要理解如何融入已有代码库。

  • 出现 bug,软件几乎是正确的,但不完全是。同样,修复代码的人需要理解现有代码在干嘛。


过了很多年,将会有很多改动和 bug 修复。


确实,偶尔也会有一些“安装了就遗忘了”的软件,很多年也几乎没动过。我曾负责过一个软件就超过五年没改动,但这是很少见的,所以也一直牢牢记得。


这意味着,你实际编写代码花费的时间,要比尝试理解已有代码消耗的时间更多,以便能够改动代码,而不是编写新代码。在你支持的应用中,已经编写的应用要比还没编写的应用多。当然,根据你工作的公司,可能有会有不同的情况。一个还没现有系统的初创公司比正在运行的企业需要更多新代码(我希望我有数据可以支持这些说法,但我有的只有我的经历)。


这对你意味着什么呢?开发新人。


这意味着花时间学习阅读代码是个好主意。


当我接手对我来说是新项目的已有项目,为了改代码我需要理解它,我认为有几个不同的方面:

  • 浏览,这是高层次的概述。“代码尝试解决什么问题,项目用了什么开发语言或框架,他们的使用是否在一个通用的规范或一个特有方式?应用程序最主要部分是什么,他们是如何组合在一起的?”——这些信息非常适合作为文档,但有时需要从某些人的头脑里或者代码里提取出来(你应该写下你学到的)。

  • 深入探索,这是你关注的手头问题的地方,尝试确定应该在哪里改代码。这将可能涉及到打开多个文件并在其中移动,尝试理解系统这部分的所有逻辑。你也可以在代码里寻找更多细粒度的模式,包括不同水平的抽象,自定义库或用到的框架和代码风格。一致性很重要,所以你要编写符合当前代码库风格的代码。

  • 使用科学的方法,写一种假设,做一些小改动看看会发生什么,如果你的改动能够表现在你的系统或你本地机器,那就太好了。调试程序在这里会非常有帮助,单元测试也是(或任何一种自动化测试)。如果你不能复制整个系统到本地,你仍然可以代表性的设置语言本地运行时,运行各种代码块,以更好的理解系统在做什么。


在你改动代码前,应当提防尝试理解全部系统的诱惑。是否需要这么做取决于整个系统是怎么样的,系统被测试的怎么样和系统的关键性。只有与业务部门和你团队的其他同事讨论才能确定最佳前进方向,随着时间的推移,你也会更加理解整个系统。


另外,当心只是想“丢掉旧代码并重写它”的诱惑,特别是如果你并不能完全理解代码在做什么。旧代码是完整的知识,冒险时你会忽略它(的存在)。


阅读代码比编写代码更重要,因为软件系统在启动后花费了大部分的时间在整个软件生命周期中,并且会发生变化。


Sincerely,

Dan

发布于: 5 小时前阅读数: 7
用户头像

baiyutang

关注

广州 2017.12.13 加入

Microservices | Golang | Cloud Nitive | “Smart work,Not hard”

评论

发布
暂无评论
学读代码比学写代码更重要