Kelly Innes dot com    About

Committing

commits

There’s today’s snapshot of my timeline of GitHub contributions. I started teaching myself to program in late 2013, and around May 2014 I made a commitment to make at least one contibution to GitHub each day. In May 2015, I made it to a year of committing each day; as of today the streak’s up to 444 days.

These commits ranged from solutions to Programming Praxis and Project Euler problems to things like a Twitterbot, a little web BBS using Ruby and Sinatra, and – lately – a mixture of exercises from SICP done in Swift and projects for Udacity’s iOS Developer Nanodegree.

I started the streak writing code in Ruby. Lately I’m doing most of my programming in Swift. In the last year, however, I’ve written code in Objective-C, Perl, Scheme, and even some C, Common Lisp, JavaScript, and PHP. I learned a TON from reading great programming books, then trying to write and rewrite the code in different languages.

I read the Pickaxe constantly for months, each time absorbing a new feature from Ruby’s standard library or seeing a new way to do things (like the time I started to practice using Procs.) Recently I’m reading the objc book Functional Programming in Swift as well as the O’Reilly Swift Pocket Reference book, which are serving kind of the same function for my knowledge of Swift.

(Quick aside: it’d be hard to name all the other programming books I’ve read and reread, but two of the absolute best I read were An Introduction to Functional Programming through Lambda Calculus, which helped me really start to understand recursion and functional programming more broadly, and the Big Nerd Ranch book about Objective-C Programming, which taught me the basics of how computer programs use system memory.)

Reading’s no substitute for doing, though, and part of my motivation for starting a streak of GitHub commits was to make myself do the work required to learn to program. I never set up a commitment device or anything, just kept up the desire to continue learning and to continue seeing my “Current streak” number increment by one each successive day.

I first got the idea from hearing about that Seinfeld “don’t break the chain” thing on either the Ruby Rogues or iPhreaks podcast. This link has a good account of it; the gist is to “keep at it and the chain will grow longer every day. You’ll like seeing that chain, especially when you get a few weeks under your belt. Your only job is to not break the chain.”

I like this because it dovetails really well with something I that already worked for me about planning and achieving goals: viz., that one way to achieve a goal is to set a date by which you realistically want to have accomplished something, then work backwards to figure out how and when to do all of the incremental steps that you will need to take in order to have reach a goal. (Full disclosure: I first encountered this probably common-sensical way of thinking in a self-helpy-sales book I read when I left academia – namely, this one, which is worth the $5 or whatever it costs for a used copy.)

People who’ve completed Couch-to-5k might attest that this works. In fact, my absolute favorite current iPhone app is this 10k Runner app which turns the process of doing “Couch-to-10k” into something like a GitHub contribution streak. I’ve been running with it for the last few months – I just did the 5k, so I’m halfway there! – and I love how it helps break the larger goal into smaller, achievable parts and how it gives you encouragement and reminders along the way, like the reminder notification it sent saying something like “You should go for a run today!” when I got sick and missed a week of running. Experiencing just how transformative an app like this can be inspired me to learn iOS development in hopes of building something similarly cool.

A developer evangelist I spoke with back in the spring described my GitHub streak as “woodshedding,” a jazz term I’d not heard til then which is nicely explained here. Here’s the relevant quote:

Woodshedding is the nuts-and-bolts part of jazz, the place where you work out the techniques that form the foundation of your improvisational ability.

The term woodshedding in jazz means more than just practicing. It is a recognition of the need to sequester oneself and dig into the hard mechanics of the music before you can come back and play with a group in public. There’s something philosophical, almost religious, about the term. The musical treasures of jazz are not easily accessed. You have to dig deep into yourself, discipline yourself, become focused on the music and your instrument, before you can unlock the treasure chest.

Now that I’ve mastered many of the mechanics of programming on my own, I’m really eager to work with people to build great stuff. To help get there, I enrolled in Udacity’s iOS Developer Nanodegree in June, an online bootcamp type program for building iOS apps.

Two months after starting, I’ve completed three of the Nanodegree’s five milestone projects:

  • PitchPerfect, the introductory app to help students learn how to write Swift, use Xcode, and leverage libraries
  • MemeMe, the capstone app for the UIKit Fundamentals course, and
  • OnTheMap, which helped me learn about networking, MapKit, and using APIs in iOS apps.

I’m currently working on the fourth app project using Core Data, and I’m also planning my own app for the fifth project.

I’m almost ready to “play with a group” – to build things together with other talented people – and I’m looking forward to my next 444 days of GitHub contributions!