Improvement Through Iteration

After reading Jeff Atwood's post "We Are Typists First, Programmers Second" and hearing my co-workers ask me how fast I typed for the umpteenth time, I decided to take one of those typing tests and found out I average around 100 words per minute (wpm). Not bad.

The last time I took a typing test like that was 15 years ago, and I was typing around 50 wpm. Back then, my keyboarding experience was only about 2 years. Before that, I only had keyboard access if I was lucky.

When I was 23 years old, I was drafted by the Cleveland Indians to play professional baseball. 19 years prior, I had my first at-bat in T-ball and was tagged out after reaching first because I didn't know the rules - you know, the one that says you have to stay on the base.

Besides bragging rights, I do have a point: persistence, practice, and repetition are a few of the key ingredients to successful skill improvement.

There are other ingredients of course, but I don't know anything that refines our skills as much as those three. Genetics and talent play a role, of course, but without repetition and practice we get what's called "rough around the edges". This means your talent is only good if you polish it.

Of course this applies to software skills as well. Coding, designing, managing - they all require repetition to get better. Or put another, probably more relative way, they all require iteration to get better. If we think back to when we first started programming, perhaps in BASIC, most of us created some "Hello, world" variation as our first foray into the software development world. We had one line:

10 print "Hello, world"

And that was it. So when we ran our program, we saw "Hello, world" printed to the screen, and our program exited.

Of course, that wasn't enough. We wanted to make a game. (Isn't that how most of us start?) But we quickly realized there wasn't a rungame command, which meant we had to learn more about the language and its programming constructs.

To do so we started adding loops to print more "Hello, world"'s to the screen. Then we added random number generation with if-then-else blocks to vary how many "Hello, world"'s were printed. After that we played with receiving input from the user by asking for a name, which would then turn into "Hello, John". And then, we became bold: we made a function called rungame that would do all of it for us.

At this point we felt ready. We went through iterations of our basic "Hello, world" program and through the process we had acquired enough skills that we were confident we could build our first game: "Heads or Tails?"

Of course, this took a few iterations, but eventually we had it: our first game. And we showed it to our family, and maybe friends, and nobody understood the big deal.

Through the process, through the iterations, we acquired a new skillset while also having that sense of accomplishment for completing our first game. Without even knowing it we had persistence, we practiced, and we had repetition.

We were now better at coding and design than when we typed that first "Hello, world" program. We understood the big deal because we knew that going through those iterations was not an easy thing to do.

Back to today, we can take this a step further. Ever see a system that was designed perfect the first time? Me neither, but that system that has been through several design iterations? Now that was a good system. How many times have you redesigned (or wanted to redesign) that application you're working on?

See - repetition, persistence, practice - they all lead to improvement, whether it's our personal skill sets or that complex software system we're trying to design. We just have to be willing to be persistent, make time for practice, and go through the repetitions. It's not easy, but if it was, then everyone would understand the big deal.

3 Comments

Recommended Comments

*claps* Bravo, I completely agree. Case in point, I've been working on a Snipes clone for a while now (see journal), and I recently started re-designing it from scratch. I feel that my current system, although very basic as of yet, is far better designed than the last iteration. ^_^