I opened my first book on writing code in 1987. I wrote my first program within an hour of opening it. This week I found that program and got it running again.
Most of us can likely look back and pinpoint the moment they first got “into” their current career path. There is always that first college class on a subject, that first job offer in a new industry, the first time someone sees a help wanted ad that they feel they want to go for, the first online class you take and realize you love something and want to do it for a living. Mine started the day I opened a book called “A Touch of Applesoft Basic“.
Today I write software for a living. I always have. Working in the software industry has defined much of my social circle, supported my family, and has been directly responsible for most (if not all) of the opportunities I’ve been presented with throughout my life. You could argue that most of the opportunities my children have been provided with also trace back to that first book on software. I now write software for phones, tablets, the mystical “cloud” and the internet of things. The technology details have obviously changed throughout my career but, as I’ve recently been reminded, the core of what I do hasn’t changed that much at all.
This strange little story goes back to a 12-year-old version of me growing up in a small town in central Nebraska (Shelby, NE to be exact). I had just received an original Nintendo (NES) system that included Super Mario Brothers and the Legend of Zelda. Like many kids of that era I was hooked. Not only were the games great fun but I was intrigued that someone got paid to build something like that (although, from looking at the credits, I figured those jobs must only exist in Japan).
My parents soon invested a lot of money (relative to their incomes) in a new Apple IIgs “Woz” limited edition computer for me, their only child. This was at a time (and in a place) where others owned personal computers. Fortunately I wasn’t a total newbie to computers thanks to my school (Oregon Trailanyone?). My new computer came in a set of nice shiny boxes which I eagerly opened in early 1987 and then, with everything finally hooked up correctly, I booted it up. After some buzzing and whining from a 5.25″ disk drive it successfully booted to…a blinking command prompt! And just sat there. Blinking. More blinking. Still blinking. (It actually looked a bit like this)
A bit confused, I dug through the boxes some more and found a book called “A Touch of Applesoft BASIC“. It was a brief tutorial on how to program in BASIC and, as far as I could tell, learning what was in this book was the only way for me to get my new computer to do anything. Thus I set about learning to program. That day I wrote my first program. And my computer came to life and did whatever I told it to do. Back then this felt to me like magic! Truthfully, this still feels a lot like magic today.
I prize that book on programming to this day and have my original copy.
Over my middle and high-school years I continued to learn whatever I could and to program. I learned BASIC, C, Pascal, and got heavy into 65816 assembly language. I eventually joined a small community of developers around the country who communicated and shared ideas via 2400 baud modems (i.e. BBS’s, AppleLink/America Online, etc). I realized quickly that a modem call to Omaha from my hometown was a long-distance call and was soon in debt to my parents for large phone bills. I even wrote some articles on game development for small development journals (and got paid real money).
When it came time for college I moved away to attend the University of Missouri – Rolla (now the Missouri School of Science and Technology) where I studied computer science and game development. During that first move from Nebraska I packed up all my Apple IIgs 5.25″ and 3.5” disks and all my old programs and took them with me. I also (somewhat regrettably) sold that original Apple IIgs so that I could buy a Gibson Les Paul. My thinking at the time was that girls liked guitar players better than coders and I’d have computers to use at college. This actually turned out to be true. But I still miss that computer.
Over the course of my college years and then on into my career I held onto all those old disks and many of my original Apple IIgs manuals (including my original coding tutorial). As the decades passed I knew it was more and more unlikely such old storage mediums would retain any usefulness and I often considered throwing them all away.
Fast forward to thirty years since I first opened that book. My company recently moved into some new offices and, when renovating the space, I decided to put in some shelving and utilize it as a sort of “museum” or display case of some older technology. In addition, I could use the space to display a handful of awards and include copies of some of the books I’ve contributed to over the years. My idea was to show off some of the stuff I kept in storage and to remind some of us why we got into this industry in the first place. (And, for my younger co-workers, I wanted to let them know where us old guys got started 😀
While it’s still a work in progress, it proudly displays a number of my old Nintendo systems (including my original NES from 1986) and, thanks to the power of Ebay, I was able to fix an old mistake and purchase a complete Apple IIgs “Woz” limited edition computer. (As luck would have it, I ended up getting two full Apple IIgs setups fairly cheaply)
Into my basement storage boxes I went until I found those original floppy disks from the late 80’s and early 90’s. In talking with my coworkers, we had little faith that a 5.25″ floppy so old would retain any data or still be readable. A number of my staff at ArchitectNow had not even seen a floppy disk before and it was a hot topic amongst our MacBook Pro’s and SSDs.
With everything set up I popped in the first disk I ever used (I meticulously labeled them back then so I knew which they were). The sound of the disk drive whining was glorious and then…a blinking cursor and a command prompt. All my programs sat there intact. After going through as much as I could find I found it amazing how little I knew back then yet how much I could figure out with a little drive and curiosity. Some of those early programs were nearly 2,000 lines of code and I’d worked on them for months.
The very first program I ever wrote was a text-based wargame simulator I wrote loosely based on the movie War Games which had been released a few years prior. It was great fun to look back at the code I wrote as a 12-year-old and realize: This isn’t fundamentally different than what I do every day as a 42 year old. I dug through disk after disk and everything I’d ever written was there. Games I designed, graphics samples I pored over. Games and utilities I’d written with friends…some of which never progressed beyond the “splash screen” phase where we proudly called out who was the programmer and who was the designer. Over the years I moved onto desktop applications and bigger, more graphical, programs. I even had all the original commercial games I bought and loved. Might and Magic 1 by Jon Van Caneghemwas a huge part of my youth and I studied and plotted on how to replicate something like that. By the time I was in college John Romero and John Carmack (currently CTO at Oculus VR) were at Id software writing games like Wolfenstein, Doom, and Quake. Trying to replicate these games kept me going to class in college.
These old Apple IIgs computers ran at either 1mHz or 2.8mHz (depending on what you were doing). They also had a whopping 1.125mb RAM. Today my teams use MacBook Pro’s with Intel i7 processors (2.5gHz+), 16gb memory, 15″ Retina displays, and 500gb of Solid State flash drives. Just taking pictures of my 1987 Apple IIgs code using my 2017 Apple iPhone was a surreal experience. The processing and storage power of the phone I now carry in my pocket is lightyears ahead of that 30-year-old computer. But the code I use to develop for both is fundamentally the same. How cool is that? As a 12-year-old I learned about loops, conditional statements, how to comment my code, how to modularize and optimize my code, how to manage memory, and how to fail gracefully. Those are things I still think about today. We achieve those goals in much different ways (with much cooler tools and languages) but they all fall back to the same core concepts.
** The astute observer will notice the rudimentary code organization and commenting in the first code snippet above 😀 **
Here is an example of a younger me painstakingly attempting to render a 3D dungeon ala Might and Magic. This took me forever to write the code to plot out every line and pixel by hand. It took so long I gave up after this single scene (but I do look back fondly on that single door and try to remember where I intended for it to lead if I had had more time and patience 😀
Here is short video of an application I wrote in 1991 for a journal called 8/16 Central called TileScroll. The article was on using 65816 Assembly language to render scrollable worlds at a high frame-rate on a 2.8mHz computer. This was a tough thing to do back then and you could get faster performance by adjusting the location of your executing code in memory and pushing pixel/color data directly into overlaid video memory. I do not code much in assembly anymore, but I do know a lot about it (and likely could pick it up quickly after the apocalypse which pushes us all back to the stone age and requires we code in assembly again).
One final note (beyond a thank you to anyone who read this far), while the technology and career path I’ve had may sound unique, I know a number of my peers around the US got their start in a very similar way. As a frequent conference speaker, I do a fair amount of traveling throughout the country and interact with a large number of developers and presenters. We like to share a beer or five and swap stories about what we are working on or what we used to do. You may be amazed at how many can trace their love of technology back to a similar point with an old Apple or Tandy or Commodore computer. Many of us started by picking through old books or magazines and typing in sample programs. We were forced to learn on our own due to lack of a “Google” or “Stack Overflow” to guide us.
If you have an interest in learning a bit about software development a friend of mine (and a fellow old-school geek) named Shawn Wildermuth is working on a Kickstarter to fund his movie: Hello World: The Film. Shawn’s interest in technology dates back to the same age as my own and has a lot of similarities. Shawn was kind enough to stop in St. Louis and interview me a year or so ago as part of a podcast series he does. As part of the podcast we shared a lot of the same stories that I talk about here. For Shawn’s film he is interviewing a number great developers about their own history as coders, what they love about development, and what they do today. Shawn has included a large list of great coders and technologists with fascinating histories (including the very John Romero I grew up idolizing). Check out a preview of Shawn’s film below and please consider contributing a bit if you can.
Back in the 80’s none of us knew that technology would play such a large part of everyone’s daily life as it does today. Back in the day I was just glad I could make a computer do more than just blink a cursor at me. Today I can talk magically into the air and computers in my house recognize my voice and do things for me. What I would give to go back and tell that 12-year-old from Nebraska just where that book on AppleSoft BASIC would take him.
I should also take a moment to thank my parents for buying that computer…it turned out to be a fairly good investment.