Hard Work and Practice in Programming

At the Program For the Future event commemorating the 40th anniversary of Doug Englebart’s “mother of all demos” in 1968, I was privileged to hear an inspired rant by Alan Kay about the unwillingness of people to work hard to learn new skills. I’m quoting from memory, so the lines below are not exact, and there’s no way I can convey the wonderful sense of outrage expressed in Alan’s voice, but I hope you can imagine it:

If some entrepreneur introduced the bicycle today, no one would fund him. You have to actually learn how to use it! …I saw a controller for Guitar Hero that costs a couple of hundred dollars. You can get a decent electric guitar for that price. But you’d have to actually learn something to play it!

There’s a long arc in computing that teaches us how much we gain through advances in ease-of-use, with the iPhone being the latest breakthrough success. But it’s important to remember how much we lose when we think that ease of use is everything. Many things worth doing are hard, requiring a great deal of practice before you achieve mastery.

Shortly thereafter, I was intrigued to see an interview entitled Bjarne Stroustrup on Educating Software Developers (via Slashdot) sounding the same theme:

High schools could teach students to work hard at something (just about anything), to search out information as needed, and learn to express their ideas in writing and orally. Project-based work is good for that. Exactly which programming language is used for software is less important, but the aim should not be to make tasks as simple as possible but to challenge students.

And of course, practice, specifically “10,000 hours of practice” during childhood, is one of the themes of Malcolm Gladwell’s new book, Outliers.

The interview with Stroustrup provoked a great discussion on the O’Reilly editors’ backchannel. It was so juicy that I wanted to share it with all of you.

Simon St. Laurent:
“One aspect of learning programming that often eludes both students and teachers alike is the importance of practice, of actually working through all of these formal structures we teach. Most of our books, in a way, offer a promise of learning that avoids the slow repetition of practice.

I’ve worked in other fields where practice really mattered. I hated to practice exercises on trumpet as a kid, but as I return to it as an adult, I’m actively seeking exercise books to play. It’s the only way to get the skills back, even though I “know” how to play all of these things. In woodworking, it’s painfully clear that the best way to learn is to do, and do a lot, preferably without taking a long time in between projects. (And watching little Sungiva figuring things out and trying them repeatedly gives a new sense of the importance of practice.)

In computing, though, we often assume that readers will learn by reading, trying, and a bit of fiddling. We even assume a whole category of readers who will assemble applications by cutting and pasting code together without much understanding of what they’re doing and how to smooth the rough edges.

Some of our books incorporate practicing the kinds of thought we’re teaching. Head First even incorporates repetition, though it tries hard to give readers variation as they go over the same territory. Our Learning books sometimes have exercises, though resistance from authors (myself included) and a belief that readers aren’t likely to actually use them limits their value.

The most interesting place I’ve seen this kind of practice is in the “homework” for the O’Reilly School of Technology’s Java course. It’s one detailed exercise per lesson, and then it gets “handed in”. There’s a lot to think about in each of those exercises, and given the context, learners will actually do them.

“According to Dizzy Gillespie, it takes ten years of practicing your butt off to achieve Mastery. His statement has been backed up by scientific research which shows that to reach a very high state of mastery, a task should be repeated about a million times, which takes about ten years. Better get busy!” (Sound the Trumpet, pp 67-68)”

Mike Loukides:
“That’s a good point. One of the things I noticed when [my daughter] Alexandra got
into the 9th grade math class was the emphasis on practice. I had
been teaching her algebra, but I’d explain some concept and give her
3 or 4 problems to solve and say, “Good, you understand that.”

The Algebra 1 class that she’s in is doing more or less the same
concepts, but they’ll do something like solving equations with
absolute values, and she’ll come home with a homework set of 25
problems. The next night, there’ll be 25 slightly more complex
problems. The next night there’ll be 25 more slightly more complex
problems, with some simpler problems thrown in for review.

