有人写了一篇文章《论 UNIX 哲学的倒掉》,我居然看完了。我曾经也是 UNIX 哲学的坚定信徒,当然现在我是什么都不会绝对信从了。
信仰这东西有很多奇妙的心理现象,比如斯德哥尔摩综合征,也就是你被人绑架时间长了之后,你会对绑匪逐渐产生同情心,进而变成帮助他、卫护他。最典型的例子应该是我经常吐槽的 LaTeX。我们投入大量的精力和时间去学习 LaTeX,最后就会变成骑虎难下,也就是中国人的一句口头禅和杀手锏:来都来了。学都学了,PDF 文档也这么漂亮,于是我们就要卫护任何 LaTeX 的缺点,那些惨无人道的规则都能让人挖出理由来解释,并且还要引以为豪。等我们用 Markdown 去解救 LaTeX 人质时,人质会紧紧抓着绑匪的手不肯离开,反过来还要攻击解救人员:你们这么弱,凭什么抢走我们的 LaTeX。
命令行则是另一个典型的例子。学会用命令行操纵对象的人很容易陷入命令行万能的幻觉中,其实有时候点两下鼠标更方便,但因为学习命令行比点鼠标更痛苦,痛苦的时间一长,就回不了头了,心想来都来了,再奇葩的命令行规则我也要去理解它,理解之后我的智力水平就会上一个新的台阶。然而机智的 XKCD 作者早已看穿了这一切:

R 社区有一个著名人物,某次我跟他说:教新手创建 R 包不能从 R CMD build 教起,有些人连怎么打开命令行窗口都不知道。然而他素来有点瞧不起我,自然也不愿意采纳我的意见,讲课的时候一意孤行给学生先讲 R CMD build,于是我在下面眼见他起高楼,还没见他宴宾客,就眼见他楼塌了。这便是 RStudio 菜单 File -> New Project -> New Directory -> R Package 和按钮 Build & Reload 的意义。命令行是有能力统治世界,但有时候真没那必要。
其实文章说的是 UNIX 的一些具体实现上的(荒谬)问题,并不是抨击哲学本身;UNIX 哲学本身还是很有借鉴意义的,只是到了实现层面,人就要面临各种取舍,更糟糕的是多人合作时,各有各的脾气和偏好,于是一致性就会成问题。有时候为了少数几个人的习惯,更多人就要牺牲,越多人牺牲,就会让那些烂规则变成越来越难改变的规则,最后变成所有人集体牺牲。Makefile 特特么滴到底为什么必须用 Tab 字符……Shell 脚本语言几乎比任何一门正常的程序语言都诡异,有时候我实在没耐心去看帮助文档,直接写个 R 脚本代替 Shell 脚本了事,尽管这不是 R 的强项。
赞赏
作为一名没有固定工作的自由职业者,我非常感谢您通过捐赠的方式来支持我的写作和开源软件开发。当然,捐赠纯属自愿。无论金额多少,都是一片诚挚的心意。支付方式如下:
| 微信 | ← 奋力支开它俩 → | 支付宝 |
|---|---|---|
![]() |
其它爱心通道 ↓ Venmo: @yihui_xie Zelle: xie@yihui.name PayPal: xie@yihui.name |
![]() |
若使用 Venmo/Zelle/Paypal,请添加备注“gift”或“donation”,以免捐赠被视为我的可税收入。若使用 Paypal,支付类型请选 Family and Friends,而不要选 Goods and Services。
在不影响生活的前提下,我会将收到的捐赠以尽量大的比例回馈给开源社区和慈善机构。作为参考,2024-25 年间我共收到约三万美元捐赠,完税后我转手捐出了一万五千美元。

