I’m learning to type and it’s infuriating. I’m hovering around 25 WPM right now and that’s without using half of the keyboard. It might not be the most prudent thing to do when learning a new language and Vim, but If not now, when. The long-term benefits far outweigh the short-term hassle. Over the next couple weeks, in addition to any of the code I write I plan on practicing typing the correct way everyday until it becomes second nature.
I finished the Clojure Koans today, but feel no more confident to begin TicTacToe. I’ll make my first go at it tomorrow and likely won’t get very far, which is fine. Hopefully I can get some tests to pass.
I also read the first three chapters of Agile Principles, Patterns, and Practices. From the first chapter the thing that sticks most in my mind is the strong emphasis on delivering working software as a measure of progress. Having worked with many aspiring entrepreneurs over the past 3 years, I’ve always emphasized doing some sort of work to gather real-life data. Modeling will only get you so far, and often time it takes you in the wrong direction.
From the chapter on Extreme Programming (XP) I appreciated points made on paired programming and a shared workspace. Even though I’ve never worked on a development team, I am a big proponent of what I’d generally call well-roundedness or the idea that a breadth of knowledge on a multitude of areas is as important as specialization in a specific topic. In other words, erudition. When everyone understands what’s going on holistically, when everyone is concerned with and cares about each aspect of the system, I’d imagine that higher-quality is a natural byproduct.
A corollary of erudition is the manifestation of a complete system into a well-fitted metaphor. I’m reminded of Richard Feynman’s anecdote about knowing the name of something and knowing something. There’s also his so called technique for learning as well as the ADEPT method. Analogy is not surprisingly the first of the requirements, it provides an imperfect but useful mnemonic, that helps provide a good bird’s eye view of something. I think the practice of metaphor in XP is similar, It provides a common lexicon to talk about something very complex. Although the resolution of the metaphor might not be crystalline it can still be extremely helpful in getting a better sense for the big picture.
A couple more thoughts on simplicity and refactoring. While easily a banal platitude, the mantra of simplicity when undertaken with rigor is more of a check on rampant assumptions and killing of sacred cows. It’s a constant gentle push to return to a beginner’s mind and cast aside one’s ego. Refactoring, to me is more a practice against a habit of procrastination, and because it’s such a transferable concept, I think it’s very valuable. For code, and indeed for most of what we endeavor in life, the easiest time to fix or better something is now. So why wait?