There are a number of things I don’t like about the way mathematics is
taught, but I think they’re profoundly right about this. You’ve got
to do these things until they become second nature.”

Beth Freeman:
“We are actively working on related ideas in Head First now – looking
at ways we can extend the book experience with online experiences that
will include many ways to continue the practice that readers begin in
the books. And, as you identify, making it fun, making it feel like
playing is an important part of the motivation to get people to
practice. Game elements can really encourage this – the whole idea of
getting to the next level in a game is basically promoting practice at
that game until you get good enough to get to the next level. This
idea applies to learning anything, and making those levels explicit in
a way that is fun and motivates people is key. (e.g. the various
colored belt levels in martial arts). What are the equivalent ways of
measuring competence in programming and technology that encourage and
motivate (and don’t feel exclusionary or too hard to even try)?

We have a few ways that Head First readers can continue their practice
online at the Head First Labs site now, but it’s pretty limited.

One aspect of practice that is really important that I think is worth
mentioning is that most true creativity comes from people who have
done a lot of work in their field. (See Explaining Creativity by
Sawyer and On Intelligence by Hawkins). Most of that work is
“practice” – getting to a level of expertise so that we can think more
abstractly about whatever the topic is and combine old ideas in new
ways, which is the heart of creativity. In other words, if you’re
focused on learning the little details because you haven’t practiced
enough, it’s unlikely that you will be able to see the big picture in
a way that will allow you to invent / create new ways of doing or
thinking about that topic.”

Brett McLaughlin:
“I think there are two key points that Beth mentioned that, in my
opinion, have to enter any real discussion of practice (I speak as a
pedagogical fanatic, but also as a musician who still manages two or
three hours a day on his instrument):

  1. Practice must be proportional to the goal.
    Practice itself is rarely fun, especially in the early days. I
    disagree a bit with Beth that the practice itself is fun; but where we
    do agree is that the goal is crucial. I will play a lick at a speed so
    unwieldy that it stops being music, and play it at that speed until my
    entire family is yelling at me… IF and ONLY if the lick at
    performance speed is truly exciting. So the practice itself is awful,
    and boring, and terrible in many cases, but the end result is
    proportionate with the goal.

    But with most of us, the goal — passing a class, or getting a better
    job, or playing like Jimi or Mayer or Miles or Rachmaninov — has to
    be within reach, and attainable, or we’ll give up. And yes, practice
    is one of the trickiest things to encourage and/or simulate because
    repetition is something technology is great at DOING, not PRODUCING.
    Think about it: technology ultimately came into being to help us AVOID
    repetition. So it’s a big problem, and one I have ideas about, but am
    still formulating enough to write and speak on.

  2. Practice must, over time, simulate deeper understanding.
    Good practice, over time, connects ideas. Bad practice, over time,
    only creates muscle/mind memory. Practice structured correctly will
    eventually create a fluidity with the mechanical components of [insert
    discipline here], and free the mind up to consider the bigger picture.
    Practicing a scale in a particular configuration enough reinforces
    tones that are appropriate over certain chords, the rhythmic patterns
    available, and allows the mind to create melodies and play those
    melodies with little forethought. Repetition without a correct
    structure, though, will leave a musician hobbled and trapped within a
    pattern, unable to be creative.

    Alexandra’s successively complex problems are creating a mental
    landscape of absolute value. By problem 20 (or 10, or 5), she’s
    stopped thinking about mechanically solving the problem, but is
    instead connecting the methods she’s using with the methods she used
    for the last problem set — and the ones before that — and is
    creating a math understanding that’s deeper than how to solve a
    particular problem.

    Think about it this way: give a student enough structured binomials to
    multiply, with a reinforcing organization, and they will at some point
    come up with FOIL on their own. It’s simply a fact… if the practice
    is correctly structured, and if the repetition is great enough to
    allow the mind to wander a bit, and make deeper connections.

    Mini-conclusion: Repetition MUST be connected to a deeper understanding

