Kernighan and Ritchie’s classic book The C Programming Language began with a sample C program that printed “hello world.” Since then “hello world” has come describe the first program you write with any technology, even if it doesn’t literally print “hello world.”
Hello-world programs are often intimidating. People think “I must be a dufus because I find hello-world hard. At this rate I’ll never get to anything interesting.”
The problem is that we confuse the first task with the easiest task. Hello-world programs are almost completely arbitrary. You can’t deduce what a compiler is named, where files must be located, how they must be formatted, etc. You have to be told. The amount of arbitrary material you need to learn is greatest up-front and slowly decreases.
When I started programming I thought I’d quickly get past the hello-world stage and only write substantial programs from then on. Instead, it seems I’ve spent a good chunk of my career writing hello-world programs with no end in sight.
* * *
No discussion of hello-world programs would be complete without mentioning possibly the most intimidating hello-world program: the first Windows program in Charles Petzold’s Programming Windows book. I was only able to find the program from the Windows 98 edition of his book. I don’t recall how it differs much from the program in his first edition, but I vaguely remember the original being worse.
/*------------------------------------------------------------ HELLOWIN.C -- Displays "Hello, Windows 98!" in client area (c) Charles Petzold, 1998 ------------------------------------------------------------*/ #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("HelloWin") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, // window class name TEXT ("The Hello Program"), // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL) ; // creation parameters ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_CREATE: PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ; return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
Here is the Win95 version of HELLOWIN.C, from the cd that came with the book:
http://www.pixelbart.nl/helloworld/HELLOWIN.C
(+ .MAK and .WAV)
Then again, there’s something to be said for using a language where Hello World is
say "Hello, world!"
Even python where Hello World is literally print “Hello World” is not a trivial thing to do when you factor in finding, downloading, installing, and running python. Especially if you are a novice doing it for the first time. In my position as a Developer, I find that one of the most difficult things to do is just get a new development environment up and running.
That brings back (painful) memories.
And rang a faint bell. There used to be a web page of “Hello, World” in many different languages. The closest I can find now is:
http://www2.latech.edu/~acm/HelloWorld.shtml
Last updated in 2007.
For a list of “Hello World” programs, also see the Wikipedia page:
https://en.wikipedia.org/wiki/List_of_Hello_world_program_examples
Currently I find the most stripped down way of programming ANYTHING is to write javascript in a single static HTML file. But even that requires some HTML boilerplate (which is NOT javascript) in order to give javascript “enough environment” to run…
I’m amused to see that APL, which I think has the steepest learning curve of any programming language I’ve ever run across, has the simplest “Hello World!” program I’ve yet found. It is
'Hello, world!'
Codi, and if you’ve downloaded Python 3, as most novices would, print “hello, world” doesn’t work!
Pete, that’s true! I am still using 2. lol
Great article Mr. John D. Cook, enjoyed the trip down memory lane :)
I think in the 5th edition of Mr. Petzolds book “Programming Windows” the hello world is rather great :)
Remembering how scary entering the world of Windows C through the first hello world tests was when I was starting to get into Windows programming (it was around 2000) I decided that if I ever survive through the struggle of learning this magic, I’ll do a write up for others to follow so they could have a slightly easier time easing into all those structs and unicode that was introduced in the “possibly the most intimidating hello-world program” example :)
Here’s a link to the article for fellow Win C enthusiasts. It doesn’t do the hello world part anymore though since I decided it would be more useful as a ‘whole program’ for future coders to dip their feet in, but its basically a condensed version of the 1998 example Mr. John D. Cook here demonstrated.
I wonder how many others went into stores that had C=64’s on display and typed the following into the keyboard
10 PRINT “Hello World ”
20 GOTO 10
In order to encourage more global thinking when programming, why not:
print “你好世界”
which is Chinese for Hello World. More examples of internationalized programming at https://schappo.blogspot.co.uk/2018/01/computer-science-internationalization_21.html
I’m late to the party but Rosetta Code is the mother lode for examples of every algorithm/computer task in every programming language.
https://rosettacode.org/wiki/Hello_world/Text
https://rosettacode.org/wiki/Hello_world/Graphical