我提出过信息技术的第一悖论:信息技术是一种反人类的技术。而在公有云的诸神黄昏文章中,我总结了信息技术行业的熵增定律以及“0号规律”——边际收益为0的代码重构没人愿意做。
今天我要反驳0号规律,并提出一个新“熵减定律”——在后现代编程中,人类的意义是降低代码的时间序列复杂度(n<n-1)。
屎山代码存在的合理性以及重构的必要性
如果你反编译过一些游戏的安卓apk文件,就会发现里面存在大量冗余的美术资源,这些美术资源跟当前版本没半毛钱关系。它们是一种历史遗留的垃圾代码。
而由于0号规律的存在,没有任何程序员愿意去重构以及删除相关的美术资源。这也解释了“王者荣耀”的安装包一再膨胀,直至后来提出了“清理历史道具”和“模块化按需下载资源”的解题思路,当然有一部分人吐槽更新完之后“粽子”变成一堆堆人机一样的图标。

至于为什么这么做,其实涉及到博弈论的一个基本论述:局部最优解未必全局最优。对于游戏开发者而言,为了增加新的收入,必定需要构造新的叙事。而清理历史债务不会在游戏的财务上有所体现。
但对于游戏用户和运营公司而言,日渐膨胀的安装包推高了CDN的流量成本,垃圾代码的堆积也延长了用户下载打开游戏所需要的时间,甚至有可能引起操作卡顿。
如果用熵增定律去衡量软件开发的流程,就会发现程序设计的屎山是一种必然,从某种程度上是软件开发工程师的一种“防御性编程”。
防御性编程还是过度设计?
从政治经济学角度出发,软件开发工程师本质上依旧是不掌握生产资料的“进城农民工”。从入职公司的那一刻起,所思所写都是公司的“数字资产”。这在美剧《硅谷》中亦有所体现:Richard在Hooli工作时,利用业余时间(但部分使用了公司电脑进行测试)开发了革命性的无损数据压缩算法,并以此为基础创立了Pied Piper公司。
当Pied Piper开始崭露头角后,Hooli(由Gavin Belson领导)在第二季中正式起诉Pied Piper,指控Richard“窃取”了属于Hooli的知识产权(copyright infringement),声称根据Richard与Hooli签订的雇佣合同(包含发明转让条款),他在职期间开发的代码及其相关技术归Hooli所有。

与公司抗衡是不明智的。因此为了规避被裁员的风险,软件开发工程师除了不写文档之外,滥用设计模式、使用反射隐式调用方法、过度设计,也都是常见手法。
我有时真的搞不懂,用人单位为了压低薪资而询问我各种“单机高并发”,“秒杀”问题。最夸张的莫过于问我“数百万用户同时在线”这种扯淡的问题,我看了一下那份岗位对应的薪资。
在有AI帮助的情况下,我当然可以设计一个流程去适配这些场景。问题在于,在使用了Redis分布式锁,Redis集群,kubernetes HPA动态扩缩容,微服务、消息中间件解耦之后,代码产生的实际收益在于哪里?我们做出来的产品是否真的有那么多付费的用户?把一个重要的系统交给一个边缘的外部服务商员工是否合适?
回到那个面试场景,最终我没有跟他们浪费时间,我建议他们通过微博发起抽奖解决秒杀的问题,然后我command+Q结束了整个远程会话。
科学熵减大家都轻松
回望第二次世界大战之后的世界,我们在一片废墟之上,又重新构建了新的高楼大厦。而信息技术到现在未到百年,终末的号角便已吹响。如果说这个行业也会随着人工智能技术而逐渐式微,那么少用C++(避免猝死),多用GC语言,做好AI coding的最后QA。
这样每天下班还能看到尚未暗淡的天空,不好吗?
n<n-1
I once proposed the first paradox of information technology: information technology is an anti-human technology. In my article The Twilight of the Public Cloud, I summarized the law of entropy increase in the IT industry and “Rule Zero” — nobody wants to do code refactoring whose marginal benefit is zero.
Today I want to refute Rule Zero and propose a new “The Second Law of Information Technology” — in post-modern programming, the human purpose is to reduce the time-series complexity of code (n<n-1).
The Rationality of Legacy Code and the Necessity of Refactoring
If you have ever decompiled the Android APK of a game, you will find a large number of redundant art assets inside — assets completely unrelated to the current version. They are historically inherited garbage code.
Due to Rule Zero, no programmer is willing to refactor or delete these art assets. This also explains why the installation package of Honor of Kings kept growing, until solutions like “clear historical props” and “modular on-demand resource downloads” were finally proposed — though some players complained that after the update, the “Zongzi” skin turned into a pile of bot-like icons.