It’s my opinion that we often think we can reach the second goal
(deeper understanding) through purely qualitative means: better
writing, better speaking, better visuals. But there’s got to be SOME
element of quantitive means, too. I think we can reduce the number of
repetitions through careful structuring and reinforcement, but that’s
reduce, not eliminate.”

Mike Loukides:
“That’s a really interesting insight: technology is all about
*avoiding* repetition. I don’t write a program until I’ve done
something a few times, and don’t want to do it again. So at some
level, we’re talking about technology that forces us to do what we
usually use technology to avoid. Which means we’re making technology
do what it really doesn’t want to do, what it wasn’t designed to do.”

Simon St. Laurent:
“While there is a fundamental problem there – technology teaches us that repetition is bad – I don’t think that it’s a matter of misusing technology.”

It’s mistaking facts about technology for facts about us. It’s true: teach a program once, and it will do what it does forever, the same way, until the context changes and it breaks. Teach a person once, and you’re nowhere near done. Of course, we tend to adapt better to context…

“The question is *what* you’re practicing. The Art of Agile Development has a
concept of etudes, which should be familiar to anyone who’s played piano or
recognizes Chopin. They’re small exercises suitable for repetition and
reflection as a whole team during a lunch hour. Unlike the potential (and
silly) exercise of writing a for loop or a fold or an iterator a hundred
times, they study how you communicate as a team, how you consider design
problems, and how you prioritize and reflect.

You could consider the retrospective portion of agile development — performed
each week at the end of an iteration — an opportunity to reflect on the
week’s practice and make the higher connections more explicit. In one sense,
reflective iterations are a way to turn the often unorganized and chaotic
activity of software development into structured practice. That’s not a

Beth Freeman: “This is a great way to describe Design Patterns, which are essentially
patterns that emerge after a lot of experience solving similar
problems in similar ways (ie, practice).”

Scott Gray:
“So, I think we’d all agree that you can’t learn to program without actually programming. Just like you can’t learn to drive without actually driving. You can’t learn math without doing math. Yet, one of the hardest things to accomplish in teaching is to get students (end users) to actually program or do math or work on the skill it is they are trying to acquire.

Of course, there is a set of people who who inherently understand that they need to program and practice in order to learn. Evidently some or most of O’Reilly’s book customers understand this. If they are buying the book but not actually working on a computer then I guarantee they aren’t learning to program….they might be learning something, but it isn’t programming. Until they actually have built something and gone through the entire process of building something they simply aren’t a programmer and aren’t likely to be. I disagree with Bret here. Programming and practice can and should be rewarding. If it isn’t rewarding to students to make programs then they are not likely to become good at that skill (same goes with Mathematics, Physics, etc.)

So, what Simon didn’t tell you is that what we do [at the O’Reilly School of Technology, which Scott leads] is set up situations where we get students to do work and at first do small programs that demonstrate the concepts being talked about in the content. We don’t discuss anything without them doing an example. It also turns out that if you set up the situation just right, you can get close to 100% of the people DOING programming in order to learn programming. When they build these programs and see it work and know they created it, then they gain a sense of ownership over the skill they are learning which prepares them to do a project without our guidance which is what Simon was telling you about.

It’s also important to have instructors there to help students through the frustrations they are likely to encounter when learning. Our instructors are their coaches. They coach them through the process, motivate them to work it out themselves and solve that problem they’re having because isn’t that what a programmer is someone who can deal with a situation and work on it until the program does what it’s designed to do.

People who can go from novice to expert with books are actually quite rare. It doesn’t seem like they are rare to O’Reilly since these are the types of people you’ve been selling to all along. However, if you’ve ever taught at a University you know that maybe 2% of the students you teach can learn themselves from nothing but a book. It’s not that this other 98% are dumb it’s that they haven’t learned how to learn a skill like programming or mathematics and have to be motivated to do kind of work they need to do to learn. Unfortunately, in most courses students do the minimum amount of actual practice that they can get away with because it’s not been made available in a form that gives them *ownership* over the process.

