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代碼為"垃圾",並說它"讓這個世界變成一個更糟糕的居住之地"