The Eternal Joy of "Hello World!"
Starting 2022 from the Basics
Hello everyone and welcome to a 2022 edition of the Mad Ned Memo! I’m starting the new year by saying “Hello, World!”, which is an activity I have engaged in many times before. Each of these greetings is joyful.
This experience is the time-honored exercise practiced by anyone trying to learn something new — including of course writers of all those starting programs that did nothing more than print
That program in its varying incarnations has probably brought more joy to people than any other. I am sure fans of Candy Crush or Minecraft or Fortnite or something could quibble with that assumption. But given it is a short (usually one-line) program, the joy-per-code-line for the consumer of the output is inarguably off the charts!
Why does it always bring joy? Because it is an affirmation. Creators of programs that produce “Hello World” are seeking answers, and those answers have nothing to do with the content of the message their program produces. It has to do with the process needed to get the message in the first place.
These people are in uncharted waters, looking for any kind of recognizable landmark. You don’t really care what color the lighthouse is when lost at sea, just seeing the light is enough to make you extremely happy.
For some, the reason for being lost at sea is because they are new sailors. For the first-time programmer, any output from the computer that you yourself caused to happen is magical. But even the seasoned pro will find themselves returning to the safe harbor of “Hello World” when exploring new oceans.
Maybe you are a seasoned Python Admiral for instance, but now have just installed it on your new Raspberry Pi and created some cool display thing you are testing. You have a lot of unknowns on your new ship, and having at least one thing you can count on (like a bulletproof program in a language you have mastered) is always a welcome sight, just like it was when you were a newbie.
Hellos From Other Worlds
The nature of “Hello World” changes, depending on the venue. It is not always a simple print statement. I spent some time playing with Unity last year, the powerful game development platform and 3D engine that supports a “low code” development process. Here, even the simplest of scripts can produce amazingly complex results.
“Hello World” on Unity takes the form of displaying a 3D geometric solid of some sort, that you can navigate around with your mouse. This kind of output from a first-time program would have been unthinkable back when I first started Hello-Worlding (and not even possible, given the hardware available.) But given all the software capabilities already baked into the system, this 3D model program really only amounts to a few lines of code.
Still a worthwhile exercise to type it in. Even though it is not much code. And even though I’ve written lots of bigger programs before. Because although the program script itself is simple, Unity is not. When I finally got my cube to display so I could walk around it, I was pretty happy — because there were many new concepts and unfamiliar parts of the environment I had to learn just to get to this simple display.
I used to wonder if the modern young programmer of today would necessarily need to start with a Unity-like “Hello World”, when learning to program in order to be satisfied. After all, simple printing of text to the screen does not hold the same wow factor it once did.
I learned eventually that this was not really the case. I had the opportunity to teach a few people in their early 20’s how to program in the past few years - all of which had never written any code before. We started with a simple Python “Hello World” example — and I was prepared for them to be somewhat disappointed in the limited scope of their first accomplishment once they ran it.
Instead, when a student of mine ran their first “Hello, World” print program, I saw their eyes light up with delight. Delight that what they had told the computer to do had happened as instructed. Even in its simplicity, this was still a door that had opened to a magic world where they had control over the machine, moving them beyond just being a consumer of its output.
The One-Bit Hello of New Hardware
On Christmas of 1979, I opened what is perhaps the best Christmas present I will ever receive, my first computer. This was a budget machine even by 1979 standards, a Netronics ELF II, costing about $150. It featured 256 bytes of memory, a hex keypad, a two-digit LED display, and a single LED light you could program to turn on and off. (See my earlier article, How Many Bits Will Make You Happy? for more on my one-bit encounters with the ELF II)
Turning the LED on was the first program I ever wrote on a computer I actually owned, and doing so was exciting not because of the result, but because of the potential for more. That “more” for me is all the learning and adventures I’ve had for the past 40 years or so.
The blinking LED is also often the “Hello World” of hardware design. Getting a single bit of output to happen on new hardware always takes me back to that Christmas in 1979, in the same satisfying way. I have experimented with microcontrollers like Arduino, and that red LED coming on when I connect it to some pin of the board and test by driver code was a fantastic experience. Same feeling happened again later, when playing around with Raspberry Pi boards, and trying to get a piece of hardware to work with the GPIO outputs.
In one case though, it was turning an LED off that was the holy grail. When I worked as a hardware engineer in the Workstations group of Digital Equipment Corp., we had a new machine we were bringing to life, the AlphaStation 600. I had designed the motherboard for this machine, and in general it was going OK.
But the built-in floppy drive was acting up, and the prominent symptom of it was, the drive’s LED light was continuously lit, no matter what we did. There was a confusing array of permutations involved, because the floppy cable connector was not polarized, and also not symmetric in terms of all connectors on the cable being the same. There was a host and drive position, also the possibility of a “twist” in the cable or not to invert some signals, and also jumpers that could change things on the floppy.
Add to this the fact we were debugging new hardware, and the possibility that I had flubbed something in the motherboard layout and reversed the bus somewhere along the line. We spent days in the lab, swapping this and that, reversing things, changing cables, with the floppy LED frustratingly on all the time.
I eventually got to be a big enough delay that our head architect for the group was assigned to help figure it out, and we began an in-depth mapping of every single point along the chain, with lots of complex whiteboard drawings. Several days of debug later, the floppy relented, and the light went out. I’ve never been so happy to see an LED turn off as then. The contents of the whiteboard in the lab were erased, and replaced with the phrase:
“There is a light at the end of the floppy tunnel, and it is always on.”
No one knows who wrote it. (ok, everyone knows it was me)
Hellos for the New Year
This Christmas I revisited my “Hello World” LED lighting experience. For reasons that have yet to be justified, I bought myself this little FPGA board (this is a programmable hardware system that allows you to create your own gate logic).
I can’t really tell you why I bought this. The number of applications that need an FPGA solution, versus using something easier to work with like a Raspberry Pi, are fairly small. Usually things that require hardware speeds beyond what is achievable with an embedded processor. I have no such need or application, and in terms of experimenting with cutting-edge technology, this board would not even qualify, because it is over 10 years old.
What it does though is put me squarely back in touch with my hardware design roots, which I do like to revisit from time to time. Maybe it was an attempt to recapture that 1979 feeling, I don’t know. But I can say that when I wrote my first Verilog program for this board and downloaded it to run, it was pretty satisfying to see, once again, the little LED light start to blink.
I spent some good times debugging well-travelled circuits, like the 7-segment hex LED decoding in the picture above, which should be displaying “DA” but has a bonus segment lit.
I’m hoping to have more to say about this project later, which I have called QIXOTE, a reduction of / reference to Don Quixote, owing to it’s windmill-jousting nature. I think its a chance to veer of the normally travelled paths of using standard, already built stuff and try some weird experiments of sorts, but we will see. I think in the process there will be a lot of “Hello, World” joy as I try to figure it all out.
I am interested though in your “Hello, World” experiences - what things have you started with that are similarly simple, but brought you a lot of satisfaction once working? Tell us about it. Doesn’t have to be hardware or software, by the way. I can imagine someone’s first accordion tune would qualify!
So, Happy 2022! Hope everyone is planning their own nerdy adventures this year. If not, I will have you covered.
Next Time: A look back at the long-lost days of Field Service, when a guy came to your hardware, instead of your hardware going to the guy, or the trash. Roaming technicians and dead primates coming up in: Always Mount a Scratch Monkey!
The Mad Ned Memo covers topics in computer engineering and technology, spanning the past forty or so years. Get your weekly dose of nerdy computer tales and discussions delivered right to your inbox, and never miss an issue! This newsletter comes to you ad-free and cost-free, and you can unsubscribe at any time.
The Mad Ned Memo takes subscriber privacy seriously and does not share email or other personal information with third parties. For more information,