Practicing Design and Coding


How do you practice coding? How do you practice design?

This is an interesting topic that Pragmatic Dave Thomas and I (/\\ndy) have struggled with more than a few times. Dave’s recent blog piece on Verbs touched off a new conversation (and some interesting blog postings by Glen, Brian, and Chad). Chad’s post got me to thinking.

I’m a fan of the Jamey Aebersold CD’s (used to be tapes) with which you practice jazz improvisation. These tapes provide rhythm section backing that you can solo against in various challenging ways. The question then arises: can you practice coding and design in the same way that musicians practice?

Chris Morris chimed in on this discussion, writing:

Writing code is much more like songwriting than performing…it’s hard to make songwriting practice tools (What would this look like? “Write the changes to Autumn Leaves in all twelve keys”?) No, I don’t think transcribing the changes would be appropriate—that might be useful as a mechanical exercise, but not as a creative exercise.

So what would songwriting practice look like? Maybe it would include exercises like these:

  • Modulate from random chord X to Y over N bars in a given style
  • Given a set of chord changes, write a melody
  • Given that same set of chord changes, write another melody.
  • Evaluate each melody in terms of emotion, tension, relaxation, pitch center, distribution of long and short notes, unity and variety, etc.
  • Add a movement to an existing piece
  • Arrange a given piece in a different style (e.g., a Bach chorale version of “Autumn Leaves”, or a Reggae version of “America The Beautiful”)

Could this map to design and coding? Yes, I think it can. The ideas above follow a basic premise:

  • Given a scenario (some portion of existing work), solve a particular design challenge.
  • Given that same scenario, solve that particular design challenge a different way.
  • Evaluate your solutions against several metrics—there’s no right and wrong, necessarily, just see how it feels and what the implications of each solution might be.
  • Add a feature to an existing program
  • Change an existing program along some given axis

These sorts of exercises have the benefit that you don’t have to create an entire application from scratch just for the exercise, and that you get to exercise a particular creative skill at a time.

The trick of course is to make the scenario’s realistic enough to be helpful without getting bogged down in particular details.

The Aebersold series succeeds because it makes the exercise fun, limits the damage you can do (it’s in the privacy of your own home), and the scenario’s are “realistic” enough. The output of practice itself is disposable; you wouldn’t record your practice session nor would anyone else want to hear it. You then apply those newly-strengthened muscles to the real gig. Can we achieve the same thing to practice coding and design? Yes, we can.

Watch this space.

Book cover

⬅︎ Back to all news

Latest News

Recent Articles

Andy Hunt lecture/talk Andy Hunt lecture/talk Andy Hunt lecture/talk Andy Hunt lecture/talk