What we learned at the University of Illinois Math & Mathematica project was that properly used the computer can be used to not only get students working and practicing but give them ownership over the material as well. OST is basically replicating this same pedagogy that works for those Mathematics courses. The recipe is to merge content and tools in a way that fosters student activity, and to provide coaches to give students positive feedback and to help them through the rough spots.

At this point I could go into the business aspect of this and discuss the need for credits in order to hit the price point per student to pay for this process and also to motivate students to actually take these courses and work hard to finish them. Let me just say that for courses the extrinsic motivation of certificates and degrees makes it all come together so that both the students and the institution are happy and successful.

The nice thing about the book business, is that you don’t have to deal much with end users or observe whether they are actually accomplishing your instructional goals. The only types of feedback you get are reviews, sales, and anecdotes. Once you start teaching courses and adding assessments and feedback the expectations change. When you sell someone a book, if they don’t read it or they don’t pick up the skill they generally don’t hold the book responsible, it’s probably their own fault. However if they take your course, and they don’t learn it’s your fault. There are much higher expectations with courses, so you better get it right.

So far over the last five years we’re getting 80% of our students through these courses. The industry standard for online courses is 30%. We’re doing something right.

Allison Randal:
“I’ve been deeply impressed by Scratch in this respect.
The real magic of learning is to practice without realizing you’re
practicing. My son is learning to program not because he dutifully sits
down to work through exercises, but because he’s having fun creating
games and animations to share with his friends.

We don’t learn applications like Word because we set regular practice
sessions, we learn them because there’s something we want or need to get
done, and this tool helps us do it.

The same is true of natural language, you can drill and drill and drill
(and should, to build vocabulary), but will never really get the
language until you use it in active communication. And putting yourself
in a situation where the language you’re learning is the *only* possible
language you can use to communicate with those around you leads to
exponential leaps and bounds in language skills.

There’s a fantastic book on language learning around this subject, that
doesn’t teach you a specific language, it teaches you how to learn any
language (Language Acquisition Made Practical.) It includes exercises that are more
suggestions than drills, like “Have a conversation with your neighbor
about the weather”, so you gradually start to integrate the skills into
your life.

Scott Gray:
“By the way, ‘practice’ brings up all kinds of negative connotations like
‘drill’. Nobody likes drills do they?

Practice can and should be part of the process of creating something,
like Allision pointed out.

Again, I hate to seem like I’m plugging my stuff too much, but it seems
relevant to the discussion. Just this month one of our students won a
Yahoo! Hack day by adapting a project he created in one of our courses.
A lot of our assignments that they do and hand-in for feedback are
“Build something cool that incorporates X”.

Kurt Kagle:
“I’m watching my eight year old daughter go through a distance learning curriculum, and its been something of an eye opener from a number of perspectives. Jennie is a natural on computers – she figured out the level editor for SuperTux at the age of six, was navigating through web pages by the age of five, even though she wasn’t really “reading” yet (which says something very profound and disturbing about our assumptions about reading, I suspect) and has reached a point where she’s gaming the cheat codes in Sims, without really realizing that she’s actually using the programmer’s interface into the program and beginning to learn LUA. She also does most of the practice math exercises in the GCompris quickly and usually enthusiastically … especially if there is a game context associated with it.

The problems she face with this, however, are two-fold. She gets easily bored when forced into the school tempo, she finds physical writing to be frustrating (partially due to an abysmal first grade teacher, partially because of disgraphia) and overall she finds that repetition without some kind of contextual framework to be tedious in the extreme. My wife and I also tend to be at odds about the degree of computer interaction that Jennie should have; to me, what’s important is the conceptual practice that she could get just as easily with a computer, with Anne, what’s more important is that she do the repetition on the worksheets because she’ll have to do them that way in real life.

