软件开发中需要稳定的基础

2020-09-24 14:16:59

我的雇主好心地为我提供了一款最好的MacBook Pro。这是一台漂亮的机器,有6个CPU核心,32 GB的RAM和4K显示屏,是我拥有过的最强大的笔记本电脑,也是在家工作的宝贵工具。然而,不幸的是,这台圆滑的机器存在一些软件问题。

首先,你可以使用4个USB-C端口中的任何一个来给它充电,但是你真的应该只从右边给它充电。我经常遇到的另一个问题是,我有一个外置显示器,尽管将它配置为我的主显示器,坞站仍会随机跳回MacBook的显示器,直到我进入设置并将坞站向右移动,然后再次移动到底部,此时它会回到外部显示器,直到下一次它决定随机跳船。第三个问题是,每当我重新启动时,它都停留在启动过程的早期,显示白色的Apple徽标,并且什么也不做。直到我拔下USB-C设备,它才会完成引导过程。还有更多的问题,我可以继续。

苹果并不是唯一一家存在此类质量保证问题的公司。我最近在我想送给母亲的一台较旧的台式电脑上安装了Windows 8(不幸的是,她看不到自己在使用Linux),安装了新操作系统后,我做的第一件事就是尝试运行Windows Update。然而,它没有起作用,我震惊地发现,在这个版本的操作系统上,Windows Update是开箱即用的。我了解到有一个补丁可以解决这个问题,但补丁不起作用,它显示了一个永远冻结的进度条。网上搜索显示,为了让补丁生效,我不得不拔掉以太网电缆。

为什么我们生活在一个充满虫子的世界?我认为这有几个原因。毫无疑问,问题的一部分是我们竞争激烈的资本主义经济使得主要的软件和硬件供应商想要以惊人的速度前进。技术进步几乎不能证明每年发布新一代智能手机是合理的,但操他妈的环境,为了保持兴趣和保持高销量,需要发布一款新产品。我们行动很快,在这个过程中,我们打碎了东西。

我已经成为Ubuntu Linux的用户超过10年了。我之所以选择这个发行版,是因为在当时,它是最受欢迎的,这使得查找软件变得很容易,如果出了什么问题,还可以提供在线帮助。最初,当我发现Ubuntu时,它使用的是GNOME桌面,一切都相当无缝地工作。然而,大约在2011年,Ubuntu开始发布一个不同的用户界面,他们称之为Unity。这个新的用户界面充满了漏洞,而且受到的欢迎也很糟糕。我的理解是,这个用户界面的改变让Ubuntu失去了作为最受欢迎的Linux发行版的位置,它被Mint取代,现在是MX Linux。

为什么Canonical一开始选择取代GNOME呢?可能是因为第一台iPad是在2010年发布的,当时人们不停地在谈论平板电脑是如何成为未来的。Canonical希望利用这一最新趋势,让Ubuntu对平板电脑用户更具吸引力。这就需要重新设计UI,使用更大的按钮,看起来更像iOS。在这个过程中,他们似乎忘记了,当时没有平板电脑可以运行Ubuntu,引入了许多新的错误,并迅速疏远了现有的用户基础,压倒性地在笔记本和台式机上运行Ubuntu。

截至2020年,Ubuntu重新运行GNOME,平板电脑引入的最具创新性的功能是一个可拆卸的外接键盘,有效地将平板电脑变成了笔记本电脑。我不想听起来愤世嫉俗和过于保守。我喜欢创造新的东西,我认为重新发明轮子可以是一次宝贵的学习经历,但对我来说,很明显,有时候,稳定性和可预测性有很大的价值。有些事情应该重新发明,但在其他情况下,事情并不真的需要改变。我们非常需要电动汽车和绿色能源,但也许我们不需要重新设计用户界面。

在软件和硬件设计中,我们最应该警惕的是破坏,那就是人们所依赖的界面。API是一个显而易见的领域,其中稳定性特别重要,向后兼容性至关重要。众所周知,Linus Torvalds极力捍卫Linux内核永远不应该破坏用户空间的政策。考虑到内核向软件公开的接口是最基本和最基础的API之一,这个策略是有意义的。如果内核例行公事地破坏程序和库,那么就很难在平台上构建任何东西。

不过,它不仅仅是API,它还是编程语言。许多语言一直在添加新的功能,在这个过程中,会破坏现有的软件。当地面不断变化时,很难建造什么东西。大大小小的公司,以及个人开发人员,仅仅是对变化做出反应并修复损坏的东西,就花费了大量的精力。这让我认为,在开发和发展一种编程语言时,如果优先考虑稳定性、错误修复和性能改进,而不是不断添加新功能,可能会对现有的用户群有利。

我认为,我们在JavaScript、Python、Ruby和其他语言中看到的不断增加新功能的动机,不仅仅是希望帮助程序员提高生产力,而且是为了与其他语言并驾齐驱,保持一定的竞争优势。语言设计者担心,新用户会蜂拥至任何一种具有最新、最时髦功能的语言。

许多新来者会追求最新功能的想法可能有一定道理。然而,另一方面,我一直在想,在设计一种极简主义的、稳定的、通过设计而发展缓慢的语言时,是否就不能有竞争优势。我个人偏爱避免隐藏的、复杂的、自动的行为的语言。我还认为选择使用广泛理解的原语的语法和语义是有价值的。毕竟,语言的主要价值在于被理解。