什么是好/坏代码

我曾经在某个地方读到一段话,基本上有以下内容:

“现代世界许多人的生活依赖于软件,例如控制大型商用客机飞行系统的软件,但软件开发领域大多不受监管。任何人都可以成为自学成才的软件开发人员,并且没有像其他高风险职业(如天升建筑或神经外科)那样的认证或严谨性。这是一个危险的不受监管的字段,因为根据情况,几行糟糕的代码确实可能导致生命损失。

我似乎记得这是在某种主流出版物中。我想,这篇文章的主题是“小心糟糕的代码,它可能会杀死你,哦,但是等等,它是看不见的,所以没关系!”对读者来说当然是一条舒缓的信息,你不觉得吗?回想起来,这篇文章似乎只是想耸人听闻地展示我们日益包围的客机、火车和自动驾驶汽车中潜伏的“坏代码”,从而增加读者群。

那么,作为外行人,什么是“坏代码”?

作为一个每天编写、审查和重构代码(意思是以更简洁和可用的方式重写)约5个小时的人,我知道什么是代码(以及什么是坏代码,相信我!)。我有时会忽视一个事实,即许多人对什么是代码没有概念。

对于这些人,我对“你是程序员,你是做什么的?”这个问题提供了以下答案:

“我建造小门廊的小组件,以各种方式和各种配置打开和关闭。当门打开时,电子可以通过,当它们关闭时,电子被阻挡。由于门口太小,无法手工建造,我必须用我的电脑建造它们。根据我在电脑中输入的单词,它代表我建造了各种类型的这些小门道。”

毫无疑问,正如上述答案所指出的,软件开发人员/程序员/程序员实际上是在构建具有物理存在的东西,但太小而看不见(然而,可以设想为组件或一组小门口)。这本身就已经很疯狂了,但如果你至少可以想象,你已经对什么是“编码”有了概念性的理解,恭喜你!但回到本节标题中的问题——什么是“代码”?

按照我们小门口的小组件的类比,我会说,糟糕的代码意味着你有太多的门道,以不必要的重复复杂的方式排列。

由于很难用门口的类比来想象或进一步解释,在这一点上,我想提供另一个类比,如下文所述。

给我建一个旋钮转动器!

说我们想建造一个旋钮转动器。一个可以旋转的旋钮,它又会在远程位置旋转另一个旋钮。产品要求如下所示。转动一个旋钮,另一个旋钮也会在一定距离外转动:

这就是我们需要的系统——一个转动另一个旋钮的旋钮。

坏代码只考虑手头的问题,并提出了最简单的解决方案——旋钮和旋钮转动器,由半柔性杆连接。坏代码在这个早期阶段赢得了奥卡姆的剃刀奖。一开始好的代码似乎太过分了,它使用了一条橡胶带和2个轮子。

坏代码得一分!简单,几乎没有活动部件!

要求更改!旋钮将被重新定位!

像往常一样,在开发周期中,在某些时候,客户需求会发生变化。在我们的类比中,客户现在想要一个旋钮转动器,可以将另一个旋钮向前旋转原始旋钮的侧面,如下所示:

哎呦!产品要求变化!

坏代码需要添加一些错误的组件,使整个系统更加颠瞠和容易发生故障。当有新要求时好的代码只需要稍作调整,只需使用更长的橡胶带来解决这个问题。

糟糕的代码已经成为摇摇晃晃的组件的混合体......

要求更改!旋钮需要转得更慢!

最后,我们的客户决定他们希望旋钮以不同的速度转动。输入旋钮的小转弯应该会导致连接旋钮的大转弯。

鉴于这一新要求,坏代码需要向系统添加更多组件,使其更加复杂。另一方面,好的代码再次只需要轻微的调整,在连接的旋钮一侧使用更大的轮子:

两个插入物和一根滑稽形状的杆子?谁在维护你的时候,糟糕的代码?

类比后记:那又怎样?

如上所述,当需求简单时,好的代码通常看起来是过分的,但当客户要求发生变化时,它确实会大放异彩(就像他们总是这样)。换句话说,它很好地扩展和变化。另一方面,糟糕的代码似乎很简单,非常适合解决简单的问题,但当系统发生变化或增加复杂性时,它就变成了一场噩梦。

但也许你在想,“好吧,上面概述的两个系统都实现了相同的结果——旋钮转动器在这两种情况下都能成功工作。”

这是真的——对于单人编码或业余爱好者项目来说很好。上帝知道,我已经写了数万行的坏代码(就我而言,是vanilla JS),但没关系,因为我从未需要维护代码或以任何方式添加代码(查看
www.python-gui-builder.com的这2,422行源代码,这是我2020年的业余爱好网站之一)。代码起作用了,我部署了它,从未回头看过。

然而,专业编码本质上是一种协作,无论您编写什么代码,无论现在还是将来,都无疑都会被其他编码员持续阅读和编辑。如果代码尽可能易于理解,这些编码员将有一个更轻松、更高效的工作日。

  1. “这是我们的旋钮车床,它由2个轮子和一条皮带组成”,
  2. “这是固定连杆的插入物,这是连接杆,你必须把它的末端放在另一个插入物的一个小洞里......”

作为一个初级开发人员,宁愿听到哪个,从你的前辈那里接管代码库?:)

举报
评论 48
  • 一般来讲 这种情况下 类比是最糟糕讲解方式

  • 无所谓好坏 最后都是屎山

  • 不符合中国国情,中国有防御性编程

加载失败,请重新刷新