2008 年 2 月 18 日,亲历过 8 位机黄金时代的老派游戏程序员 James Hague(网页抓取时间戳常误标为 2016 年博客静态重生成日期)开出了一份反常规书单。他刻意绕开《SICP》《PAIP》这类学院派圣经,挑出了 5 本 出版于 1984 年至 2000 年间的冷门奇书。在重量级面向对象和速成教程统治书架的年代,这份书单把聚光灯打向了 Forth、J 语言和底层汇编——这批书在商业出版史上几乎全军覆没,连具体指令和算法都带着时代硬伤,却留住了现代软件工程最缺的 极简问题拆解 能力。

先把这五本书的底细、硬伤与真实出版宿命摊开:

  • 《Zen of Assembly Language》(Michael Abrash,1990):专讲 8088/8086 优化,却拖到 80486 登上高端台式机时才面世;因出版商 Scott, Foresman 砍掉计算机图书线迅速绝版,预告的第二卷《The Flexible Mind》胎死腹中,靠随书光盘与社区电子化才活下来。
  • 《Thinking Forth》(Leo Brodie,1984):早于面向对象、设计模式与 Martin Fowler 流行年代,穿插 Forth 之父 Chuck Moore 的洞见,用源自 Forth 社区的 factor 一词讲透问题拆解与去冗余。
  • 《Scientific FORTH》(Julian Noble,1992):全书 312 页附程序磁盘,物理学家用 Forth 硬啃矩阵计算并手写中缀表达式转换器;1996 年首印售罄后再无新版,作者于 2007 年离世。
  • 《Fractals, Visualization, and J》(Clifford Reiter,首版 1995):Hague 标注的 2000 年实为 Jsoftware 第二版,数学家用小众的 J 语言处理图像算法、Hurst 指数与太阳黑子分析;后退守自出版平台 Lulu,在 2007 年出第三版(适配 J6.02),2016—2017 年分上下册出第四版(适配 JQT 8.04 及以上),获图灵奖得主 Kenneth Iverson 盛赞。
  • 《Programmers at Work》(Susan Lammers,1986):收录 19 篇深度访谈,聚焦无计算机学位的创作者如何靠直觉写软件,直接启发 Hague 在 1997 年编出经典游戏口述史《Halcyon Days》,两书后来合装进 Dr. Dobb's Journal 光盘卖了十年。
五本奇书的时间坐标与出版宿命 1984 Thinking Forth 极简拆解鼻祖 1986 Programmers at Work 19篇黑客访谈 1990 汇编之禅 砍线绝版断卷 1992 Scientific Forth 首印售罄绝响 1995-2017 分形与 J 语言 退守Lulu自出版 商业出版筛选规律:越是领域专家用小众工具解真问题,越难活在主流畅销货架上

具体代码早过时了,为什么老手还在读

如果把这些旧书当成实战手册照抄,今天多半要踩坑。汇编权威 Randall Hyde 评价 Abrash 那本书是第一本真正伟大的 80x86 优化著作,但也直接点破局限——书里的微观周期抠算几乎锁死在早期处理器上,搬到 80386 及之后的流水线架构便大量失效,看 386、486 和 Pentium 还得找 Abrash 1994 年重写的《Zen of Code Optimization》。

左侧整齐拆解模块与右侧杂乱机器怪物的漫画对比(示意图)
左侧整齐拆解模块与右侧杂乱机器怪物的漫画对比(示意图)

物理学家 Noble 的书同样经不起现代数值分析的显微镜挑刺。德国评论者 Peter Tröster 1995 年在 Forth 期刊《Vierte Dimension》发文指出,书中求根讨论漏掉了基础的牛顿法,递归最大公约数(GCD)示例开销过大,甚至没严格限定某条 x87 浮点指令的输入范围。

我更在意的是,为什么 Hague 这种老手依然把它们奉为神作?答案藏在 约束条件 里。Hague 整个 1980 年代都在主频 低于 2 MHz 的 8 位 6502 机器上写游戏,受制于行编辑器,也受制于当年玩家必须照着电脑杂志一页页手敲 DATA 0AFF6CA9... 十六进制代码的残酷现实,他被迫把代码写得极小。Abrash 在 8086 上的拆解之所以让他觉得像专门写给自己看的,是因为两人都练出了同一种底层直觉——先看穿机器与问题的物理边界,再动手写指令。

