Quarter Update

So the quarter finally ended, and I can get back to having a social life over the holidays!

The compiler that I wrote was, in my personal opinion, a pathetic failure. Though we were able to generate some x86_64 code that actually ran (given a bootstrapping program), it would crash on certain valid inputs. We were also unable to handle arrays properly; our calling convention was a nightmare (I now heartily recommend going with proven standards, rather than trying to come up with one yourself); and our register allocator was basically non-existent (it just spilled everything, assigning all ssa values to their own slot, and never re-using slots). On the positive side, it was able to do factorial, and towers of hanoi, so we nailed recursion!

The TA’ing gig was wonderful. I had great fun teaching the kids concepts, tricks, ways of thinking. It was my first time, so I occasionally gave away answers in my eagerness to explain, but overall I think I did a reasonable job. Some of the kids regularly came to my office hours, and thanked me for helping them pass the class (which felt really wonderful, I made a difference!) I ended up loving the TA work so much that I even let it take time from some of my other obligations (research, and my own classwork).

Given my experience, there’s one big thing that I’d change in the current system: I’d make discussion sections mandatory, and limit their size to about 10. This would make discussion an actual discussion, rather than just another lecture. I think the discussion sections should encourage the design aspects of the homework/projects. That is, we all gather round the table, and whiteboard a design. One of the things that I noticed in grading the programming assignments was that our students are sometimes really creative in their solutions (and not always in a good way). I think that we probably do a poor job of teaching design, because there isn’t really a quantitative scale that can be used to measure how good a design is. So, they need to practice for an hour each week, offer each other design options, constructively criticize by identifying holes in each other’s attempts (with guidance from the TA), until a satisfactory solution is converged upon. I don’t think our current system quite has the resources to do this though.

I still don’t get too much of a break though: I’d like to re-do the compiler, this time with a better design; I need to catch up on some neglected research; and I want to play around with Google’s new language Go.