Hacker School, Week 2
tl;dr a lot of stress about whether to try to make something practical, or whether to dive into totally new things that had no guaranteed practical value and that I had no idea whether I could complete by the end of the summer
Over the weekend before Week 2, I tried to read a little of the book Types and Programming Languages. I was looking forward to the arrival of Lindsey Kuper, the first of the summer residents, who is a PhD graduated student in programming language theory and had promised to help us with our reading group for that book.
So I spent most of the week continuing to read The Little Schemer, working on my little monkeys web page (which took an irritatingly long amount of time), and trying to read through TAPL. The first meeting of the TAPL reading group got kind of bogged down, mostly by me, in a basic discussion of what induction proofs are, which, as Lindsey pointed out, is not actually as interesting as discussing type systems.
The problem was, I’d thought it would all come to me magically and I’d be coding along in a field of intellectual and creative bliss, but instead I was struggling through things that seemed to take an inordinately long amount of time (TAPL book, my freaking monkey website), and not coming any closer to any big project ideas.
Later that day I went on a long walk with one of the facilitators, Mary Rose Cook, to talk out these issues, and she strongly advised me to err in the direction of tackling hard tasks that I might possibly not complete but that would certainly make me a better programmer, rather than making sure that I come out of Hacker School with a portfolio piece. That is the general vibe here at Hacker School — that the purpose of the place is to make you a better programmer, not to help you make things that you would have been able to make elsewhere, whose only difference from your previous work is primarily in content.
I thought about it a lot and I decided to go for it. I’d do a project in Clojure, a language that, as a front-end developer, I would probably not be using professionally when I got out (yes, I know there’s ClojureScript — we’ll discuss that later). Now I just needed a project. With any luck, I could come up with something that would satisfy both goals above: it would make me a better programmer, and it would be something I could show to the world.
The last official day that week, Thursday, Lindsey helped a few of us build a simple lambda calculus interpreter (kind of like the last chapter of The Little Schemer), which was pretty cool and gave us a sense of accomplishment.
Then in the afternoon, there was a talk about jobs by David Albert, one of the founders, the gist of which was, try not to think about them yet if at all possible. It was a lot of the same stuff I’d gone over with Mary earlier that week.
And finally, there were the presentations. Every Thursday afternoon there are presentations at Hacker School. I presented my monkey website and showed a little bit about how to refactor code to eliminate mutable variables, which was fun, and I saw a presentation by one of my fellow Hacker Schoolers about robots that could manouver around on the floor. It got me thinking about a game I used to play when I was a kid, called Robotwar, in which the players program robots using a language that comes with the game, and then they send them against each other in virtual battle. Screenshots and description can be found here. The language is sort of a combination of BASIC and Forth, but way stripped down. I thought, I wrote an interpreter today. Maybe I could recreate this game, and write an interpreter for it in Clojure, and use real robots!
I came in the next day (Friday) to flesh out the idea with Mary Rose Cook, and decided that I probably ought to stick with virtual robots, at least for the first incarnation. I’d do the project in steps, with each step being an accomplishment in and of itself. First just build the language interpreter, then display one robot using ASCII art in a terminal, then pit them against each other, then perhaps port it to the browser with ClojureScript, make it a real website with networking and everything, then maybe use real robots, then maybe have them programmable in other languages, like Scheme, etc. etc. etc.
But first, I’d spend some of the following week doing tic tac toe and Game of Life, in Clojure, just to warm up.