Deliberate Software

With deliberate practice come consistent results

Challenge - Code Every Day

You know what will make you a phenomenally better developer? Deliberate practice. How do you get such practice? By doing it every single day. Random bursts of effort over the odd weekend will gain you practically nothing comparatively, even if the time investment is the same. Your mind needs repetition and consistent effort to improve. So what do you want to get better at? Pick your highest value subject: vim, regex, functional programming, meta-programming, OO, TDD, async co-routines, threading, graphics, web, etc, etc, and practice it every single day. Easy as that.

When GitHub first came out with the “streak” feature on the front page, I realized it was time to stop my binge coding on the occasional weekend and start a system. Inspired by recent successes working out every day, I decided to code every day for a year.

I quickly realized that anything requiring detailed plans and designs is harder to do. Working though a book, on the other hand, is easy to start and stop. I started working through a book I had tried to read before: Let Over Lambda.

Let Over Lambda is intense, filled with deeply complex concepts written in Common Lisp, a language with which I was only passingly familiar. But I managed to get through it without hardly any difficulty. How did I do that?

I got a cheap netbook, and started to code on the train ride home. Interestingly, without any internet, I was much less distracted, and could just sit down and be in the zone within the minute (this from the guy whom it takes 20+ minutes to get in the zone at work). With only a limited span of ~25 minutes, I had no time to waste, and without people to talk to my brain just falls into it. I can only pinpoint a few times I could not get into the zone, and those were extreme circumstances of exhaustion or illness.

In ten months, I have:

  • worked through Let Over Lambda once and read it twice
  • worked twice through the PLAI programming languages book (once in Scheme and once in F#)
  • read Clojure Programming, F# 3.0 Programming, and am currently in Real World Haskell
  • completed the exercises up to chapter three of SICP
  • authored a small Clojure library for run time type checking (don’t use mine, use Prismatic’s)
  • prepared and given a two hour talk about macros at a local meet-up
Pretty incredible for only ~25 minutes a day! That is more programming books than I had read in the previous 2 years. I have improved mightily in such a short time, and it does not feel stressful in the least. Now, when I get home, if I feel like watching movies, cooking, or playing board games/Dark Souls all night, no problem! I can relax knowing I have accomplished my goals for the day. All in all, the last ten months have been incredible: some of the most rewarding, relaxing, and fulfilling months of my life.

Before you scoff and point out that not everyone can take the train to work, consider this: get a portable computer, load up your environment, tools, and some pdfs. The next morning, leave for work ~25 minutes early. You will probably get in way sooner due to the decreased traffic (now you have earned back that time). Sit quietly in your car, and without the distractions of internet or other people, knock out a little programming. Maybe start with SICP (the best programming book I have ever read). See how much you can read and do before work starts. Do that for a month, every day. I guarantee you will learn something amazing.