All software engineers have their very own story on how they started programming. They include times when we struggle, and times of smashing successes. So I thought: why not add my own. So here it is.
Ever since I laid my hands on my first Game Boy, I knew what I wanted to become - a game developer. I wanted to know how these miracles were created. I wanted to bring my own ideas to life. And I was willing to do next to anything to make it happen. I was about 5 or 6 years old back then.
I could barely read and write, yet I was very eager to learn how all of this magic device would work. Alas, I had no teacher for a very long time. I eventually entered middle school, and this school specialized on IT. I was thrilled. But things turned out quite differently. We were taught how to use Word and Excel, and do some image editing. We learned about the basic components of a PC. But using built-in functions in Excel was as close to programming as we ever got.
For years on end, I would spend my afternoons after school with a software called RPG Maker. This nifty piece of technology allowed me, bare of any coding skills, to put together "scripts" in a visual way. All commands were listed, it was pick and choose, and every command had a settings window where parameters could be adjusted. There was a global list of variables (integer only, mind you), and I was hooked. The internet was barely starting out these days in my country, and I discovered that there were forums talking about the RPG Maker, which completely blew my mind at the time. I was not alone out there.
I got more and more proficient with the tool over time, producing more and more complex scripts to control my game logic. There was no debugger worth mentioning and no local variables or anything else that would keep complexity in check. Automated tests were unheard of. Yet, without worrying about any of this, I created quite sophisticated game systems. Eventually, I created games of genres for which the RPG Maker engine was not intended, such as a side-scrolling jump'n'run complete with gravity and enemies. Custom turn-based combat systems were also one of the things I concerned myself with. Naturally, those systems required some sort of "intelligence" that would control the enemies. I realized at that point how important a random generator really was. At this point, I was abusing the software to work around its limitations. To cope with the beginner-friendly but cumbersome visual scripting, I created mouse macros that would do the same job repeatedly, so I wouldn't have to do the clicking. Many things needed to be stated explicitly in the visual scripting, so not everything could be (de-)referenced, which lead to very long lists of commands and if-else cascades. There were no possibilities to introduce any sort of abstraction. For example, there were no built-in functions for
cos(x). The solution? Have a cascade of 360
else statements for each input degree, and return 1000 * the result (remember, integer only!) as a static, fixed value.
Little did I know back in these days that the things I were doing and practicing (from variables and control flow to referencing and dereferencing and finally to sorting a list of values) had actual meaning, far beyond the world of the RPG Maker. I thought that this was just an isolated universe and I was convinced that nothing I did with the RPG Maker would ever have any relevance outside of the program. I was having great fun, but I saw it as a hobby and, in a way, as a waste of time for all the knowledge I had gathered being seemingly so restricted to this one program.
Fast-forward to college. My IT teacher introduced us to Delphi 6, my very first programming language. After writing down my first couple of statements and my compulsory Hello World program, imagine my surprise when I slowly realized that all the concepts I had been practicing on a daily basis for years were actually present in Delphi as well, often with a 1:1 resemblence. And there was no clicking anymore - I could actually type my code. There was an editor which would actually tell me what to do (Delphi came with an IDE featuring code completion). And I could declare local variables, which was a mind-boggling thought for me at the time, but the second I laid eyes on the concept I never wanted to have an exclusively global list of variables ever again. I learned that there were actually more data types than integers, and that even text could be tinkered with (RPG Maker only had string literals for text boxes, which needed to be static).
Initially, we only created console applications. Very soon I realized that "if only I could have graphics in there, I could create a game with it". I was looking for a global list of commands for Delphi (just like the one I was used to in the RPG Maker) but there was none available. Back then, I didn't know the term "API documentation", which was what I was actually looking for (that, and a list of all the keywords). I would type random english words into the editor, just to see if any of them would turn out to be bold (which was the Delphi IDE's way of highlighting keywords). I asked my teacher about graphics, but he only responded that they weren't possible in console applications. Naturally, that didn't stop me.
Thankfully, the Delphi IDE offered wizards for all sorts of applications. It wasn't long before I discovered that it was possible to create an application with a real window. And the help manual contained a tutorial on how to create a notepad-style application. This was the first time that I could create an application that was visually indistinguishable from a program that came with Windows, which was a huge deal for me. Looking back today, the Delphi 6 IDE really was ahead of its time.
From there, things just exploded. I created a drawing application, similar to MS Paint. I learned about callback handlers, events, how to open a file chooser... It all sounds so trivial now, but remember that the internet was not that big of a deal in the early 2000s. Coverage on Delphi 6 online was hard to come by, and the technical writing I could get my hands on often exceeded my understanding simply due to the employed terminology. I started reading on classes and objects and inheritance, and while it all made perfect sense to me, I couldn't put it to use because I was unable to get the syntax right at that time.
After college, I started studying computer science at the University. I was faced primarily with a lot of maths, and even physics, as those three studies were taught together as one during the first semester. What kept me going was a course on C programming. However, even at these early stages, I had the distinct feeling that it was a lot easier to make mistakes that slipped through the compiler unnoticed than it was the case with Delphi. Also, while Geany and Kate were nice tools, I missed the comfort of the Delphi IDE. In the second semester, I had my introductory course to Java. It was love at first sight. Not only had all of my hours in the RPG Maker paid off big time, but I was also taught how to employ object orientation. Only this time not by a manual and trial-and-error, but by a
real person, who was happy to answer each and every question that I came up with, and was extremely competent in answering them as well. It took me seemingly forever to get there, but I had finally found the knowledge I had been looking for.
Today, almost 9 years later, I am waiting for the grading of my PhD thesis and working for a startup company as a software engineer. So, I guess my time with the RPG Maker did pay off after all.