While I’m not sure what the resolution of this particular conundrum will end up being, I think it does point out a somewhat bigger picture. I like computer-based “practice” precisely because it both gives you a stronger mastery with a shorter feedback time and it provides a way to easily test that mastery, especially in areas where repetition is significant. Moreover, it provides a way to build simulations that can help you work through a problem.

This doesn’t mean that I approve of all educational software … I’ve written educational software for Fisher Price, Microsoft and works such as The Oregon Trail over the years, and some of it (the stuff I usually didn’t have a design hand in, generally, though I would think that) was pretty dreadful. On the other hand, the ones that worked well were the ones that provided an enjoyable context, a compelling narrative and enough awareness to determine when someone just wasn’t getting it, and all the repetition in the world wouldn’t help the student make the conceptual leap.

Yet this short feedback loop is very much at odds with the way that teachers currently teach – in part because they have 30+ kids to track typically, and as such,individually they can give these kids only a small percentage of time spent specifically with them. I think there’s also been this emphasis in recent years away from repetition, both because it forces everyone to move at the pace of the slowest student and because in an age of media bombardment, kids lose patience with boring repetition that has no context and a non-contextual feedback loop (the students get back their homework two or three days after they complete it, typically long after they’ve moved onto new work and only with an indication showing them that they got the answer wrong, not why). This is especially true in areas like mathematics.

There’s still a very strong Calvinistic ethic that permeates the educational culture, with one of the most insidious beliefs being that in order for something to be educational, it must not be pleasurable – that said pleasure actually distracts from the process of learning. The O’Reilly Head First books are a prime counterpoint to that – engaging, relevant, and generally fun, I think they are some of the best educational books out there, but there are a few people know who have told me that they don’t seem like real teaching books precisely because they are flip and irreverent. Teaching is best done with massive tomes set in thick type with few examples, interspersed with deep theory, according to this viewpoint, though I’ve noticed that while books like these may get bought, they also have a tendency to sit on the shelves.

While I’m not a huge fan of a lot of computer games (way too much violence) I do recognize that there are games out there that challenge people to think, that justify the onerousness of repetition with a tangible reward (achieving the next level) and that provide a context and narrative in a way that “story problems” usually can’t or don’t.

Case in point. One of my eldest daughter Kate’s teachers assigned a homework problem – design a simple floorplan for a house that had to fit within a lot (i.e., take up a certain area), one that had to include two bathrooms and two bedrooms at a minimum, then calculate the total surface area involved. Kate’s solution was actually pretty inspired – she powered up Sims, created a building from scratch, then began putting in the various walls, fixtures and appliances, working within the constraints that each of these occupied both square footage and had implications for plumbing and the like. Once she’d done this, she printed up the floorplan, measured the dimensions, converted the units into meters and calculated the area from there.

What I find interesting here was that she used the simulation to help turn what could have been a very boring exercise into an engaging one, and one that also showed that there was much more to the particular context than just finding a number. She still had to do the math (my insistence), but with the same simulation she could also determine a significant amount of other information that she wouldn’t have been able to do with the previous exercise (how much would such a house cost to build, how much to carpet, how much area did a staircase take up, and so forth).

To tie this back into the thread – she was playing, within the parameters established for that play. She gained immediate feedback that let her see when something worked or didn’t (a hallway that was too thin for people to pass, a bathroom that was shaped wrong for a bathtub, etc.), and in the end, she had something that she could not only play with but also share with her friends (Kate’s my social butterfly). She was problem solving (the use of a Sims game for laying out a house was not something I would have thought of), and she was practicing not just one skill, but several that were likely to be used in concert together.

