If you'll forgive me for "metablogging," I've been ruminating lately on the purpose of this website. Up until now, I've been trying to focus exclusively on technology, programming and game design, and to minimize the subjective aspects of my connection to those fields. Put more simply, I've been avoiding writing about who I am and what I do in favour of producing a series of mostly impersonal tutorials and critiques of technology. There are a number of reasons for this—the word "professionalism" comes to mind as chief among them. I'd like this website to be my public face on the Internet, and as every saavy Internet denizen should know by now, there are certain risks associated with maintaining a public persona. I greatly admire Zed Shaw, for his personality as well as his technical accomplishments, but I have no desire to make myself unemployable as he claims to have done (albeit temporarily).
That said, trying to take a dry, detached and objective approach to creating a personal website presents a number of problems itself. First and foremost, it's an inherent contradiction; if I don't write about myself in any meaningful capacity, then there is nothing aside from the superficial about this website which makes it mine. I can't imagine it makes for a very interesting read, either. Realistically, how many people will come here looking for advice on how to link GLUT? Readership numbers are of little to no concern to me, mind you, but I can at least endeavour to give this website a purposeful existence. To that end, I want to start writing more about personal topics, although for the sake of cohesiveness I'm going to continue to focus primarily on those aspects of my life that will be of interest to a technically-minded audience.
As a start, I think that this is a good time to reflect on what I've done since I started this blog in May of 2010. Early in May, I moved to Calgary, Alberta, to start a sixteen-month internship with Pason Systems Corporation. Pason is the market-leading provider of oil rig instrumentation and service, with a wide variety of tools and technology available to facilitate safety and improve efficiency on oil rigs. All of Pason's rig-site hardware and software is designed in house, but my work was on an internal web application designed to support Pason's most valuable employees: the field technicians who directly provide services and equipment to customers.
For obvious reasons, I can't go into great detail about the work I did at Pason. I will say, though, that it was extremely rewarding. I had the opportunity to work alongside some of the smartest developers I've ever met, and I was able to do work that I felt had a tangible, significant and lasting impact on my team's product. That's a rare honor for an intern! From a technical perspective, I got to work with some interesting and unfamiliar technologies; I did extensive development in Python, created rich user experiences with HTML5 and JavaScript, and dabbled with C# when the need arose. The whole experience was hugely instructive, and I will always fondly remember my time at Pason. Of my entire education, my internship is without a doubt the part that I value most.
In September of this year, I moved back to Edmonton to finish my Computing Science degree at the University of Alberta. It being my final year and with most of my specific course requirements out of the way, I loaded up on computing science courses, which led to a fairly engaging but difficult semester. Among the courses I took were Advanced Games Programming in C++, Compiler Design, and Introduction to Computer Graphics.
As a term project for the Advanced Games Programming course, I undertook a modification of the ORTS game engine to allow user interface scripting with Lua, à la World of Warcraft. I feel that the outcome of this project was a little underwhelming, as limited time and the complexity of ORTS forced me to settle for less comprehensive scripting capabilities than I would have liked. Nevertheless, I learned a great deal about Lua and the process of interfacing with Lua from C++. I think I now have an inkling of what's involved in creating a robust client-side scripting system as in World of Warcraft, or even a custom development platform like Corona. Given the popularity of Lua as a scripting language in game development and my interest in developing games, I'm sure it will be valuable experience.
Although I believe I would be within my academic rights to do so, for the time being I don't foresee myself releasing the source code for my Advanced Games Programming project. ORTS has not seen active development in a number of years, so it is outdated and difficult to compile and run, let alone modify. Additionally, my own work—being a school project as it is—would probably not prove to be a good demonstration of Lua/C++ integration best practices, and I'm always wary of releasing code from which others might learn the wrong way of doing things. I do have a report on the project which I'd like to reproduce here at some point, though.
For University of Alberta Computing Science students, I have some advice which I'd like to share regarding the Advanced Games Programming course. If you already know C++, as I did, I would have to recommend against taking it. Much to my chagrin, the majority of the lectures were actually about C++ in and of itself, rather than algorithms and techniques relevant to games. It certainly would be helpful for anyone who wants to pick up C++, but if you're looking for a thorough examination of game programming, look elsewhere.
Compilers was perhaps my favorite course of the semester, although it was also by far the most difficult. I would describe it as a strangely paradoxical course. The theory behind formal languages, parsing and code generation is not extremely complex, but it can be initially hard to grasp, as it is very heavy on jargon and has numerous rules and axioms to memorize. The process of building a simple compiler for a simple language is, in retrospect, fairly mechanical and manageable, but it seems anything but when approached without the benefit of hindsight. Overall, the course is just a staggering amount of work, but it is also among the most rewarding courses I've taken.
Finally, Introduction to Computer Graphics, I got to expand upon the OpenGL knowledge I had built during the development of my iOS game, while also learning the fundamental aspects of computer graphics. Like Compilers, Graphics is a challenging but rewarding course, one of the most difficult aspects of it being the time commitment required. (Of course, it is also fairly math-heavy.) As someone who appreciates the beauty of a well-designed, simple algorithm, I found that learning about such achievements as the midpoint circle algorithm was one of the most enjoyable aspects of the course. I feel that there's an almost Zen-like quality to a clever but simple algorithm which strips away preconceptions of complexity to accomplish a task in the most efficient manner possible. If you're of a similar mind, graphics is full of examples of such algorithms. Of course, working in graphics is also rewarding for its ability to produce visually interesting results, which is a rare treat in academic computing science:
2010 and 2011 were exciting years for me, and although I'm not ready to discuss it yet, I have something huge lined up for after I graduate in April of 2012. In the meantime, I'll continue to post here as often as I can manage. Thanks for reading, and happy new year!