One of my favourite interview questions is asking how long someone has been interested in computers. Someone with a long-term interest will usually be more motivated to learn and improve, i.e. the sort of person I want to work with.
Now, before I offend anyone by suggesting that this is the only route to success, it certainly isn’t. I’ve worked with great programmers who haven’t followed this route and not so great ones who have. It’s more important to enjoy your work now than how long you’ve enjoyed it.
Anyway, here’s my story of how I started with computers and programming. Lets go back to the early 80’s and the arrival of the home computer…
My Dad came home from work one day with a Commodore VIC20. It came with a tape player, plugin Space Invaders game cartridge and joystick (whilst writing this post, I realised that it wasn’t actually a Space Invaders game, but was in fact a Galaxian clone). Immediately, I was hooked. I can remember getting up early before school, sneaking downstairs whilst everyone else was still asleep and enjoying some serious alien blasting practice on Star Battle
Our library of games slowly expanded as new games were purchased, most of which required loading from tape, using the immortal commands:
One of the greatest aspects of the VIC20 and home computing at the time was that games were often printed in magazines and books. I remember spending hours typing in a program from a book that promised the most exciting game I could imagine. Most of the time, however, I ended up bitterly disappointed with the result. Defusing a bomb? Guess the correct number. Gunfight in the wild west? Tap the space bar as soon as possible when “draw” appears on the screen.
The other common result was that the program wouldn’t run at all! A combination of having not typed the program incorrectly or the program being incorrect to start with were usually to blame. Having invested hours of my life and with the promise of alien lands I was always determined not to be beaten by a simple programming error.
This was my first introduction to debugging. I didn’t particularly understand the strange commands I had typed in, but I did start to spot patterns. I’d always manage to get a program at least partly running, which was usually good enough, even if it would later crash.
Whilst writing this post, I found this amazing website that provides a full VIC20 emulated environment inside your browser. Why not take a look?
Eventually the VIC20 was replaced with a Commodore 64. The games got better, a lot better actually, but I still enjoyed typing in programs from books and magazines. I also got a few books that showed little snippets of programs. How to generate sound, how to draw colour to the screen, how to accept user input, that sort of thing. With this new knowledge I remember creating my first program – a flight simulator. Now before you start thinking I was some sort of child genius, let me explain what this flight simulator would actually do. It was loosely based on a commercial game that mainly consisted of getting the right speed and adjusting the flaps at the right time. My game started with a nicely drawn blue sky, green grass and grey ASCII runway. When you pressed a key the engine noise would start and gradually increase. I then convinced my younger brother that he needed to pull back on the joystick at the right time to take off. However, I didn’t know how to program joystick input, so all the program would ever do (or could ever do) was rev the noise up and up and then play a crashing sound as the engine overheated. It was then game over! This was an important lesson in the significance of imagination and how suggesting underlying intelligence can fool a user.
As I got better with the C64 and BASIC programming I started writing more of my own programs. Eventually “Silly Ken’s Dungeon Adventure” was born. This was a choose your own adventure program (all text-based), but also included my first look into Assembly language programming. By that time I had a 5 1/4″ floppy disk drive and was a regular reader of an enthusiast magazine that once a month came with a floppy disk full of goodies. One month came a sample app that showed how to display a bouncing graphical bar with text using assembly language and raster programming. Again, I didn’t understand any of it, but with enough trial and error and perseverance I managed to change the colour of the bar and the text displayed on it.
From the Commodore 64 I progressed to an Amiga. What a machine the Amiga was. The games were amazing, but I also progressed to some serious tinkering. I paid a lot of money for a 2MB memory upgrade and a 20MB hard disk drive. By now I was pretty efficient in BASIC programming and could write small programs in Amiga BASIC and had started scripting in Amiga DOS. Combining these skills with some friends DPaint magic and Music Tracker skills resulted in various “demo disks” that showcased our talents. They didn’t get very far as the only people who saw them was ourselves, but still we felt good about them.
By the time I got to my A-levels I knew I wanted to work as a programmer, but wanted some more formal training in this craft. My A-level Computing course was actually a huge disappointment as it didn’t offer any teaching in the art of programming. It covered a lot of hardware basics and system design, but nothing programming related, even though a major component of the course was writing your own large program. I decided to write my own play-by-mail game based around another system I had some detailed instructions for. This was a pretty big challenge and one I didn’t quite complete by the time deadline day came round, but as I’d enjoyed writing this so much, had a clear vision of where I wanted to get to and really felt a strong ownership of the software, I carried on improving the software during the Summer. Before the end of the Summer and my disappearing to University I had a working system that I was play testing with 6 friends. They really enjoyed it and again whilst the program didn’t actually do much behind the scenes, the power of suggestion and their imagination meant they perceived the software as being more than it was. This was also my first pragmatic approach to software deadlines. I realised that what I needed for a complete system would take weeks of solid effort, but I didn’t want to wait that long. So, I prioritized the most important features to get started and then added new features later. I realised that it would take a while before any of the players would get to the more advanced part of the game, so simply skipped those parts and wrote them later. This was very successful and is an approach I can still use today – it is important to get the most used features in front of users as soon as possible, other features can wait until version 2.
I continued using my Amiga as my main programming machine right through into my 2nd year of University. It really was a great machine, it read DOS disks, had a C and C++ compiler as well as Prolog and other lesser known language interpreters that I used on my Computer Science course. And did I mention the games were amazing!? Unfortunately, one evening I’d gone out and left my TV on standby. An electrical fault caused the TV to explode and, with my Amiga positioned right in front, it also went up in smoke. Since then I’ve been a happy PC owner, but sometimes I still miss the old Commodore machines.