Why does this happen? It comes down to a basic principle of game theory: a local optimum is not necessarily a global optimum. For game developers, constructing new narratives is essential for generating new revenue. Clearing historical technical debt has no direct reflection on the game’s financials.
But for players and operators, bloated installation packages drive up CDN traffic costs, and the accumulation of garbage code prolongs the time users need to download and open the game — and may even cause lag.
If you use the law of entropy increase to evaluate the software development process, you will find that a “shit mountain” codebase is inevitable — to some extent, it is a form of “defensive programming” by software engineers.
Defensive Programming or Over-Engineering?
From a political-economic perspective, software engineers are fundamentally still “migrant workers” who do not own the means of production. From the moment they join a company, everything they think and write becomes the company’s “digital assets.” This is reflected in the US TV series Silicon Valley: while working at Hooli, Richard used his personal time (though partially on company computers for testing) to develop a revolutionary lossless data compression algorithm, and founded Pied Piper on that basis.
As Pied Piper began to gain traction, Hooli (led by Gavin Belson) formally sued Pied Piper in season two, accusing Richard of “stealing” Hooli’s intellectual property (copyright infringement), claiming that under Richard’s employment contract with Hooli (which included an invention assignment clause), all code and related technology he developed during his employment belonged to Hooli.

Fighting the company is unwise. To guard against the risk of being laid off, software engineers resort to more than just avoiding documentation — abusing design patterns, using reflection for implicit method calls, and over-engineering are all common tactics.
I sometimes genuinely don’t understand: employers ask me about “single-machine high concurrency” and “flash sale” scenarios just to negotiate salaries down. The most absurd was being asked about “millions of users online simultaneously” — I took one look at the salary range for that position.
With AI assistance, I could certainly design a workflow to handle these scenarios. The real question is: after deploying Redis distributed locks, Redis clusters, Kubernetes HPA auto-scaling, microservices, and message broker decoupling — where is the actual return on that code? Does our product truly have that many paying users? Is it appropriate to hand a critical system over to an employee of a marginal third-party vendor?
Back to that interview: I didn’t bother wasting my time with them. I suggested they run a Weibo lottery to solve the flash sale problem, then hit Command+Q to end the entire remote session.
Scientific Entropy Reduction Makes Everyone’s Life Easier
Looking back at the world after World War II, we rebuilt towering structures from ruins. Information technology has not yet reached a hundred years, and already the final horn is sounding. If this industry is destined to gradually fade with the rise of artificial intelligence, then use less C++ (avoid sudden death), use more GC languages, and serve as the final QA for AI coding.
That way you can still see a sky that hasn’t faded when you leave work each day — isn’t that a good thing?
n<n-1
私はかつて情報技術の第一逆説を提唱した:情報技術は反人間的な技術である。パブリッククラウドの黄昏という記事で、私はIT業界のエントロピー増大の法則と「ゼロ号規則」——限界利益ゼロのコードリファクタリングは誰もやりたがらない——をまとめた。
今日、私はゼロ号規則を否定し、新たな「情報技術の第二法則」を提唱する——ポストモダンプログラミングにおいて、人間の使命はコードの時系列複雑度を低下させること(n<n-1)である。
レガシーコードが存在する合理性とリファクタリングの必要性
ゲームのAndroid APKを逆コンパイルしたことがあれば、現在のバージョンとは無関係な大量の冗長な美術リソースが含まれていることに気づくだろう。それらは歴史的に受け継がれたガベージコードだ。
ゼロ号規則の存在により、誰もこれらの美術リソースをリファクタリングしたり削除したりしたがらない。これは「王者栄耀(Honor of Kings)」のインストールパッケージが膨れ上がり続けた理由を説明する。最終的に「過去のアイテムの整理」と「モジュール式オンデマンドリソースダウンロード」という解決策が提案されたが、アップデート後に「ちまき」スキンがボットのようなアイコンの山に変わったと批判する人もいた。