这种直觉在 1984 年的《Thinking Forth》里被提炼到了顶峰。庄子讲庖丁解牛,依乎天理,批大郤,导大窾;Brodie 讲的 factor(拆解)也是同一门手艺。在没有类继承、没有二十三种设计模式黑话的年代,Forth 程序员靠不断把问题切碎成极短、极纯粹的词(word)来消除冗余。今天软件工程界言必称的重构(refactor),源头正是 Forth 社区的 factor。区别在于,当年做 factor 是为了从根上不写出臃肿代码,如今做 refactor 往往是在屎山成型后做昂贵的外科清创。

当年的拆解是为了不写废话,如今的重构多半在给废话搬家。

商业出版容不下真问题,硅谷神话也救不了烂软件

Hague 在文末感叹,市面上充斥着每月速成一门新语言的快餐教程,他希望多出一些像 Noble 和 Reiter 那样——由深耕某个领域的专家执笔、用高表达力语言直接干掉硬核真问题的书。愿望很美好,但他没算出版商的经济账。

快餐教程霸占主流货架,硬核奇书只能退守按需自出版(示意图)
快餐教程霸占主流货架,硬核奇书只能退守按需自出版(示意图)

把这几本书的发行轨迹拼在一起,看到的是一条清晰的商业死谷。快餐语言教程卖的是入门焦虑,受众基数以十万计,玩具代码越浅显越好卖;而一位物理学家用逆波兰表达式的 Forth 算矩阵,或者一位数学家用符号极其浓缩的 J 语言算太阳黑子,天然把九成九的读者挡在门外。结果就是 Abrash 撞上出版社裁撤产线,Noble 首印卖完成了绝响,Reiter 坚持更新二十多年,最后只能退守 Lulu 做按需自出版。主流货架上全是玩具教程,恰恰是商业筛选最诚实的结果。

两类技术写作的路线与商业终局对照 主流月度语言速成书 作者画像:职业技术写手为主 代码案例:迎合语法的玩具题 核心卖点:降低新手入门焦虑 终局:商业长销,随版本快速淘汰 领域专家真问题奇书 作者画像:物理与数学等深耕学者 代码案例:矩阵转换与太阳黑子算法 核心卖点:高密度小语言直击本质 终局:绝版或自出版,拆解思想长存

同样需要祛魅的,还有《Programmers at Work》代表的个人英雄主义叙事。《纽约时报》当年把它对程序员的启蒙意义比作《巴黎评论》作家访谈对小说家的意义——书里 Jaron Lanier 聊 Commodore 64 上的迷幻游戏《Moon Dust》,Bill Budge 畅想造一个能造建造工具的母体工具,一群没有计算机科学文凭、不搞形式化证明的怪才凭直觉写出了早期个人电脑的灵魂。Hague 深受震撼,不仅照着这个模子编出《Halcyon Days》,还专门找来对《Hackers》一书描写不满的 John Harris 补齐口述历史。

但我不太买账把这套黄金时代滤镜直接套进现代软件工业。早在 1987 年 11 月,英国《Personal Computer World》书评人 Alan Douglas 就泼过冷水,指出 Lammers 的访谈名单过度偏向美国视角,透着一股排他的硅谷小圈子气息。更扎心的对撞发生在 2004 年 3 月,《Salon》撰稿人 Scott Rosenberg 追踪了当年这批受访大神的重聚,写下那篇著名的《Why software still stinks》(为什么软件依然这么烂)——靠单枪匹马的灵光乍现能写出惊艳的 C64 小游戏,却兜不住几百人协作的现代复杂系统。

  • 风险.把早期独立黑客的直觉创作神话当成万能解药,在大型工程里只会演化成没人敢动的私有黑盒代码;个人灵气解决不了大规模协作的接口腐化。

今天回头翻这五本老黄历,最直接的受影响者其实是被大模型包围的一线工程师。AI 写代码把语法门槛和样板代码成本砸到了地板上,就像当年高级语言和廉价内存解放了 6502 程序员一样。可算力与代码产量越廉价,系统失控的速度就越快。接下来值得紧盯的分水岭只有一个:当生成一万行平庸代码只需要十秒钟时,团队里还有没有人具备 Brodie 在 1984 年强调的那种 factor 功底,敢于把一万行废话精准拆解、压缩回最干净的 一百行真问题模型。