回到未来-旧版代码

今天,有人在一个Facebook小组中提出了一个问题:“遗留代码不可避免地会废话吗?”。 与我之前的文章不同,我们不会先创建一些遗留代码,因此,如果有人希望获得一些复制粘贴的材料:我对您来说是个坏消息🙂但是,如果有人对遗留代码感兴趣,那么他可以找到它🙂

首先让我们看一下定义:什么算作遗留代码? “传统”一词既不是“废话”的同义词,也不是“无尽的痛苦”的代名词,也没有任何证据表明它一定是COBOL或FORTRAN。

如果我们向维基百科询问这一点,它将告诉我们有关该主题的更多信息。 它指出,如果一个代码库与不支持的技术有关,则它将成为旧代码,例如,我们必须支持串行端口,Windows XP,IE7或PHP 5.2.4。 因此,维基百科通常说,如果我们为waaaaaaaay保留代码的时间太长,则向后兼容性是主要问题。 如果我们考虑WordPress,我们已经第一种无法清理WordPress的情况,因为它仍然与PHP 5.2.4兼容!

大多数时候,我们不必花几年时间去寻找这样的怪物。 有几种方法可以作为程序员工作。 如果我们强调PHP,那么我们可以被一家跨国公司或一家较小的公司雇用,或者可以作为自由职业者来做。 在大公司工作并不意味着人们实际上就可以一起工作,因为有几家公司只是在他们那里创建微型站点。 如今,大多数雇主都在雇用“全职大师”,在那里的开发人员可以分配给一个项目,他们可以完成设计而无需与设计师对话。 这也适用于自由职业者和较小的公司。 当某人长时间工作时,他们会变得懒惰。 没有人看他们的代码,没有人责怪他们,也没有遵守的标准。 但是有一件事:

如果没有质量期望,那么就会有数量期望,而这些期望将来自管理层。

让我们看一下戴夫的故事:

我们的全栈开发人员朋友刚刚被一家小型公司雇用,在那里他们大多倒出微型网站。 他们不是在做敏捷,而是崇拜所谓的ASAP驱动开发,这基本上意味着所有事情都应该在前一天完成。 Dave是一位具有原则的开发人员,因此他尝试使用视图文件中的翻译键等来很好地组织代码,总体而言,他干得很出色。 以这种态度,他可以以合理的速度运送较小的站点。 但是项目经理的座右铭是:“您应该在开发人员身上承担越来越多的任务,因为只要他能够承担,他就拥有更多的能力”,因此他发现我们Dave的工作进展缓慢,并希望他做得更好。

戴夫(Dave)在其中一次状态会议上意外地提到“如果我再加急的话,代码就会很丑”。 总理不再需要任何确认,因此他斥责可怜的戴夫,因为他将时间浪费在与业务无关的因素上比其他因素要慢。 由于不以软件开发人员的过分举止闻名,因此Dave无法坚持自己的立场,因此与其他编码人员保持一致。 从现在开始,他拒绝编写单元测试,不理会SOLID原则,无意识地从以前的项目中复制类,因为没有时间进行拉取请求而侵入了composer程序包等等。 项目经理很高兴,因为他注意到Dave的性能比以往提高了20%。

随着几个月的过去,Dave试图提高生产力。 他在视图文件中查询数据库,删除框架,并携带一个functions.dave.php文件,该文件在项目之间越来越重要。 当他成为生产力最高的开发人员时,管理层决定提拔他。 他成为高级开发人员。 新头衔具有新的职责,因此从现在开始,他还必须增加新人。 他让他们坐在电脑前,在IDE中打开他过去的项目之一,并向他们展示其强大functions.dave.php的功能。dave.php穷人在这里学习了遗留代码的含义

但是戴夫(Dave)希望改变环境,因此他转向了另一家公司。 这家公司不是专门针对小型网站,而是针对大型,更复杂的Web应用程序,在这些应用程序中,产品及其组件已开发了多年。 一位同事向Dave描述了票务工作流程:

  • 您开发代码。 没有针对它的测试的代码就好像没有代码一样。
  • 如果完成了此操作,则要求质量检查人员帮助您,并一起调查问题,以了解是否涵盖了所有必要流程。
  • 然后,您提出请求请求,并要求我们进行审查。 您还必须查看其他人的代码!
  • 当您固定审阅项目或进行讨论时,他们又批准了您的拉取请求,那么您只能将其合并到主分支。
  • 如果可能,您应该在每次冲刺上花费15%的时间用于技术债务。

这使Dave感到震惊,因为这与他们上一份工作所采用的方法完全不同。 代码库很大,堆积了数百个类,但是每个公共接口或类都有很好的文档说明,并且没有两个格式不同的文件。 在审查期间,他在研究其他开发人员的代码时看到了许多新技术。 他们还每周举行一次编码dojo,在那里他们可以学习IDE和核心API的各个方面。

促销不是基于已解决的凭单数量,这里的数量不能弥补质量,因为团队必须维护代码库,并且随着技术部门列表的增加,伤害也会更大。 经理们意识到了这一事实。 这是另一种类型的旧代码,不错,虽然很旧,但是由于不断的重构,因此没有一部分需要重新修改。

但是,让我们看另一个例子。

我们有一个大约10年前用史前PHP编写的代码库。 那时是PHP 5.2获得JSON扩展的时候,但是那时的托管服务提供商就像现在一样,非常缓慢地应用新版本。

然后我们遇到了这段代码,我们几乎无法忍住眼泪,因为我们看到了一个“手动”构建JSON字符串的函数。 什么???

然后,我们检查文件顶部的docblock:

 日期:2006.02.11 

在围绕PHP版本进行了一些快速计算之后,我们发现只有最新的5.2版本才具有json_encode / decode(别忘了PHP 4就是这样!)。 然后,我们考虑到有许多托管提供程序仍在运行PHP 5.5,因此整个代码现在很有意义。

但是,如果该代码库是去年创建的,我们会质疑该人的PHP知识。 PHP的开发人员正在努力扩展可用的工具集,从而使我们的工作更加高效,因此,如果十年前没有Java 8调用或使用.NET 2.0时没有JSON编码,不要感到惊讶。

PHP是一种非常特殊的情况,因为自由职业者的比例更高,而且他们倾向于单独工作。 正如我之前提到的,如果有人一个人工作,那么他们往往会变得懒惰,疏忽,因为没有力量使他们遵守标准和原则。

我们怎么办才能避免留下像这样的怪物?

  • 如果您的公司不尊重代码质量,那么在进行估算时就不要考虑代码质量或将其考虑在内,并且不要让其他人在这方面影响您。 原则!
  • 一起工作。 如果您最终到了同一个地方,请互相学习。 其他人可能知道一些您不了解的高级键盘快捷键或API调用。
  • 如果您在办公时间内无法一起工作,请参加Coding Dojos或在办公室组织一个。
  • 开源! 如果您是一个人工作,那就跳一个github项目,您将可以合作并向他人学习。

故事的寓意: 代码库不必太老就可以让您哭泣。