なぜこうなるのか?ゲーム理論の基本的な命題に行き着く:局所最適は必ずしも大域最適ではない。ゲーム開発者にとって、新しい収益を生み出すには新しい物語を構築しなければならない。歴史的技術負債の解消はゲームの財務には反映されない。
しかしゲームユーザーと運営会社にとって、膨張するインストールパッケージはCDNのトラフィックコストを押し上げ、ガベージコードの蓄積はユーザーがゲームをダウンロードして起動するのに必要な時間を延ばし、操作のラグを引き起こす可能性すらある。
エントロピー増大の法則でソフトウェア開発プロセスを評価するなら、コードの「ゴミ山」は必然であり、ある意味ではソフトウェアエンジニアによる「防御的プログラミング」の一形態だと気づくだろう。
防御的プログラミングか過剰設計か?
政治経済学の観点から見れば、ソフトウェアエンジニアは本質的に生産手段を持たない「出稼ぎ労働者」だ。会社に入社した瞬間から、考えることや書くことはすべて会社の「デジタル資産」になる。これは米ドラマ『シリコンバレー』にも描かれている:RichardはHooliで働きながら、個人の時間(一部は会社のパソコンを使ってテスト)を使って革命的なロスレスデータ圧縮アルゴリズムを開発し、それを基にPied Piperを創立した。
Pied Piperが頭角を現し始めると、Hooli(Gavin Belson率いる)はシーズン2でPied Piperを正式に提訴し、Richardが同社の知的財産(著作権)を「盗んだ」と訴えた。RichardとHooliの雇用契約(発明譲渡条項を含む)に基づき、在職中に開発したすべてのコードと関連技術はHooliの所有物だと主張した。

会社と対立するのは得策ではない。解雇リスクを避けるため、ソフトウェアエンジニアは文書を書かないだけでなく、デザインパターンの乱用、リフレクションによる暗黙的なメソッド呼び出し、過剰設計なども常套手段だ。
採用担当者が「シングルマシン高並行」や「フラッシュセール」の問題を私に聞くのは、単に給与を下げるためだと時々本当に理解できない。最も極端だったのは「数百万人が同時オンライン」というような馬鹿げた質問だった——そのポジションの給与を見てみると……。
AIの助けがあれば、これらのシナリオに対応するワークフローを設計することは当然できる。問題は、Redisの分散ロック、Redisクラスター、Kubernetes HPAの自動スケーリング、マイクロサービス、メッセージブローカーのデカップリングを使った後、コードの実際のリターンはどこにあるのかということだ。私たちの製品に本当にそれほど多くの有料ユーザーはいるのか?重要なシステムを周辺的な外部ベンダーの社員に任せることは適切なのか?
あの面接に戻ると、最終的に彼らと時間を無駄にしなかった。微博でくじ引き抽選を行ってフラッシュセール問題を解決するよう提案し、それからCommand+Qでリモートセッション全体を終了した。
科学的なエントロピー削減で皆が楽になる
第二次世界大戦後の世界を振り返れば、廃墟の上から新しい高層ビルを再建した。情報技術はまだ百年も経っておらず、すでに終末のラッパが鳴り響いている。もしこの業界が人工知能の台頭とともに徐々に衰退していくとしたら、C++の使用を減らし(突然死を避けるため)、GC言語を多く使い、AIコーディングの最後のQAを担おう。
そうすれば毎日仕事終わりに、まだ色あせていない空を見ることができる——それでいいじゃないか?
n<n-1
Я однажды предложил первый парадокс информационных технологий: информационные технологии — это антигуманная технология. В статье Сумерки публичного облака я сформулировал закон возрастания энтропии в IT-отрасли и «Правило ноль» — никто не хочет делать рефакторинг кода с нулевой предельной выгодой.
Сегодня я хочу опровергнуть Правило ноль и предложить новый «Второй закон информационных технологий» — в постмодернистском программировании роль человека состоит в снижении временно́й последовательной сложности кода (n<n-1).
Обоснованность существования «горы мусора» и необходимость рефакторинга
Если вы когда-либо декомпилировали Android APK игры, то обнаружили бы огромное количество избыточных художественных ресурсов, не имеющих никакого отношения к текущей версии. Это исторически унаследованный мусорный код.
Из-за Правила ноль ни один программист не хочет рефакторить или удалять эти художественные ресурсы. Это объясняет, почему установочный пакет Honor of Kings постоянно разрастался, пока наконец не были предложены решения в виде «очистки исторических предметов» и «модульной загрузки ресурсов по запросу» — хотя некоторые игроки жаловались, что после обновления скин «цзунцзы» превратился в груду иконок, похожих на ботов.

