绝大多数时候,我们写代码是为了"让东西跑起来"——压测、上线、修 bug、抢进度。代码是工具,是工程,是生产资料。但 Dylan Beattie 的这场 NDC 主题演讲《The Art of Code(代码的艺术)》却把镜头彻底调转:它不教你写更快的代码,也不比较哪个框架更好,而是带你去看代码作为一种创作媒介时,到底能被推到多极端、多荒诞、又多精妙的境地。
这场约 53 分钟的演讲之所以能在全球开发者社区疯传、累计数百万播放,不是因为它抖机灵,而是因为它触及了一个被我们日常忽略的真相:约束才是创造力的真正来源。当你只被允许用 8 个符号、或者用一幅画、甚至用一首摇滚歌词来"编程"时,你被迫重新审视一个最根本的问题——到底什么是"计算"?什么样的语言算语言?什么样的程序算程序?
无论你写了十年 C++ 还是刚学 Python 半年,这场演讲都会让你对"编程"二字产生一次认知重置。下面我把它的核心脉络拆给你看,并补充视频点到为止、但真正决定深度的那些计算理论基础。
| 项目 | 内容 |
|---|---|
| 视频标题 | The Art of Code(代码的艺术) |
| 频道 / 来源 | NDC Conferences,演讲者 Dylan Beattie |
| 时长 | 约 53 分钟(完整 keynote) |
| 播放量 | 数百万(超 300 万量级,以页面实时为准) |
| 核心主题 | 代码即创作媒介:esoteric 语言、quine 自指、regex 边界与"约束催生创造" |
| 适合人群 | 任何层级程序员;想理解"计算本质"与语言设计哲学的人 |
说明:本场为开发者大会主题演讲,非"教程"类视频。其价值在于思想密度而非操作步骤。下面带【延伸】标记的部分,是我基于演讲主题补充的计算理论背景,而非视频原话。
演讲的开场极具欺骗性——你听到一段音乐、看到一幅画面,然后 Dylan 揭示:这其实是代码生成的。这一手"障眼法"定下了整场的基调:代码的产物不必是表格、API 或网页,它可以是声音、图像、诗歌。
这个开场不是炫技,它在传递一个核心命题:代码本质上是一种符号操纵系统,而"操纵符号"这件事,并不天然绑定某种语法或某种职业用途。当我们说"写程序"时,我们其实在说"用一套受限的符号规则,去描述一个计算过程"。理解了这一点,后面那些"奇葩语言"就不再是笑话,而是这个命题的极端实验。这也是为什么 Dylan 能从一个"展示作品"顺滑地滑入对语言本体的追问——因为它们共享同一个底层定义。
演讲用 Brainfuck 拉开 esolang(esoteric programming language,奇技淫巧式编程语言)的序幕。它由 Urban Müller 在 1993 年创造,目标是写出尽可能小的编译器。整套语言只有 8 个字符:+ - > < . , [ ]。一段打印 "Hello World" 的 Brainfuck 看起来像乱码:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++>.
很多人第一反应是"这能算编程语言吗?"【延伸】答案藏在图灵完备性(Turing completeness)里。Brainfuck 的语义其实是一台图灵机:一卷无限纸带(数组)、一个读写头(指针)、加/减/读/写/跳转。这 8 个操作恰好能模拟图灵机的全部行为。而根据丘奇-图灵论题(Church-Turing thesis),任何能被图灵机计算的,就是"可计算"的。所以 Brainfuck 与 Python、C、Java 在计算能力上完全等价——差别只在"写起来多痛苦",不在"能不能算"。
这是个反直觉但极其重要的结论:语言的"强弱"是人体工学问题,不是能力问题。一个被设计成折磨人的语言,和被设计成顺手的语言,在计算的疆域里没有边界差异。Dylan 借此悄悄埋下了全场的哲学主线。
如果说 Brainfuck 是"字符的极端精简",那 Piet 就是"维度的彻底转向"——它的源代码是一张图片。Piet 由 David Morgan-Mar 设计,程序的指令隐藏在图像的色彩变化里。
【延伸】它的运行机制极其精巧:图像被切成一个个色块(codel),程序维护一个"方向指针(DP)"和一个"色相选择器(CC)"。指针沿某方向走到色块边缘,下一个色块相对当前色块的色相(hue)和明度(lightness)的差值决定执行什么操作。Piet 把颜色排成"6 色相 × 3 明度 = 18 种颜色"加黑白构成的环。于是,一张抽象画可能同时是一个能跑的程序——把蒙德里安的格子画挂上去,它可能正在算斐波那契。
Piet 的震撼在于它把"语法"从线性文本彻底解放:只要你能定义一套稳定的、可被无歧义解释的符号规则,它就可以是编程语言。这也是 Dylan 想让观众体会的——我们对"代码长什么样"的想象,被日常 IDE 锁死了。
整场最具戏剧性的是 Malbolge。它以《神曲》中地狱第八圈 Malebolge 命名,由 Ben Olmstead 在 1998 年发布,唯一的设计目标就是让编程尽可能痛苦。它用三进制(base-3,不是二进制)、带"疯狂操作(crazy operation)"、而且每条指令执行后程序会自我修改,让"读懂下一行"都成为奢望。
最绝的是它的结局【延伸】:Malbolge 的第一个能打印 "Hello World" 的程序,不是人手写出来的,而是用搜索算法(beam search 一类)"算"出来的。也就是说,一个"语言"被设计得人类根本无法直接驾驭,最后只能让计算机去暴力探索出一段可行源码。这几乎是对"编程语言"概念本身的黑色幽默:当一门语言难到连它的创造者都不愿意手写,它还算"为人服务"的工具吗?还是已经退化成一个纯粹的数学谜题?Dylan 把这个矛盾摆在台面上,让观众自己体会其中的荒诞与魅力。
不是所有 esolang 都追求"难",有的追求"美"。Shakespeare Programming Language(SPL) 让程序读起来像莎士比亚戏剧:变量是戏剧角色(Romeo、Juliet),赋值用赞美或辱骂("You are as handsome as the sum of..."),控制流用对话推进。而 LOLCODE 则用 lolcat 网络迷因语法(HAI WORLD、KTHXBYE),把代码写成满屏猫语。
最巧的是 Rockstar——这本身就是演讲者 Dylan Beattie 的作品。它诞生的缘由是一则开发者圈的经典吐槽:招聘广告天天要"rockstar developer(摇滚明星级程序员)"。Dylan 一怒之下做了一门语言,让源代码本身就是一首合法的 80 年代摇滚歌词。变量用诗意的短语命名,输出用 shout、whisper,循环用 take it to the top。于是"招个 rockstar"从一句虚浮的职位要求,变成了一段真正能在解释器里跑起来的歌词。这层自我指涉的幽默,是整场演讲最圈粉的设计之一——它把"语言设计"这件事从高冷的学术话题,拉回了每个程序员都能会心一笑的生活现场。
讲到自指,Dylan 引出 quine——一种输出自身完整源代码的程序。这个名字来自哲学家威拉德·蒯因(W.V.O. Quine),他在哲学里研究"自指句子"。一段最朴素的 quine 在结构上是:用一份"字符串形式的自身"来打印出它自己,再把自己也拼回去。
【延伸】quine 之所以让数学家和程序员都着迷,是因为它直指计算理论里最深的自指定理:克莱尼递归定理(Kleene's recursion theorem)保证,对任意计算过程,都存在一个"知道自己在做什么"的程序等价物;它和 不动点组合子(fixed-point combinator,Y 组合子是其著名实例)、以及哥德尔不完备定理里的自指构造同源。换句话说,quine 不是程序员的小聪明,而是"自指"这个深刻概念在代码里的具象。Dylan 还会顺带展示 Tupper 自指公式(Tupper's self-referential formula)——一个数学公式,把它画在坐标平面的特定区域,画出来的图形竟然就是这个公式本身。数学能"画出自己",代码能"打印自己",这背后是同一个不动点原理。这部分是整场最烧脑也最值得反复回味的段落。
最后,Dylan 用正则表达式(regular expression)收束。他抛出一个经典挑战:"能用正则判断一个字符串是不是回文吗?"很多人会拼命尝试,结果发现怎么写都不对。【延伸】这并非功力不够,而是理论上的不可能:在乔姆斯基层级(Chomsky hierarchy)里,回文属于"上下文无关语言(context-free)",而真正的正则表达式只能描述"正则语言(regular)"。正则语言无法进行任意深度的对称匹配,所以纯正则永远无法识别任意长度的回文——除非你动用 PCRE 的递归扩展,那其实已经越界,不再是"正则"了。
这个例子完美呼应了 Brainfuck 的论证,却走向反方向:语言有能力的"上限",也有能力的"下限"。正则是被刻意限制的表达能力子集,这种限制换来的是线性时间、可预测、可流式处理。Dylan 借此收尾——每一种语言的设计,都是在"表达能力"与"可控性"之间的一次权衡取舍。这正是全场的点睛:理解约束,才能真正理解语言。
graph TD
A["《The Art of Code》核心命题<br/>代码 = 受限符号系统;约束催生创造"] --> B["语言能力的两大参照系"]
A --> C["自指与计算的深层同构"]
B --> B1["下限:表达能力的子集<br/>Regex = 正则语言<br/>识别不了任意回文(上下文无关)"]
B --> B2["上限:图灵完备<br/>Brainfuck ≡ Python(计算等价)<br/>丘奇-图灵论题"]
A --> D["Esolang:把约束推到极端"]
D --> D1["字符极简:Brainfuck(8 符号 = 图灵机)"]
D --> D2["维度反转:Piet(源码=图片/色相明度环)"]
D --> D3["难度上限:Malbolge(三进制+自修改,程序靠搜索算法算出)"]
D --> D4["文学化:Shakespeare / LOLCODE / Rockstar"]
C --> C1["Quine:打印自身源码<br/>克莱尼递归定理 / Y 组合子"]
C --> C2["Tupper 自指公式:画出自己的图形<br/>不动点原理"]
C --> C3["哥德尔不完备:自指的数学源头"]
B2 -.等价于.-> D3
C1 -.同源.-> C3
第一,重构你对"语言能力"的判断标准。 以后别再问"某语言强不强",而要问"它图灵完备吗?它处在乔姆斯基层级的哪一层?"一个图灵完备的语言,理论上什么都能算;一个只能写正则的引擎,再快也跨不过回文这道坎。这种"能力分层"的视角,能让你在面对新语言、新 DSL、新配置系统(比如正则、SQL、各种 YAML 模板)时,立刻判断它的真实边界,而不是被营销话术带跑。
第二,把"约束"当成设计工具,而不是麻烦。 esolang 的全部魅力都来自约束。在日常工程里,这一点同样有效:当你给系统加约束(限定输入格式、限定内存、限定单线程、限定纯函数),你往往能换来确定性、可测试性和可推理性。Lambda 演算、SQL 的声明式、函数式的不可变性,本质上都是"用约束换性质"的成功案例。下次遇到设计难题,不妨反向问自己:"如果我只允许 X,会怎样?"——很多优雅方案就藏在约束里。
第三,从自指里获得"元编程"的直觉。 理解 quine 与不动点,能让你更自然地驾驭编译器、宏(macro)、代码生成、元编程这些"写能写代码的代码"的场景。Lisp 的同象性(homoiconicity,代码即数据)、React 的 render-as-function、模板引擎,背后都有自指的影子。把这套思维内化,你写抽象的层次会明显更高。
第四,把"读源码"也当成审美训练。 哪怕不写 esolang,也可以偶尔读一段 Brainfuck、写一个 quine、用 Rockstar 写段歌词发到朋友圈。这些"无用之事"会在潜移默化里重塑你对语法的敏感度——你会发现,原来"变量命名""流程控制""输入输出"这些被你熟视无睹的零件,每一条都是一种被精心设计的人体工学约定。
当一门语言只剩下 8 个符号、或者干脆变成一幅画时,它反而逼你看清了一件事:编程的本质从来不是某种语法,而是"用受限符号描述计算"这件事本身——约束不是枷锁,而是创造的起点。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
youtube-transcript skill 在网络条件允许时补取真实字幕,做逐段精确校对[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
