/*It has recently come to my attention that people have viewed this about page two different times. This is somewhat embarrassing, as I previously had just the stock About page that WordPress provides, which is little more than “This is an about page. You can put stuff about yourself here”. That must have been confusing for those two people who visited and saw that.*/
I remember being 15 years old when video games stopped being much fun for me. I had, as a child, played games as much as I was allowed to and then some, usually to the exclusion of my homework. But as I got older I stopped seeing any games as being worth my time. I was left in the position of loving video games as a concept, but not any one in particular. I was frustrated, mostly because I believed that I could create better games than what I was playing, but I had absolutely no idea how to actually make them.
Since I have very little ability to draw, I decided that I would have to become a programmer, which I wanted to become anyway because computers fascinate me. Most people think that computers work by the user pressing a key, then magic happening, then the right thing happening on the screen. I knew that computers were simply physical objects that must behave in deterministic ways, but using my computer still felt like using a black box attached to a monitor.
Since I had always read websites such as “anandtech.com”, I knew that games were developed in C or C++, and the graphical API’s used were OpenGL and Direct3D, even if I didn’t know exactly what a graphical API actually was. With that in mind, I decided that I had to learn C++, and bought a cheap ebook titled “Jumping into C++”. I worked my way through that book in the summer of 2012, and finished it feeling like I had truly become a C++ programmer, and that I would be able to create games now. Problem was, I had no idea how to actually program games.
Being able to code in any particular language is fine, except that, after creating basic calculator or linked list type programs, the difficulty is in programming the specific thing you’re working on. For games, although I could theoretically write anything, I had no idea how to even get a graphical window up on the screen. I was totally unprepared for this (you don’t know what you don’t know), and started looking for a solution.
Right around this time, I enrolled in Brock university, in the computer science co-op program. I did this because I believed that I would be learning how to program, becoming a more well rounded and capable programmer. I had suspicions about the utility of a university education, and actually thought higher of the 2 semesters spent working for a company with the co-op program, where I felt that I would learn the most.
Brock teaches students exclusively in Java, which was a bit disappointing, but I figured that knowing a second language (I learned a bit of Python earlier, but not enough to really count) can only be beneficial to me as a programmer. What I minded more was the complete lack of any useful instruction my entire first year. Computer science, probably more accurately referred to as hardware engineering and software engineering, is not a boring field at all, but the teachers seemed proud of how dull and useless they could make everything. Although I actually enjoyed the assignments, and did very well on them, I consigned myself to trying to work on games again, still not really knowing how to do that.
Although I didn’t know it yet, I actually had two separate problems. The first, is that it is impossible to create a game without knowing how to use some specific APIs, even if only Windows’ windowing system. API stands for Application Programming Interface, although I see the term used mostly for using someone else’s, or some companies, “system” of doing things. A library refers to code that is used for a smaller scope of problems. As an example, if I downloaded some code that got me very good random numbers that would be a library. If I downloaded some code that handled all graphics for me, textures, polygons, animations, rasterization, and others, that would be an API, especially if all those systems only work with each other. Ironically, OpenGL, which stands for OpenGraphicsLibrary, is actually an API.
Again, although I didn’t know it at the time, what I needed was an API that handled the basics of handling events with the Operating System, getting a window on screen, handling sound, feeding me the source directory path at runtime, and many other small things. I discovered SDL, which stands for SimpleDirectmediaLayer, now on SDL2, which does all those things for me, with the benefit of being cross platform. Additionally, SDL2 has hardware accelerated 2D graphics. I had decided that 3D graphics would be too hard to create for any game, since I would have to create character models, animations, textures, and all that work, whereas 2D graphics were much more reasonable for a programmer to create for a simple game. SDL is a C API that is still very low level, but I figured that it gave me more than enough power to create games that were fun to play.
I still didn’t know how to actually create games. To that end I bought a book “Introduction to Game Programming”, but it was nowhere near as useful as “Jumping into C++”. Instead, I relied on someone named lazyfoo’s SDL tutorials, which taught me how to work in SDL, and taught me some basic C code to get movement and collision detection in a game. I figured that I knew enough to create a game, and started on my first, a very simple game something like Monochrome, the first game I finished.
I didn’t finish that game, nor did I finish the football game that I then started working on. School came back around and again I left BC for St. Catharines. Once again at school I encountered the same useless academic “let’s learn about time complexity of imaginary algorithms, but not teach these kids how to use simple performance profiling tools”. I decided that I didn’t need this, and dropped out to finish the new game I had been working on, Monochrome, while working part time at a minimum wage job. Monochrome was finished just a few days into January 2015. It is a simple, yet fun game, that I will be building greatly on for my next game, and it has taught me quite a lot about designing games, programming them, and general software engineering.
I’m looking to make the next step into actually working in the games industry. I am looking to create games I can be proud of, and work with and contribute to a skilled team of people who I can learn from. I’m looking for junior level programming jobs, or even internships. I live in St. Catharines Ontario, and will be moving at the end of April, or in other words, location is not an issue, and I am a Canadian citizen. If you are at all interested in hiring me, or interviewing me, my contact information is at the bottom of this page. Please read some of my latest posts, as they detail my game and general thoughts much more deeply than this page.
I also will very much accept jobs for programming outside the games industry, and if you are interested, please contact me.
If you have nothing to do with hiring at all, but want to contact me for whatever reason, please go ahead and email me.