My one criticism, if you would call it that, of Hacker School is that there are no good measuring sticks around here. This seems intentional, and there’s wisdom in nurturing the idea that programmers are not across-the-board “better” than other programmers just because they have more or more thorough subsets of knowledge and practice. If Amy has been coding in Lisp for thirty years, and Bob has be coding in Ruby for three months, Amy might still learn things from Bob which make her a significantly better programmer.
As a relative beginner, I am fortunate in that there is an exceptional amount I can learn from others, but unfortunate in that there are few ways to determine how much progress I have made as a programmer. Perhaps I don’t truly need one, and it’s only my own narcissistic drive to imagine that I’m smarter than other people that wants it. On the other hand, I’m also partially driven by anxiety over finding post-Hacker School employment, and wondering how potential employers will measure me against other job candidates. This may, subconsciously, be the reason I have spent a good deal of the past month working on group projects.
A friend that I made here decided it might be fun to make an artificial intelligence with a non-deterministic game. Although I had already done some work with artificial intelligence in my first month, this not only sounded like it would have an entirely different approach, but also allowed me the opportunity to work in a group on creating the server and API (Application Programming Interface, for you laymen) through which people would set their AIs against each other. It also sounded like tremendous fun.
The others working on the server were all more experienced than I, but we fortunately wrote it in Python, so I was able to pair with others and still be of some value (even if it was often only syntactic). I finally got some network coding experience under my belt, and perhaps more importantly was able to work productively on a self-managed team. And because one of the friends with whom I paired on the project was experienced mostly in JavaScript, I got some experience working with another language as we created a dummy-AI to use for testing.
Once it had been successfully launched, another small group of people wanted to work on our own AI to battle on the server I had just helped launch, and so I joined another team. This time, however, I found myself in a very different position. I was the only one on the team who had worked on an AI for the server (albeit a “dummy” one that only made random choices), and I was no less experienced than most of the other team-members in terms of how long I’ve been programming, and so I was able to take on more of a leadership role, in both managing how to approach the project (separating out the different functions so we could all work on a different pieces of the program simultaneously) and also in writing/troubleshooting the code itself.
And when we launched our first version of our Risk AI on the server and won against the AI of the friend who had the idea for the Risk server in the first place… suddenly the project took on an entirely new level of excitement and engagement. The spirit of friendly competition has given all of us some vigor, and we continue to improve our code and encourage others to build AIs to throw into the ring.
If anyone is interested, the API lives here. We will continue to work on the site’s implementation and the documentation on how to build and launch your own Risk AI, but it’s currently doable as it stands. You can even watch the games which have already been played! Our AI is named “Battleaxe-Pig-Whale” (a partial anagram of the first names of our team).
The past month has not been solely dedicated to Risk, however. I continue to work on the NAND to Tetris course, which has become increasingly tough and increasingly worthwhile. We’ve finally gotten to high-level languages, and are in the middle of building a compiler. I also spent some time playing with “ChucK,” a musical programming language someone recommended which I used to procedurally generate microtonal melodies. Ultimately, I found ChucK fairly clunky, and decided to abandon it for my more productive projects before I could get it to do anything really fun.
My intention for my final month is to focus prominently on web-based application. I’ve created a simple website with a simple MySQL database and I may try to replace some of the web-framework with my own code, although some are advising that this may not be the best use of my time. In any case, in preparation for the job-hunt, I’m hoping to get very comfortable with web programming with my remaining weeks here. I think this may even mean expanding upon my brief experience with JavaScript and starting to learn a second language.
But at this point, I’m pretty happy knowing that I can confidently succeed as part of a group, and that my code is able to hold up in competition (albeit a competition that I was part of creating in the first place). It’s nice having something by which to measure.