I’ve recently been reading the article “Coding needs a new youth movement” in which the author proposes that beginner programming courses should focus on “frontend” technologies to motivate students. Instead of “backend” technologies like Java, that is. This lead me to take a look back at the time when I wrote my first lines of code, which was more than 20 years ago. I assume that many creators of said programming courses also started at least back then, probably being the reason why the courses are structured in the way the are.
So here I would like to share (the beginning of) my journey from interested kid to CS PhD. This might end up as some sort of boring, archaeological curiosity but I still hope I can share at least some funny stories, pictures and lots of links (you notice all the highlighted words, right?).
Getting the feet wet
LOAD “$”, 8, 1
on the C64, without having any clue what they did. But well… I had a bag of those lines and one of them worked, most of the time.
When I was 12, I was in the lucky position to have a 386 PC with DOS at my disposal. Soon I discovered the command “help”, which presented me a list of many other commands – which I tried out, one after the other.
Then, one day I arrived at “q” and typed:
Bam. A similar and wonderful process started once I discovered the documentation in QBasic. Soon my first game was finished, again just by trying out all commands from the documentation. Well, sort of “finished”. Don’t shoot me: It was a stock trading game. At that time I did not know about stuff like loops, but I figured out how to use “if” and “goto”, as well as “gosub”. So I was able to build the loops by myself. And it felt amazing, I was hooked.
Some months later, a whole new world opened up to me when my family got AOL internet. Needless to say, phone bills were a huge issue and the modem squeaked as often as it/I was allowed to.
It didn’t take me long to discover forums (or whatever it was called back then in the AOL world) on QBasic programming, and soon I’ve made a number of contacts with wizards who were able to build miraculous games (do you read this, MMQuaker?).
At that time I loved Gyro Gearloose and on Open Day at a local technical school they had a robot arm, inserting 5 1/4 inch floppy disks into a computer. Now I was sold completely, I was going to build crazy stuff in my inventor hut in the garden (that didn’t exist yet… or… ever)!
And of course I also used to play a lot of video games. For example, I have a lot of fond memories of Ultima 8. One day I read about the (seemingly impossible) project “Ultima Online”. Thousands of people in an online fantasy world, free to do anything they wanted? From building houses to hunting together? Too good to be true. Soon, Richard Garriott became my new Gyro Gearloose (who is called Daniel Düsentrieb in German, by the way).
So there I was, 14 years old, master of QBasic spaghetti code and eager for more. On the first day at the aforementioned technical school I noticed a scribbling on a wall behind the wardrobe, probably left by some older pupil:
void main ( void )
Curious, what the hell is “void”?
Still, I was arrogant. After all, I already KNEW how to program, right?
I didn’t take long that I had to drop this arrogance. First year programming in school was mainly C in DOS, using a Borland compiler. Tasks included writing a program that produced a diagram on pointers pointing to variable addresses in ASCII-art or implementing different standard algorithms. I still remember struggling with that merge sort.
In the second year, the biggest struggle was to install Linux without any help and to handle all those Segmentation faults I didn’t notice in DOS. Propositional logic joined the club, which took some time for me to wrap my head around. While turning in my weekly assignments on 3 1/2 inch floppy disks we also had to keep up with the regular, boring classes like German, Geology, Math etc. and also a lot of business stuff like accounting (which I soon learned to hate deep from my heart).
When not drowning in stuff to wrap my head around, I used my time to read stuff like the Bastard Operator from Hell.
Nerdism got me even more and I started to read a lot of Fantasy books, starting with The Wheel of Time series and then following up with The Mists of Avalon, a number of Forgotten Realms books, a lot of Discworld books, stuff from Wolfgang Hohlbein and much more. Magic: the Gathering became popular in our school, but apart from some matches I did not develop a deep interest in it.
And of course, instead of doing my programming assignments, I was programming my own stuff, mostly games.
In the second school year we were confronted with Assembler. One of the assignments was to write a small Snake-style game. I liked it, obviously. And after some time I felt the pieces coming together and I stopped drowning and started to swim.
In the next 3 years, I was confronted with a lot of technologies and concepts, including databases, cryptography, computer networks, the Cisco CCNA, graph theory, C++, Java, COBOL, SQL, WinAPI, MFC and much more.
I started to gain interest in specific fields and technologies and started to despise others. For example, I never cared about button sizes, borders, GUI decorations. Whenever the teacher was talking about buttons in AWT, I followed my own interests instead. I was a zealous proponent of C and C++ and laughed at Java. I embraced some parts of OOP, like polymorphism, but mostly preferred a style that was prevalent in the games industry.
At the time of writing, some of my favorite webpages and articles from that time still exist, e.g.:
- NeHe OpenGL tutorials, which thaught me about 3D programming.
- Beej’s Guide to Network Programming, which brought me to networking.
- Code on the Cob, which formed my programming style.
Of course I was still programming games. I made progress and thanks to the Assembler classes I figured out how to enter the amazing “Mode 13h” with some inline Assembler and discovered techniques like double buffering to get rid of the tearing, which had haunted me previously. One of those games is shown below and supported 4 players using NetBIOS and featured… well… wizards shooting each other.
It was the time I was also finally able to play Ultima Online. And I did. A lot. Well, at least it helped me brush up my English skills, useful as a non-native speaker. I also learned a bit about writing macros and that being annoying might result in promotion, even in online game guilds. Once flat rates became a thing, my computer often ran the whole night for macroing pesky skills like fishing or hiding. First thing in the morning was to turn on the computer… and to find my character killed and looted to the bones. Well, MMORPGs were tough back then.
Apart from Computergraphics, network programming was one of my most beloved topics. So apart from multiplayer games, I obviously had to write an IRC bot that uttered stupidity in the IRC channel of my Ultima Online guild, a small network library (shall I dare to share the code of a 16-year old? OK, here it is: netcore.h, netcore.cpp) and later on, together with colleagues, a fancy instant messenger. And we had all the features we missed in ICQ, like multiple recipients, receipt notifications, multiple themes, open protocol, send to groups, ran on Windows and Linux etc. Even the widgets were programmed by hand.
It was also the time when a game mod for Half-Life became extremely popular – Counter Strike. I also joined the CS club for some time, but most of my gaming time was still used for Ultima Online and later on also Diablo 2. Level editors became quite good, so I started to fool around with the editors of Starcraft and Unreal.
Every summer I did a (mandatory) internship at some local company, not learning much to be honest, but getting a feel for the real world. The real world was mostly boring and bureaucratic. But I was sure that there will be more interesting stuff out there for me.
In my final year at school, I finally started to enjoy Java a bit more. IDEs like JBuilder still were slow as hell, but programming with VIM was fine. Programming Java was a relaxed walk in the park compared to the state of C++ back then (just looking the different versions of the STL back then). The second big project next to the instant messenger was a live 3D visualization of network data stored in a graph with live data flowing.
My readings at that time included books like
- Code Complete,
- Game Programming Gems,
and as my heart was still with C++, obviously
- Effective & more effective C++ by Scott Meyers.
After graduation, I was offered to continue to work on the 3D visualization topic, leading to me being freelancer, working also on eGovernment topics, embedded systems and everything that brought in some money (even creating websites). Some time later, the infamous EASpouse discussion emerged, dampening my enthusiasm for the game industry by a large margin. Due to my social service year as a medic at the local red cross, I decided to study Medical Informatics some years later. But that is another story…