"How's it going?"
"I'm working on The LiveJournal Post That Would Not Die."
"The 2009 year-in-review-so-far one?"
"So, like...is the general tone of it...um..."
"The working title is 'Year of Fail'."
My 2009 started exactly like my 2008 had: with a snappy New Year's Day four-mile run that was intended to be Alex oniugnip's and my first day of marathon training. The difference is that when we did that in 2008, it actually culminated in, you know, eventually running a marathon. In 2009, I had to give it up after not much more than three weeks.
At first, everything was going fine. When the semester began on January 12, the two days per week of cross-training fell by the wayside, but I had always figured those were kind of optional, anyway; I was still keeping up with the scheduled runs. After another week and a half, though, I didn't have time for the weekend long runs, and that was pretty much the end of it. Last semester, this wouldn't have been a problem. But last semester, I wasn't teaching anything, and all of my courses were introductory courses (the only kind I could take, then), and none of them were of the 'P' designation, which, according to my department, stands for, um, "programming-in-the-large". By contrast, this semester I'm teaching C311, and none of my courses are intro courses, and one of them is P523 Compilers. No matter how many times I do the arithmetic, there only seem to be 32 waking hours per weekend, and I need, oh, four of those for household chores and cleaning and laundry, and two for grocery shopping, and one for complaining on the phone to Alex about how I need all of the remaining 25 to work on my compiler.
If I'm not working on my compiler, I'm working on a homework assignment for C311 -- either actually doing the assignment, grading it, or talking to a student about it. Or all three at once. The assignments are substantially the same as the ones I did for B521 last semester, so they ought to be easy, and for the most part, they are. But last semester, I was doing the homework so that I could turn it in, which meant it had to be good, and now I'm doing it so that I can teach it, which means that I'm not supposed to make mistakes. I could talk to you for a while about how much I've learned this year about the distance from "good" to "no mistakes", but I believe the agreed-upon jargon is "nontrivial".
If I'm not doing either of those things, I'm reading something or writing something or LaTeXing something for my theory course, B502, in which I'm holding on by the skin of my teeth.1 And if I'm not doing any of those things, I'm definitely sleeping. Unless I'm in rehearsal, in which case I'm only probably sleeping.
If that were all that were going on, I'd be okay. The problem is that I'm also supposed to be taking another course: B621 Advanced Programming Languages. I say "supposed to be" because, due to [SEE ABOVE], I pretty much never manage to get anything done for 621. Ever.
I know now that I signed up for too much, and that some things were going to have to slide. But it would have been nice if I could have distributed my letting-things-slide a little more evenly. The trouble is that if I don't get my other stuff done, the consequences are extremely clear. For instance, if I don't get my compiler to pass the test suites that come with each assignment, then I don't pass the course. If I don't grade a C311 homework assignment, then I've personally let fourteen people down in a concrete way.2 If I were to miss one of the War Requiem dress rehearsals, then I could just as well not bother showing up for the performance. Cause and effect. It's very simple. But in 621, it's not like that. We don't have anything as well-defined as "grades" or "exams" or even "assignments". Instead, every time class meets, we're given a problem to solve. All of the problems are described verbally. We can only ask limited questions. We're discouraged from reading about the subject matter on our own, because we might stumble across the answer to something and spoil the fun.3 There are vague or nonexistent consequences for doing or not doing any particular problem. The problems are hard. There have been fourteen so far. I haven't been able to finish any of them. Most of them, I haven't been able to start.
By all accounts, 2008 was an amazing year for me. I ran a marathon, I went to Japan, I got a buzz cut, I made a graceful exit from my job, I did all the SICP chapter 1 exercises, I did the ICFP contest, I did tai chi, I went to OSCON. I got myself and my belongings settled in Bloomington. I made friends. I made a budget and stuck to it. I got into a good choir. I studied for all of my theory exams by going running on the night before, and I aced them all. I was accepted for GWWE. There was actually a period of a couple of weeks in the late fall during which I was making biscuits from scratch every day.
By comparison, 2009 feels like Year of Fail. I very rarely have time to cook. I haven't been keeping to my budget, largely because of all the prepared food I buy due to never cooking. In turn, I think my health is suffering due to eating a lot of prepared food. I was turned down for the Google internship I interviewed for. I didn't hear back from any of the other internships I applied for, except for "we received your application" form letters and one "sorry, we forgot to mention that we can't accept non-European applicants" letter. Three days ago, I was turned down for the Anita Borg scholarship. I just had to tell Schwern xwrn that I couldn't work on the project he asked me to work on this summer.4 I don't deserve to pass 621.
But it's going to be okay. Here's how I know.
On the very first day of B521 last September, Dan asked us each to rate ourselves from 1 to 10 on our proficiency with each of the languages that we knew. I gave myself a 7 for Scheme then. Now I know that that number was inflated.5 I was really probably about a 4 at the time.
When we did the ICFP contest last year, Alex was absolutely flat-out better at Scheme than I was. I didn't talk a lot about that, but I remember what it felt like, and I'm glad, because it makes it possible for me to know that now, I'm absolutely flat-out better at it than he is. Now I'm a 7. I am a good Scheme programmer now, and it's in no small part due to taking Compilers and to teaching C311. I'm not trying to brag. I didn't specifically set out for this to happen. It's just kind of what happens when your job is to hang out in a limestone fortress and read Scheme and write Scheme and talk to people about Scheme all day long, and occasionally go sing, and then come back and write some more Scheme. The money isn't very good, but damn, I really have a great job.
When I was in Portland last week, Paul stereotype441 told me that he had written a little domain-specific language for his job, and that it was lexically scoped. I told him that I'd be proud of myself if I could look at the implementation and see why it was lexically scoped. (He told me that if I could do that, he would be proud of himself.)
We sat down and looked at it, and it turned out that, without realizing that that's what it was called, Paul had written an environment-passing interpreter. And that without realizing that that was what he was doing, he was taking something that used to just be data, and treating it as a program.6 Eight months ago, I wouldn't have been able to know those things. In fact, eight months ago, I probably wouldn't have been able to have had a conversation about those things. Oh, yeah, and not only was I able to see why his language was lexically scoped, I was even able to sort of explain what he would need to do if he wanted to implement dynamic scope.7
And today, I made biscuits. I can still do it in half an hour from ingredients to first bite, and I can still do it without a recipe. And afterward, I even made it to my own office hours on time.8 Everything is going to be okay.
- Although, according to the midterm grade distribution that our professor just posted, it appears that the entire class is holding on by the skin of our collective teeth, so I don't feel so bad. (I got a 54 on the midterm, which puts me well within the top half of the class.)
- On the other hand, I suppose I risk letting fourteen people down when I do grade the homework, too, so I might as well not worry about it, 'cause I'm screwed either way!
- If this were the case in 502, I would have given up a long time ago. Wikipedia, Kozen, and the second half of Sipser are getting me through the course.
- This is the one that really burns. I really wanted to do it. I'm actually the one who brought it up in the first place, and Schwern has been extremely encouraging about it. But now I'm too busy to write a proposal for it. Even if I managed to squeeze out the proposal, the specter of having to keep right on working when summer arrives is terrifying. I'm looking forward to a low-responsibility summer so that I can catch up on everything I'm not doing for 621.
- Although another thing I know now is that everyone inflates that number. You should see what some of the undergrads put down.
- Incidentally, it was XML. Also incidentally, what else is executable and dead easy to parse and looks a whoooole lot like XML except for being waaaaay less verbose? Three guesses!
- Paul: "Shoot myself?" Lindsey: "Well, yes, but after shooting yourself..."