Почему так происходит? Это связано с фундаментальным тезисом теории игр: локальный оптимум не обязательно является глобальным оптимумом. Для разработчиков игр новые нарративы необходимы для получения нового дохода. Устранение исторического технического долга никак не отражается в финансовых показателях игры.
Однако для пользователей и операторов разрастающийся установочный пакет увеличивает затраты на CDN-трафик, а накопление мусорного кода удлиняет время загрузки и запуска игры — и может даже привести к зависаниям.
Если оценивать процесс разработки программного обеспечения через призму закона возрастания энтропии, становится ясно, что «гора мусора» в коде неизбежна — в определённой мере это «защитное программирование» со стороны разработчиков.
Защитное программирование или чрезмерное проектирование?
С точки зрения политической экономии, разработчики программного обеспечения по-прежнему остаются «приезжими рабочими», не владеющими средствами производства. С момента прихода в компанию всё, о чём они думают и что пишут, становится «цифровым активом» компании. Это нашло отражение в американском сериале «Кремниевая долина»: работая в Hooli, Ричард в свободное время (хотя частично использовал рабочий компьютер для тестирования) разработал революционный алгоритм сжатия данных без потерь и основал на его базе компанию Pied Piper.
Когда Pied Piper начала набирать обороты, Hooli (во главе с Гэвином Белсоном) во втором сезоне официально подала на Pied Piper в суд, обвинив Ричарда в «краже» интеллектуальной собственности Hooli (нарушении авторских прав), утверждая, что согласно трудовому договору Ричарда с Hooli (включавшему пункт о передаче изобретений), весь написанный им код и связанные технологии принадлежат Hooli.

Противостоять компании неразумно. Поэтому, чтобы снизить риск увольнения, разработчики прибегают не только к отказу от документирования — злоупотребление шаблонами проектирования, неявный вызов методов через рефлексию и чрезмерное проектирование тоже относятся к распространённым тактикам.
Иногда я действительно не понимаю: работодатели спрашивают меня о «высоком параллелизме на одной машине» и задачах «flash sale» лишь для того, чтобы сбить зарплату. Самое абсурдное — вопрос о «миллионах пользователей одновременно онлайн» — я посмотрел на предлагаемую зарплату для этой вакансии.
При помощи ИИ я, конечно, могу разработать процесс для этих сценариев. Вопрос в другом: после применения распределённых блокировок Redis, кластеров Redis, автомасштабирования Kubernetes HPA, микросервисов и развязки через брокер сообщений — в чём реальная отдача от такого кода? Действительно ли у нашего продукта столько платящих пользователей? Уместно ли доверять важную систему сотруднику сторонней периферийной компании?
Возвращаясь к тому собеседованию: я не стал тратить с ними время. Предложил им провести лотерею в Weibo для решения проблемы flash sale, а затем нажал Command+Q и завершил весь удалённый сеанс.
Научное снижение энтропии облегчает жизнь всем
Оглядываясь на мир после Второй мировой войны: мы возвели новые небоскрёбы из руин. Информационным технологиям ещё нет ста лет, а финальный горн уже трубит. Если эта отрасль всё же будет постепенно угасать с развитием искусственного интеллекта — используйте меньше C++ (избегайте внезапной смерти), больше GC-языков и станьте последним QA для AI-кодинга.
Так вы сможете каждый вечер, возвращаясь домой, видеть небо, которое ещё не потускнело — разве это плохо?
n<n-1
💬 讨论 / Discussion
对这篇文章有想法?欢迎在 GitHub 上发起讨论。
Have thoughts on this post? Start a discussion on GitHub.