每一个程序员都记得自己第一次让电脑屏幕上出现“Hello, World”的那一刻。那一瞬间,仿佛真的向这个世界打了一声招呼——从此,你成了一名可以指挥计算机的人。
一段偶然的传奇:Hello World的诞生
Hello World的故事要从半个多世纪前的贝尔实验室说起。1972年,贝尔实验室的成员布莱恩·柯林汉正在撰写一份内部技术文件《A Tutorial Introduction to the Language B》,用于向同事们介绍B语言的使用方法。为了让读者直观地理解外部变量的用法,他写下了一个示例程序——程序会在终端打印出“hello, world”。
为什么是B语言?因为当时C语言还没有正式诞生,B语言是贝尔实验室的主力编程语言。而那个最初的“hello, world”长什么样呢?是这样的:
text
main( ) {
extern a, b, c;
putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';
代码中的字符串被拆成了三个部分——a存着“hell”,b存着“o, w”,c存着“orld”。之所以这么麻烦,是因为当年的B语言里每个字符常量最多只能容纳四个ASCII字符。在今天看来这简直不可思议,但正是这种限制催生了这个流传至今的经典字符串。
1974年,柯林汉又在另一份贝尔实验室内部备忘录《Programming in C: A Tutorial》中,用C语言重新编写了Hello World程序。此时的版本已经接近我们今天熟悉的样子:
text
printf("hello, world\n");
一本书让Hello World传遍全球
真正让Hello World走向世界的,是1978年出版的那本经典之作——《The C Programming Language》。这本书由柯林汉和C语言之父丹尼斯·里奇合著,后来被程序员们亲切地称为“K&R”(两人姓氏的首字母)。
在这本书的第一章,作者就用Hello World作为第一个示例程序。这个选择并非偶然。当时的计算机对于普通人来说还是一种极其陌生甚至令人畏惧的存在——主机时代的计算机体积庞大到占满一整间屋子,运行缓慢,还需要全职的科学家来维护。而Hello World这样的程序恰好展示了计算机最温情的一面:它不过是在屏幕上打出一句简单的问候。
这本教程书后来成为无数程序员的启蒙读物,被翻译成多种语言在全球发行。柯林汉和里奇当年在贝尔实验室做这个研究项目时,恐怕从未想到C语言和这本教程会在几十年后如此流行。
那么,“Hello World”这个名字到底从哪来的?
关于这个问题,连柯林汉本人的记忆都有些模糊了。当《福布斯印度》杂志采访他时,他说自己好像看过一幅漫画,画的是鸡蛋和小鸡的故事,小鸡说了一句“Hello World”。这个回答带着几分随性和幽默,反倒让这个传奇更有温度——它不是什么深思熟虑的宏大设计,只是一个偶然的、可爱的选择。
最初的版本其实用的是全小写字母、带逗号、逗号后空一格、没有感叹号。今天常见的“Hello, World!”带感叹号和大写的写法,是在1974年的C语言教程中才逐步标准化的。不过真正完全遵循最初格式的程序反而很少见。
为什么每个程序员都要写Hello World?
如今,无论是学C语言、Java、Python还是Go,几乎所有编程教程的第一课都是写一个Hello World程序。这背后的原因其实很实际:
首先,它是验证开发环境是否配置正确的最快方式。编译器安装好了吗?代码能编译通过吗?程序能正常运行吗?一个最简单的Hello World就能回答所有这些问题。
其次,它展示了这门语言最基本的结构——如何定义程序入口、如何调用函数、如何输出内容。每一个Hello World程序都是通往一门新语言的第一扇窗。
更重要的是,它承载着一种仪式感。几乎每一个程序员,无论入行早晚,当第一次看到“Hello World”出现在屏幕上时,都会有一种难以言说的激动。那是人与机器第一次成功对话的瞬间。
Hello World的万花筒:不同语言的写法
随着编程语言的不断涌现,Hello World也演化出了千姿百态的写法。我们今天熟悉的C语言版本是这样的:
c
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}
python
print("Hello, World!")
java
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!!"); } }
go
package main
import "fmt"
func main() {
fmt.println("Hello, world!")
}
更有趣的是那些诞生更早的语言。1957年的Fortran是这样写的:
fortran
PROGRAM Hello WRITE (*,*) 'Hello, World!' STOP END
lisp
(write-line "Hello, World!")
从汇编语言到现代高级语言,每一种语言的Hello World都像是那个时代编程思想的一个缩影。有程序员甚至提出了一种叫TTHW(Time to Hello World)的指标,用来衡量从零开始写一个Hello World程序需要多长时间。
一个程序的文化符号
今天的Hello World早已超越了代码本身。它成了一代代程序员共同的记忆和默契——无论你用的是哪种语言,无论你在世界的哪个角落,“Hello World”都是你编程生涯的起点。它像一个暗号,只要说出这两个词,所有程序员都会心一笑。
正如有人所说,Hello World是“展示各种语言特性的最好的例子,是通向该语言的一个窗口”。在过去的半个多世纪里,这个微不足道的程序见证了整个计算机行业的崛起,也见证了无数人从零开始成长为程序员的全过程。
半个多世纪前,一个贝尔实验室的研究员随手写下的几行代码,不经意间成了一个行业的开场白。每次你在屏幕上敲下“Hello World”,都是在延续一段跨越五十年的对话——一段关于创造、学习和分享的对话。而你,正是这场对话的最新参与者。
