Flexibility Equates to Lower Quality

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

有两种相对立的心态:“如果能用,就是好”的观点与“如果好,就能用”的观点;或者“让它能用”与“让它正确”。我在谈论软件源代码。我几乎每天都在博客评论中听到这样的话:如果我们的代码没有问题,为什么还需要那些新的面向对象编程原则呢?如果现有的、传统的、半面向对象、半过程化、不太完美的方法就能用,引入一种被认为“更好”的新方法有什么意义呢?

让我们试着放大视野。不仅仅是关于面向对象编程,而是关于软件开发的一般性问题。有很多“只要能用就行”的例子。

以Perl为例,这是一种以能够以三种不同方式解决问题而闻名的编程语言。这意味着没有一种“正确”的方式。我不是Perl专家,所以我让您看一下这段Ruby代码代替:

我们可以像这样重写它:

Or this:

m = 'Hello!' if a > b

And one more:

m = a > b ? 'Hello' : nil

哪一个是“正确”的?有没有Perl开发人员?你能提出其他实现相同结果的方法吗?

毫不奇怪,在Java(一种比Ruby更严格的语言)中,只有一种方法可以实现。

好吧,我猜我错了;实际上有两个。这是第二个:

作为程序员,这种多样的选择给我们带来了什么?我猜答案严重取决于我们作为程序员对代码的使用:是编写还是阅读。此外,这还取决于我们对正在创建的软件的态度;我们要么“拥有”它(黑客心态),要么“构建”它(设计师心态)。

如果我们正在“编写”代码,并且喜欢将自己视为代码拥有者,我们肯定需要那些语法糖的武器库。我们需要它们来向自己证明我们很聪明,当然也是为了在我们的朋友和那个没有灵魂的Ruby解释器面前炫耀。

另一方面,如果我们是设计师,碰巧阅读到充满语法糖、能够“正常工作”的代码,我们会非常恼火和沮丧。好吧,也许我只能代表我自己,但我肯定会这样。

这种过度使用语法糖的Ruby语法是“工作 vs. 好”的完美例子。Ruby的哲学是:只要能工作,写法不重要。Java的哲学则不同,更接近于:做对了它就会工作。Ruby中的动态类型与Java中的强和静态类型也证明了我的观点。

总的来说,我认为编程语言越灵活,它所产生的代码的可维护性(关键的质量特征)就越低。简言之,更高的质量来自于更简单的语言。

对于整个软件开发来说也是如此:我们对程序员施加的限制越多,他们在“语法创造力”方面的选择越少,他们编写的软件质量就越高。像Java的Checkstyle或Ruby的Rubocop这样的静态分析器试图解决这个问题,并禁止我们使用某些语言特性,但它们远远落后。我们非常“有创造力”。

现在,让我们回到最初的面向对象编程问题:如果它的工作方式没问题,为什么我们需要改进它?答案在这里:现代面向对象编程(比如Java、Ruby和C++)之所以不能生成高质量的代码,是因为它没有一个强大且适当受限的范式。它只有太多的“特性”,这些特性大部分是由C++引入的,并一直保留至今,只是为了我们的“方便”。

它们确实能够工作,但我们所生成的软件的可维护性非常低。嗯,比它本可以达到的水平低得多,如果我们的“创造力”受到限制的话。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-22 at 09:47

sixnines availability badge   GitHub stars