Posts

Hello World 가 처음 등장한 곳

목차3

새 언어를 배우면 거의 예외 없이 화면에 Hello World 를 찍는 것부터 시작한다. 새 프레임워크의 시작하기 문서도, 새 노트북에 개발 환경을 깔고 처음 돌려 보는 코드도 대개 이 두 단어다. 이 관습이 어디서 시작됐는지 궁금해서 찾아본 내용을 짧게 정리해본다.

1972년 B 언어 튜토리얼

기록으로 남은 가장 오래된 Hello World 는 1972년 벨 연구소의 브라이언 커니핸(Brian Kernighan)이 쓴 B 언어 튜토리얼에 있다. B 는 C 의 바로 앞 세대 언어다. 이 튜토리얼의 예제는 지금 보면 조금 이상하게 생겼다.

코드
main( ) {
    extrn a, b, c;
    putchar(a); putchar(b); putchar(c); putchar('!*n');
}

a 'hell';
b 'o, w';
c 'orld';

문장 하나를 'hell', 'o, w', 'orld' 세 조각으로 나눠서 변수 세 개에 담았다. B 에서는 문자 상수 하나에 ASCII 문자를 네 개까지만 넣을 수 있었기 때문이다. 세 조각을 차례대로 출력한 뒤 마지막 putchar 로 느낌표와 줄바꿈을 붙인다. B 에서는 *n 이 줄바꿈이다. (첫 조각이 하필 hell 인 건 순전히 글자 수 제한 탓이다)

C 책과 함께 퍼진 Hello World

커니핸은 1974년 벨 연구소 내부 문서로 쓴 C 튜토리얼에도 같은 예제를 넣었다. 1978년 데니스 리치(Dennis Ritchie)와 함께 낸 『The C Programming Language』도 이 프로그램으로 시작한다.

코드
main()
{
    printf("hello, world\n");
}

이 책이 C 의 교과서가 되면서 hello, world 도 함께 퍼졌다. 책에 실린 표기는 지금 흔히 쓰는 Hello World! 와 달리 소문자에 쉼표가 들어간 hello, world 였다. 뒤에 나온 언어들의 입문서가 첫 예제를 그대로 따라 하면서 Hello World 는 첫 프로그램의 이름처럼 굳었다.

그보다 앞선 기록이 있는지는 확실하지 않다. 해커들의 용어 사전인 자곤 파일(Jargon File)은 이 문장이 1967년 BCPL 에서 시작됐다고 적고 있다. 다만 그 시절의 코드는 남아 있지 않아서 지금 확인할 수 있는 가장 오래된 기록은 커니핸의 B 튜토리얼이다.

왜 하필 이 문장이었을까

이 문장을 어디서 가져왔는지 커니핸에게 직접 전화로 물어본 사람이 있다. 커니핸은 알을 깨고 나온 병아리가 Hello, World 라고 말하는 만화를 본 적이 있는데 그게 마음에 들었다고 답했다. 첫 프로그램의 첫마디가 갓 태어난 병아리의 인사였던 셈이다.

커니핸이 어디서 이 문장을 가져왔든 Hello World 가 50년 넘게 첫 프로그램 자리를 지킨 데는 그럴 만한 쓸모가 있다고 생각한다. 이 프로그램이 하는 일은 화면에 글자 몇 개를 찍는 게 전부다. 그 몇 글자가 나오려면 편집기와 컴파일러, 링커, 런타임, 출력 장치가 전부 제대로 이어져 있어야 한다. 그래서 Hello World 가 확인해 주는 건 코드보다 환경 쪽이다. 새 노트북에 개발 환경을 깔고 나서 Hello World 부터 돌려 보는 것도 그래서다.