foo, bar, baz 是从哪来的?

在软件开发和计算机科学中,foo、bar 以及 baz 被称为占位符变量(Metasyntactic Variables)。它们就像数学里的 x, y, z,或者法律文书里的“张三、李四”,专门用来在代码示例、文档或伪代码中代表“这里有一个名字/变量,但具体是什么不重要”。

关于它们的来源,计算机历史学家和词源学界普遍认为这是一场二战时期的军方俚语与麻省理工学院(MIT)早期极客文化的融合演变。

源头一:二战美军俚语 FUBAR(主要来源)

bar 最核心的来源是二战期间在美国军人中极度流行的军旅俚语 FUBAR。

  • FUBAR 是一个首字母缩写词,代表:

Fucked Up Beyond All Recognition(或者 Fouled Up Beyond All Recognition) (意为:“彻底烂透了”、“糟到完全认不出来了”)

  • 二战期间,士兵们经常用这个词来形容战况极其惨烈或混乱不堪的局面。
  • 战后,随着退伍军人进入大学和科技领域,这个词传入了早期计算机科学界。程序员们将它改写为更贴合英语拼写习惯的 Foo 和 Bar 两个词。

源头二:20世纪30年代的漫画俚语 "Foo"

在 FUBAR 流行之前,“Foo” 这个无意义的音节已经在美式流行文化中存在了。

  • 1930 年代,漫画家比尔·霍尔曼(Bill Holman)创作了一部非常受欢迎的荒诞漫画《Smokey Stover》。
  • 漫画主人公(一个消防员)的口头禅就是各种带有“Foo”的废话,比如 “Where there's Smokey, there's foo.”,甚至画里的车牌、墙上的挂画上到处都写着“Foo”。
  • 这使得“Foo”在二战前就已经成为了美式英语里代表“无意义事物/胡话”的流行代词。

MIT 极客文化与黑客精神(正式引入计算机领域)

让 foo 和 bar 真正进入计算机历史的,是 1950–1960 年代 麻省理工学院(MIT)的模型铁路俱乐部(TMRC) 和 人工智能实验室(AI Lab)——这里也是现代“黑客文化”的发源地。

  • 模型铁路中的“紧急开关”: 在 TMRC 的铁路控制系统中,会员们安装了一些紧急切断电源的开关,这些开关被他们戏称为 "Foo Switches"。
  • MIT 704 计算机说明书: 在 1959 年 MIT 出版的《PDP-1 / TX-0 编程手册》及相关文档中,程序员们开始明确使用 foo、bar 和 baz 作为示例代码中的变量名。
  • 经典教材的固化: 随着 Unix 的兴起以及 ANSI C 标准文档、C/C++ 经典教材(如《C 程序设计语言》)大量使用 foo 和 bar 作示范,这两个词彻底成了全球程序员的通用语言。

完整的“占位符家族”列表

在实际开发和示例中,如果需要多个占位符,程序员们通常会按照以下固定顺序调用:

  1. foo(第一个出现的变量/函数)
  2. bar(第二个)
  3. baz(第三个,通常由 bar 演变而来)
  4. qux / quux(第四个)
  5. corge、grault、garply、waldo、fred、plugh、xyzzy、thud

总结

foo 和 bar 的诞生,本质上是 二战军人的黑话(FUBAR) 与 早期 MIT 极客的幽默感(Foo Switch) 碰撞出的火花。

对于程序员来说,用 foo 和 bar 就像是一种隐秘的文化握手:只要看到它们,你就知道“这里只是一个示范,重点看后面的逻辑就好”。

顿悟:代码内外的人间隐喻