I recently noticed a set of suggested questions from Hacker School on what one might think about for check-ins. I had forgotten about them.
What code do you plan to write today?
What code did you push to GitHub yesterday?
What's your biggest blocker right now?
What was the most surprising or interesting thing you learned yesterday?
Do you think your current project is making you a better programmer?
What are you afraid of?
Looking at this yesterday, I was most attracted to the last question. For a variety of reasons, I have begun to refer to this period in my life as My Summer of Facing Fear.
I immediately recognised that I have been avoiding writing an LDA Gibbs sampler, even though I have wanted to do it for years, and have thought about it many times while here. Why I appear to be afraid of it, I have no idea. It's not that difficult an algorithm.
I have tried starting it here twice. The first time, I started with the data flow, and got distracted by issues of tokenisation, which is a topic I have grown to love. The second time, I started more-or-less top-down, and began to get overwhelmed with hypothetical data structures and how they would interact. Had I forgotten the hard-earned software engineering lessons I faced in writing my thesis work?
I decided that my fear should be the guide to the process. I needed to take the bull by the horns, and tackle the most error-prone, central piece first: the update process.
My progress was a bit slow. I was prone to distraction, but I simply noticed it when it happened, reserved judgment, and gently brought my attention back to the work. It was a meditation of sorts.
Here's what I achieved:
Wrote 3 unit tests and got 2 of them to pass, the third is almost there.
Studied the update equations carefully to make sure I understood them exactly. This entailed cross-checking several sources, and translating variables into words. I think I finally have these equations in my notes in a form I can reliably unpack.
I also attended the SICP study group, set up by another HaScher. I've long been inspired by SICP, but although I have gone carefully through chapter 1 three times over the years, I have never gotten much further. Now I see that I was suffering from a parasitic perfectionism toward it. It was very satisfying to work with people who want to take it casually, skip parts that don't meet our educational goals, and get out what we want at a gentle pace. I'm so glad that someone organised this in such a sane way.
This brings into clearer focus the problem with my previous relationship to education. In the past I have deferred overmuch to authority. I believed that the authors of a book, or the teachers of a course, knew the true way to learn a subject, and that my job was to follow their path to the best of my ability. Of course, a recognised expert usually does have valuable insights into the question of what constitutes knowledge in the area of expertise, but his or her guidance is only that. From this vantage, my prior, unrecognised assumptions feel almost ridiculous.
The ability to trust in my own path is likely to be the most important skill I have gained at Hacker School. It is transformative.