Mike Chong

让我们一起终结复杂性商人(谢谢你,DHH)

2025年9月8日
让我们一起终结复杂性商人(谢谢你,DHH)

"删繁就简三秋树,领异标新二月花。"

—— 清代郑板桥(18世纪)

DHH在Rails World 2025的这个视频太精彩了。DHH在1999年之前就开始了他的职业生涯,而我很幸运能够在1999年我父亲带我到中国的网吧时开始使用互联网。在技术世界里,我认为DHH是我的线上导师,在我整个职业生涯中指导我识破胡扯,包括在微软和其他公司的经历。我在与不同的人合作时发现了太多胡扯,我相信至少90%的人不接受我对问题的简化。他们不断给他们可悲的项目增加复杂性,最终失败。一个简单的项目本来只需要一两百万美元的人力成本开发,最终却花费10倍的时间和2000万美元。所有这些过度复杂化、过度工程化和过度思考问题最终都会导致巨大的失败。

从我开始学习编程以来,我一直发现许多所谓的规则、最佳实践、编程语言和框架都是胡扯。我当时不是那么熟练的程序员,所以不敢这么说。

我可以给你很多例子。拿App Store的代码签名系统来说。这不只是代码签名,它与苹果的IDE紧密耦合,苹果在这上面没花多少心思,而且很糟糕。到现在,我仍在修复我应用的随机代码签名问题。今天我正在尝试修复Twilar的代码签名问题,这是一个macOS Catalyst应用,处于非常奇怪的位置。

我无法修复它,尽管我的客户一直要求我修复。这完全是由于苹果的繁文缛节。

其他编程语言比如DHH提到的Java,不信任程序员,所以它们建立了尽可能多的繁文缛节壁垒。

我认为这种随意的复杂性胡扯至少占当前编程世界的50%。以Kubernetes为例。我相信这个世界上只有10家公司,也许100家顶级公司需要它。我花了那么多时间学习它,但它根本没用。

构建复杂性胡扯检测器

那么我们如何构建一个复杂性胡扯检测器呢?我认为AI是一个好工具。

DHH提到他一直在使用bash脚本和AI从头构建Omarchy

关于AI辅助编程,很多人会说"AI写出来的代码不是代码,只是垃圾"。好,假设这是对的。如果你吃的食物因为大量生产而变得便宜,你能说你在吃垃圾还是食物呢?就是这个道理。很多人有那种自负心态,觉得复杂的东西才是正确的。我认为恰恰相反,越简单的东西正确性越高。

我认为即使没有AI,如果某个东西可以很快变得可用,比如在七天内制作出最小可行产品,或者用AI在两天内完成,那就是一个好信号。否则,我会怀疑,因为真正的阻碍是其他东西,比如法律合规或大平台的垄断。

例如,我正在构建一个键盘输入应用,我发现无法使用iOS键盘扩展来录制音频,而苹果可以很容易地用他们的内置模型做到这一点。这个市场的每个参与者都在构建变通方案,在变通方案上花费额外的100个小时。苹果所谓的隐私问题只是为了阻挡新来者和竞争对手。这就是复杂性胡扯。

例子太多了。拿macOS应用的代码签名来说。苹果引入了一种叫做公证的东西,这是自动App Store审查。在大多数平台上,你可以分发应用而无需征得某些大公司垄断的批准。

拥抱开放系统

去年早些时候,我做了一个决定,避免跨平台技术,尽可能少写平台特定代码,这意味着完全拥抱web技术。

当我有时必须编写原生代码比如Swift或C++时,我发现设计和复杂性都很糟糕。这仅仅是因为平台提供商一直在主导其平台上的创新。他们不想要新东西,因为如果我们构建新东西,那可能会推翻他们的平台垄断。

我认为只有少数开放标准是真正开放的:web标准、Electron、Node.js、Ruby on Rails。这些是我们应该学习和使用的真正开放系统。我们应该构建在这些更简单、更便宜、更快、更好、为人类设计的框架和语言之上。我们应该狠狠地打击像Swift这样的封闭生态系统,确保如果它们选择成为封闭系统就无法繁荣。

为什么?因为封闭系统总是不好的。Xcode IDE已经坏了至少一年。如果AI更改太多行代码,它就无法再构建应用了。它只是抛出随机失败。你可能会问苹果工程师如何完成他们的工作。我相信他们在完全不使用AI的情况下完成工作,因为如果他们有AI编写Swift代码,他们一年前就会注意到这个问题。

Xcode的糟糕状态已经被充分记录。这篇Medium文章完美地描述了我提到的Xcode构建问题的荒谬性。开发者找到的唯一"解决方案"就是重启整个IDE,这完全是荒谬的。即使是git分支切换这样的基本操作也会触发这些故障。如果苹果自己的工程师真的使用现代开发工作流程,他们早就修复了这个令人尴尬的错误。

人们经常选择接受权威而不是抱怨。当我在Twitter上抱怨这个问题时,某个随机公司的某个随机人说他们没有看到同样的问题,这完全是笑话,除非他们不写Swift或Objective-C代码。

为什么DHH的哲学很重要

我很高兴12年前开始学习Ruby on Rails。我喜欢DHH的思维方式,尽管我不100%同意他的所有观点比如强类型。

我完全同意我们应该致力于减少复杂性。我爱苹果,我爱蒂姆·库克,我爱史蒂夫·乔布斯,但我不喜欢苹果建立的繁文缛节。如果我们减少复杂性,一切都会更好。苹果会更好,开发者会更好。

很难想象10年前我使用Capistrano部署我的Rails应用,现在我们有了Kamal部署。事情变得更容易、更简单、更好。这也应该发生在iOS开发和macOS开发上。

明天苹果将发布他们不重要的iOS重新设计,在这个UI根本不重要的时代,那就是Liquid Glass。新设计看起来很棒,但绝对不在苹果的首要任务中。人机交互正在回到最自然的形式:对话。

我希望蒂姆·库克能够意识到错误或错误决定,并开始修复苹果的真正问题。

企业复杂性的完美例子

最近我接手了朋友公司的一些咨询项目,这些项目是由来自阿里巴巴和埃森哲的程序员构建的。我发现他们添加了如此多的复杂性,将一个只有2000或者最多20000行代码的简单项目分割成6个不同的微服务。这就像一个笑话。

在这种小项目中,单体架构会比微服务好一百万倍。

如果我要说一些严厉的话,大公司里的许多人就像工具一样,比AI还糟糕,因为他们知道的太少了。他们只是将他们的部分学习应用到现实世界的问题上,不必要地使一切变得过于复杂。

当我阅读他们过度复杂的代码时,我有着和Linus Torvalds一样的感受,他称谷歌工程师的RISC-V代码为"垃圾",并说它"让这个世界变成一个更糟糕的居住之地"