Monday, May 4, 2009

Mr. Wizard and the Atari Joystick

I found it. I finally found it. After 15 years of having access to the internets, I've finally found this clip.

This Mr. Wizard segment was about 50% responsible for my current career as a programmer. It was my first realization that I could actually understand how computers worked, and could bend them to my will.

Now, clearly, Mr. Wizard is way out of his league here.  It’s the early 80’s and computers are taking everything we knew about science and electronics and shoving them into some tiny little array of microchips.  Science and TV exposure isn’t going to help an old man come to grips with a new world in which a single person can’t possibly understand a technology from top to bottom.

In this clip, we see such basic errors as

  • Radioactive interference – he thought the metal casing shielded the rest of the world from the computer’s television station, rather than outside interference mucking with the computer’s internals.
  • He did get chips vs. their housings concept right (clearly through much coaching).  I have to give him credit there… though, he did call the connections “bumps”, and kind of mumbled off into something about other places… glossing over the difference between ROM and RAM.  Common rookie mistakes.
  • 8-bit computer - thinking 8 chips meant 8-bit, rather than the width of the data bus.  And he thought that each sends a “byte” off to the screen and each little “dot” has to have a signal from each one of them.
  • Input controlling –  it goes through all the little things and goes all over the place… something something…

The man concedes the value of the engineers who put this marvel together.  However, it was the controller stuff that stuck with me most, lodged in my memory for decades almost completely unmolested by time.

Let’s leave aside all the horribly inept aspects of Mr. Wizard’s understanding of computers.  At a very young age, through this clip, I was unknowingly introduced to the idea of abstraction.  It’s the idea that a programmer can rely on the layers below him to make it possible to produce something great for those above him, without fully understanding what’s happening below.

In this clip, it was told to me that controlling video games was as simple as mastering these 5 switches for up, down, left, right and the “start” button.  To make a video game, I just needed to write something to react to up, down, left, right and “start”.

It’s more complex than that, but in a completely different way than the complexity we deal with now.  Inheritance, inversion of control, decorators, database access, html rendering, persistence frameworks… it’s all just flavors of the same concept…  It doesn’t matter where you are in the chain, you’re always a middleman (unless you’re drawing traces in some p-charged well in a substrate… which, even now, is abstracted).  This is what makes this field great.

Somebody always has an interest in the layer below you, and sometimes it’s you who is that layer.  It’s thrilling to use what someone else has done to improve the lives of those above you.  Sometimes, it’s enjoyable to be the top of the software chain making it possible for real-world users to do their job better.

It’s what software people do.  They solve the hard problems so others don’t have to.  We thrive on this.

It reminds me of the old yarn about dwarfs and giants.

"Bernard of Chartres used to say that we are like dwarfs on the shoulders of giants, so that we can see more than they, and things at a greater distance, not by virtue of any sharpness of sight on our part, or any physical distinction, but because we are carried high and raised up by their giant size."

Which brings us to an all-time great comeback by the Gipper.  I’m not sure if it’s genuine, but it’s great nonetheless.

At one campus meeting, a student told Reagan that it was impossible for people of Reagan's generation to understand young people. [The student said] 'You grew up in a different world. Today we have television, jet planes, space travel, nuclear energy, computers.' Without missing a beat Reagan replied, 'You’re right. It's true that we didn't have those things when we were young. We invented them.'"

So, enjoy your frameworks.  Love your languages.  Everything becomes too complex at some point to completely understand from top to bottom.  Rely on those below you to make your tools, and use them to make something better for those above.