我们常常开玩笑,说如何评价一个人的编程水平,于是就问他/她: 请问你能用几种语言来编写“Hello World”。这个问题能考验一个人学过几种编程语言,优秀的程序员总是不止会一种编程语言。所以,这一篇文章我们就从 Hello World 说起。
先有 B 在有 C
几乎每一个程序员的程序生涯都是从在屏幕上输出一串“Hello World”开始的,但又一个人一定不是,这个人是 Ken Thompson。大部分人和我一样一定不认识他,他现在被誉为“ Go 语言之父 ”,他创造了 Go 语言。其实它还是 B 语言之父,C 语言之父 Dennis Ritchie 就是他的同时,在他的 B 语言的基础上创造了伟大的 C 语言。但是, B 语言因为缺乏完善的类型系统,退出了历史的舞台,进入了文献中。
我们先来看看 B 语言版本的 Hello World:
main() {
extrn a, b, c;
putchar(a); putchar(b); putchar(c);
putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';
从中你是不是看到了一些 C 语言中仍然在使用的字眼?比如说 main 、 extrn 、 putchar 。你还会发现,一个看上去简简单单的“Hello World”字符串必须要用三个全局变量来定义,因为每一个变量都要对其到 4 个字节。第 4 行中, putchar('!*n'); 是什么意思呢?换行。
由此,我们通过 Hello World 介绍了一门语言,叫做 B 语言。经常有好奇的朋友问我,既然有 C 语言、那么有没有 B 语言和 A 语言呢?有 B 语言,是 C 语言的前身。那么 B 语言的前身是不是 A 语言呢?不是的,是 BCPL 语言。
可读性最差的 Hello World
B 语言发明于 1970 年,已经非常的古老了。但是你仔细看上面的 Hello World, 其实还是能够看懂程序的意图的。而且和 C 语言也非常的接近,大部分小伙伴都有 C 语言的学习经验。但是有一种语言就非常搞笑了,用它写出来的 Hello World 简直没法阅读。
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.
你看懂了吗?反正我是看不懂。但是你可能也猜到了,这种语言肯定不是为了让人去用它写项目的,因为可读性为 0。然后我们再来看这个语言的名字,BrainFuck,经常简称为 BF,Fuck 在英语中是脏话。
虽然如此,这种语言确实图灵完备的语言,能够实现一切程序,虽然它只有八个关键字: >、+、[、]、.、<、-、,。
各种版本的 Hello World
虽然每一个程序员都应该会几种编程语言,但是我不太相信有一个人可以写得出几十种版本的 Hello World。没关系,有一个网站罗列了几十种编程语言版本的 Hello World 示例程序,你可以上去看看,有没有你熟悉的版本。Hello World!

参考资料
- 《Go 语言高级编程》
- 维基百科-Brainfuck 词条