Consider, for instance, the last time that you needed to just calculate the area of a plot of land. In the last several years, I think I’ve spent perhaps twenty minutes total involved in that particular exercise, after an investment of several years worth of learning the math to get me there. If I was an architect or a construction manager, I’d have done it on a computer using some kind of 3D rendering package, and if I was hiring that architect or construction manager, I’d probably fire them if I found that they were doing all of these calculations by hand.

Practice is necessary to learn a skill (it takes about a million repetitions, typically around ten years to master any given skill), but I think that we have become so fixated upon this necessity that we have to question if the skills that we are spending so much of our time and resource educating them are ones that they truly need.

If our children are going to live in a world heavily dominated by computer technology, is it worthwhile for us to be practicing skills that we’ll only use a handful of times in our life? When we have the means to make learning subtasks engaging and fun, does it really behoove us to make them dull, pedantic (funny how that has become a synonym for dull) and time-consuming?

My own belief is that our children are growing up having to adapt to a world of information bombardment. Children generally learn to adapt to their world despite our best intentions in trying to teach them how to live in ours. This growing disconnect is going to eventually rupture as the mission of the school system becomes fundamentally incompatible with their needs. I think we are now in a position to start doing something about that, to recognizing that practice, while necessary, can be readily disguised as play, and that learning should be challenging but engaging, not repetitious and dull.

Scott Gray:
“Repetition and drill sucks. Creation and discovery rocks.

I once saw a show on new learning techniques. They took a first or
second grade music class and told the students they were going to play
them a song and that they should come up with a way of remembering the
tune. Each of the children came up with a different method mostly using
crayons and construction paper. They created different ways to designate
the notes and loudness and spaced things to indicate the timing, etc.

Then they showed each student how the method they came up with mapped to
sheet music. According to the program I was watching this was really
effective in teaching children how to read sheet music.

What I’ve seen and first learned while teaching was that instead of
telling students things and explaining everything we can set up
situations where they discover what we want them to. For example, I
taught students about differentiation and integration by giving them a
problem about driving to the store and figuring out their speed without
a speedometer. (all written up in Mathematica so they could follow along
and experiment). Eventually they each came up with the main idea about
differentiation. When they were done….I’d say “oh yeah, what you just
discovered is what Isaac Newton discovered in the 1600’s, it’s called
‘Differentiation'”. It’s quite a powerful thing to create and discover
ideas whether or not it was created and discovered previously. After
all, Mathematics is about creating and discovering.

Computers and the internet can be used to scale the learning by
discovery paradigm.”

“Scott said ‘Repetition and drill sucks. Creation and discovery rocks.’

Now we’re starting to reach the opposite of what I was thinking this morning, which is always a great thing in a conversation. My point this morning was in large part that repetition and drill matter, and that once you’ve figured out that they’re actually helping you, they ‘suck’ a lot less.

It’s not just a matter of Calvinist ethics (sorry, Kurt) – it’s an opportunity for learners to move forward by doing things a lot, shifting ahead a bit at a time. The great leaps are fun as well, but build on smaller steps.

My concern with this is that while letting kids figure out what works for them is a good idea and that different kids will figure out different things, actually becoming good at things is about a lot more than discovering them or creating them.

Reading sheet music is one thing – learning to play an instrument is another. And I figured out what integration and differentiation were about long before I got to calculus, but I probably should have flunked my second semester of calculus because I just couldn’t wrap my head around how to actually make it work. (Which shocked me, because math up to then had just flowed naturally for me.)

Ideally I’d love to have discovery and creativity motivate learners’ actions – but they still need to motivate learners into a tremendous amount of repetition to get there.

Kurt said ‘Computers and the internet can be used to scale the learning by
discovery paradigm.’ Yes, and they can also be used to manage, moderate, and fine-tune repetition. Hopefully we can combine all of that into something that gives people instruction at a pace they can maintain, thrilled by their progress, but also in a way that sticks with them.”

I hope you all found that discussion as thought-provoking as I did. I’d love your thoughts. How have you found practice to be important in your programming — or in other aspects of your life?