Four days ago, I sat in a room with several of my favorite people and watched my colleague and mentor, Will Byrd, defend his thesis ("Relational Programming in miniKanren: Techniques, Applications, and Implementations"). I had never been to a thesis defense before, and I thought that the whole thing might be over my head. But after a year of B521 and B621 and helping teach C311 and writing some miniKanren programs and spending an inordinate amount of time hanging around Dan's office, I found that I actually understood most of it! To my surprise and delight, Will even mentioned my name near the end, when he was listing a few of his many ideas for future work and a few of the people who would be getting under way with that work soon.
When I took B521 last year, I was amazed by how, when we worked on miniKanren stuff, Will or Dan or Ramana showed up every day with some new bug fix, some new insight. This was no boring, freeze-dried curriculum they were feeding us. We were actually watching them do research...but wait! That's no way to teach a course, right? They'd come in and say, "Forget what we said last time. Pay attention to this, instead!" They'd find bugs in code they'd just spent the previous day convincing us of the correctness of. Each class period might make the previous one obsolete. It was exciting, but it was also unsettling. So, when Dan asked me to teach C311 this spring, I remember secretly thinking, "I'm glad that we're getting all of these miniKanren issues out of the way now, so that I'll have a nice, stable, certain curriculum to teach next year."
Of course, it didn't happen that way at all. Will continued work on his dissertation, ramping up the pace; Ramana went back to Australia, where he was still completing his undergraduate (!) degree, but he continued to contribute as actively as he had been doing before. (I'm not sure Ramana ever sleeps.) And Dan and our B621 class continued to put miniKanren through its paces. Sure enough, when April arrived and it was time to start teaching miniKanren to C311, there was a lot of new stuff to teach. I tried to insulate the students from the fact that miniKanren was in flux -- just because I was standing on shaky ground didn't mean the students had to be -- but our students aren't dumb. We did give them code that we later found to be incorrect, and we had to 'fess up and revise it. We discovered numerous holes in our test coverage thanks to buggy programs they wrote that still snuck past the tests. And on and on.
And what I began to realize was that this was how it was going to be. It was not going to be nice and stable and certain for a long time. And I realized that this was good for me, because every uncertain moment was a chance for me to do something -- a chance for me to contribute. And I had somehow managed to show up at just the perfect moment for this. What luck!
So here I am, at the end of my second semester of grad school -- but I don't feel "done" as I did at the end of my first. Of course, that's partly because I'm not done -- I got an incomplete in B621, along with most of my classmates, and in the next four weeks I need to complete a project in order to receive a grade for the course. But in a larger sense, it's beginning to sink in that there is no "done" in the way it used to be defined. My first semester was a lot like undergrad: it was self-contained, with sharply delineated edges; it wasn't overwhelmingly hard; and I got to feel smart when it was over and I had done well. This semester has none of those qualities. It's hard, and it's messy, and it's spilling out all over the place, and I'm still waiting for most of my grades, and even if they're good, it won't matter very much. But I have something precious that I didn't have before: things that I couldn't imagine being able to do before seem possible now. Becoming a good teacher, becoming a good researcher -- I can actually see a path to get to those things now.