Find a Purpose

My Journey, Part 2

This is the second part in a series describing my journey as a programmer. If you haven’t already, please read Part 1, The First Great Epiphany.

I continued building tiny, incomplete games with Game Maker for a couple of years, never really making anything substantial but still learning a lot. And while I was enjoying the act of making games, and I certainly enjoyed playing games, I didn’t really enjoy playing my games. Partly because they weren’t very good, but also because I knew how they worked, how to beat them, and I didn’t get the same feeling of discovery that I got playing other games. And as the enjoyment of playing the games diminished, so too did the enjoyment of making them. I wasn’t sure whether I should be programming for the sake of programming, or programming for the outcome.

At the same time, I was spending a great deal of time playing an online game, which will remain nameless. The client for playing this game had an IRC chat window below the main game window, which I would use to chat with my friends while playing. One of my friends was also a programmer, and he knew how to make IRC bots. If I recall correctly, his bot simply helped administer the channel—it would grant certain users permissions when they joined, kick people out when they broke the rules, it could even run a little trivia game. It didn’t do anything terribly exciting, but I could see the potential.

So over the next few weeks and months, my friend taught me how to write IRC bots. I honestly can’t remember at all now what language I was writing in, at the time I wasn’t even really aware of general-purpose programming languages so I didn’t really care. I just saw it as an advanced feature of the IRC client that would let me do all sorts of interesting stuff when things happened in the channel.

I started out with really basic features—I got it to repeat back anything you said in the channel, like an echo. This gets old really quickly though, so I tweaked it a little. If you sent it a private message, it would echo it back to the channel, so you could message the channel anonymously. As you can imagine in a chat room full of young teens, that feature was pretty popular for a while. But it wasn’t much of a challenge for me to have written. I knew a decent amount of programming fundamentals from my time making games, so I knew what my bot could be capable of, I just needed to re-learn how to do it in this new language.

One of the great things about building a bot in a multiplayer game is that you have a ready-made group of users. People to show off your work to, to enjoy it with, to give you feedback and suggestions. Over time I added a bunch of features that gave you information about the game we were all playing—you could ask it for details of a quest, or for the level and skills of another player, and it would look it up and post the answer into the channel. The most ridiculous feature I added was to make it record all of the questions and answers from my friend’s bot’s trivia game, and jump in with any answer it had seen before. Soon enough it knew all the questions and answers and completely dominated the trivia game, it would answer in only a few milliseconds.

I finally started learning programming in a formal setting in my last few years of high school, where I took a class teaching Visual Basic. Visual Basic is a general-purpose programming language, and I could finally use it to program outside the context of some specific environment, to make anything I wanted. But I never really got around to doing anything with it outside of class—my spare programming energy was going into something much more stupid than that.

For our mathematics classes, we had programmable calculators. The calculator came with a full reference manual for the programming language it supported, so it didn’t take long before I read the whole thing and started making programs and sharing them with my friends. Some of the programs were silly games, but the more advanced ones would not only solve some types of homework problems but even generate all of the required working as well.

So why the hell—when I could be programming in a real language like Visual Basic creating interesting programs with GUIs—was I wasting my time programming my calculator? Because I could carry it around with me all day at school (remember this was before smartphones, tablets and affordable laptops), and all my friends had one that they carried with them every day as well. Just like with my IRC bot, I was not just enjoying the act of programming, but also using the thing I was building.

Especially for people getting started with programming, it’s really important to find a purpose—the reason you’re doing it. This is what will give you the drive to continue when it gets too hard, or too tedious. For me, it’s building things that I can use, and building things that help me to think about something in a new way. Hell, even this blog is really just a way for me to flesh out thoughts that would otherwise float aimlessly in the back of my head.