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?

  • I’m very interested in what I think is best described as “taste” in programming. I don’t know where good taste comes from, but I think it’s one of the key attributes in the make-up of great programmers.

    By good taste, I mean the ability to come up with an elegant approach to solving a problem. Or to break a problem down into simpler pieces along its natural fault lines. Or to see a problem as an instance of something more general. Or to look at a proposed solution (your own effort or someone else’s) and just know there’s something wrong with it and that there’s a better way to do it (and to find it).

    As I said, I don’t know where this good taste comes from. Long experience is certainly an aid to having good taste – once you’ve seen enough crud and enough beauty you can perhaps get a feel for when something “should” have a nicer solution, when a solution is too ugly, etc. But having a sense of taste via exposure to a wide array of other efforts somehow doesn’t count.

    After interacting with other programmers over several decades I came to the rough conclusion that good taste is just something some people have and some don’t. I’ve met several young (early-mid 20s) programmers that I think have extraordinarily good taste. They’ve been programming practically all their lives, but I don’t believe that’s the source of their good taste.

    I might say more a bit later.

    One final comment is that good taste is also very important in model building. When you build a model, you’re making a simplification. Deciding what to leave out is crucial. Experience is extremely important, but I think it’s trumped by having good taste.

    Sorry – a bit rambling…

  • “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.”

    Maybe you should engage your readers to do these exercises in something like an online test and give rewards to them. Just one little “gold” or “silver” image for passing a test for a chapter of a book. The readers can build their little gallery showing of the level they reached and share this with their social network.

  • BTW, I wanted to add that good taste is not synonymous with getting things right the first time. Often problems will require several iterations before the right (or a right enough) solution is arrived at. Good taste is what tells you that you’re not done yet – that there’s still something wrong or awkward, or that you still haven’t found the best way to look at the problem (or the form of your solution) yet.

    I don’t really like writing things that feel a bit vague, so I’ll leave it at that…

  • David Semeria

    The great RP Feynman had strong views and valuable insights regarding teaching and learning.

    He himself put this down to the influence of his father, who, whilst no scholar, imbued the young Feynman with a sense of curiosity coupled with a healthy dose of skepticism.

    It was Feynman’s father, for example, who pointed out that whilst you might able to provide the name for a given species of bird in every language known to man, in doing so you actually convey no useful information whatsoever as regards the bird itself.

    Feynman never forgot these early lessons, and was consequently renowned in the physics world for avoiding redundant terminology – a fact which made him a brilliant teacher.

  • David Semeria

    ….in other words, to quote Marcus Aurelius, “Of each thing ask what is it in itself”.


  • Jim Stogdill

    Tim, I really enjoyed this.

    10,000 must be some kind of magic number of mastery, regardless of the unit of measure, since it pops up everywhere.

    As a reminder to myself, I keep a post card over my desk with the words “Your first 10,000 photographs are your worst.” Henri Cartier-Bresson said that way before digital photography made the number seem easily approachable. And, though he was shooting with one of those modern quick shooting “miniature” 35mm Leicas, he did have to spend an hour or so in the darkroom for each of the 10,000 pictures he thought he’d have to make to hone his skills. He must have meant 10,000 to be a major commitment.

    George Leonard, an Aikido instructor, wrote Mastery. It’s a wonderful little book that suggests that five keys to its attainment are: instruction, practice, surrender, intentionality, and “the edge.” The journey to mastery that he describes is a learning curve with a series of plateaus and breakthroughs. To work through a plateau and obtain the next breakthrough requires discipline. http://www.scribd.com/doc/257928/-Mastery-by-George-Leonard

    In Art & Fear, Observations on the Perils and Rewards of Artmaking, David Bayles and Ted Orland talk about the interplay between creative inspiration and habits that lead to making your best work. Or put another way, the interaction between mastery of the necessary craft and the art that you produce with it. Mastery of the materials and craft opens up opportunity for nuance and subtlety of expression.

    “Repetition must be connected to deeper understanding.” It seems to be a fairly recent western notion that practice must come with payoff or pleasure. In yoga or in the martial arts for example, the path is often unveiled a bit at a time and perhaps after the student has exhibited commitment in the absence of a clear payoff. There is a kind of reward in the repetitive practice itself where the practitioner finds a state of flow and a deepening understanding from simply doing.

    Perhaps it is out of synch to think this in an era where the average time between cuts in film has gone from minutes to seconds, but it seems to me that mastery comes from doing the work, even when you don’t want to. A photography teacher I had once said “the world doesn’t give a shit if you make a picture today, and maybe you don’t either, but the picture you will make a year from now depends on it.”

    An interesting aspect of our times is that it may take more time to achieve mastery than is available. Perhaps this is why people seem less likely to set out to achieve it. Everything is moving faster, including the targets.

    Certainly this is true in computer science where programming languages are fluid and can be supplanted in less than a decade. But it’s also true in a variety of artistic fields where the digital transition is forcing artists to start up the mastery curve again. I know more than a few photographic artists who, decades into lifelong projects, are finding they can no longer purchase the materials they have used for years, they simply aren’t available anymore.

  • one of my complaints about the way mathematics is taught is the severe levels of drilling that takes place:

    The circumference of a circle is 2*d.
    Great. Mind if I try? (calculate) Amazing! Works every time.
    I’m glad you like it. Finish odd-numbered questions 1 through 79, and tomorrow you do the evens.

    While clearly useful, drills for a skill should end when learning has set in. I don’t see a way this can be fairly accomplished in our current public schools without dramatically shrinking class sizes. I have seen drilling substituted for teaching too often.

    Parallels have been drawn between “book learning” and learning a musical instrument. I wont say that the mastering (or even just getting to “okay”) is the same as learning any other skill, such as mathematics. Drilling is clearly important in music, as I can attest: 2 years after purchasing my piano, I’m still only half-way through the grueling work by Rachmaninoff I swore to learn 2 years before heading to the piano store. I blame this on my failure to really drill the second part. I know that I learned the first by drilling, I guess I’m just waiting for “gumption”?

    Bottom line: you can’t force a person learn. The student needs to become the teacher at some point. They must want to learn & discover & synthesize & create. Though – I believe that desire can itself be taught. After that is in place, you have a life-long learner who, “with practice”, can find the methods of learning that work best for their individual nature.

    If the student falls down in their journey of learning, they can always seek inspiration: http://en.wikipedia.org/wiki/Donald_in_Mathmagic_Land

  • I’ve been reading Outliers and been also struck by the emphasis on getting lots of practice early in life. Gladwell’s thesis certainly rings true with my experience.

    I started programming when I was twelve years old when my dad bought me an Apple 2E computer. I got into web programming in high school and did contract work all through college. Only a tiny percentage of the code that I wrote was for class assignments. This gave me a huge advantage over my peers who didn’t code outside of class. By the time I graduated, I was billing $95/hr and turning down more work than I could take. I then started a company called EventVue and got accepted into TechStars.

    What’s interesting to me is that almost everyone who’s gone through the TechStars program has the same story of learning to code early and and getting lots of lots of practice throughout high school and college. I don’t think that’s a coincidence.

  • Jose

    IMHO, practice is important, but for me practising without sense is stupid.

    I really hated the university exercises in engineering school. Why? Because they were only exercises, I want to create something that is useful, not a stupid pass time.

    I really love programming because I can do things nobody has done before.

    Same thing with languages, people learn English because “you are going to need it for getting a job”(I’m european). For me that’s stupid, I learn English because I want to talk with a lot of people I’m interested in.That way you learn without noticing.

  • thomas

    How about the USA stops outsourcing its jobs? FFS. Until then, I’ll be practicing how to be a plumber instead of a programmer. Not exactly what I prefer doing.

  • I am writing a book for O’Reilly titled “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman”. My co-author and I have identified a pattern of successful “apprenticeships” that we call Practice, Practice, Practice: http://apprenticeship.oreilly.com/wiki/practice_comma_practice_comma_practice

  • bob

    Programming is essentially, mentalism. Repetition does help, but being able to understand and conceptualize, regardless of language or context, the flow of execution of a task in a computer is far more important than anything else.

    As for mastery, that’s definitely in the eye of the beholder. Mastery in many cases means putting up with zero requirements, zero sane timelines, and having to slop your code in with a half million lines of code that should probably have been tossed in the waste basket 5 years ago.

    In fact, Ill go you one further in that mastery can only really apply to the intrinsics of the language, since theres no way any one person could be a master of the thousands of API methods for java for example.

    In this huge world of systems, we keep the most important stuff in our minds to survive. The rest is a google away.

    May the best googler win.

  • Thanks for this.
    It was a “GREAT” read, also acted as a back-up for my own convictions that hardwork is extremely important, something the younger generation repulses.

  • Children will repeat things endlessly if it is set up as a game. If they won’t do basic multiplication, get them Brain Age.
    If you look at successful puzzle games like Portal or World of Goo, they provide a physics model with constraints, and exactly kinds of progressively harder problems described in your maths examples. They also tighten the margins of error over time.
    Very few ‘educational’ games do this as well – Logical Journey of the Zoombinid and Sockworks being a couple I do remember.
    This reminds me of Jane McGonigal’s talk on why games are better than real life.

  • Arthur Smith

    A very interesting article. Not mentioned, however, is the insidious tendency of almost all teachers / coaches to intervene at just the wrong time. That is, the moment when the student has reached a level of frustration that the teacher interprets as a “barrier” that only the teacher can solve. This is true also for parents. There is a lot going on here; way beyond “helping” the student progress.
    I agree wholeheartedly with the practice, especially music practice, should be fun. My son found a teacher who asked him what he wanted to learn. The Beatles. And now he is a very good musician. My daughter’s teacher said, this is what we are going to learn, and she quit after 3 months of meaningless (to her) drills and unfamiliar songs.

  • Mike Figueroa and Jose –

    I don’t think anyone here is talking about mindless repetition. That’s the stuff that gives practice a bad name.

    I love what Kevin Marks says about practice and play. It’s actually the kind of practice you get from play that starts you up the path. But there does come a time when you have to go beyond what’s naturally fun, and learn to enjoy working for mastery. Any serious athlete knows this. I mean, I’m sure that Lance Armstrong is now addicted to his practice, but it would be torture for anyone else. And I imagine that enjoying it as he does is a learned activity.

    I remember when I used to run cross country. It started out as an act of will before it turned into an act of pleasure.

    So imagine a child becoming an athlete: it begins with active play, the joy of using your body. But at some point, you want to excel, and you begin to work consciously at your skills. At that point, you can choose to push yourself harder, or not. There are many examples of athletes with great physical skills, but less will to practice. It’s been a long time, and I may be remembering this incorrectly, but I seem to recall stories of Larry Bird shooting 2000 foul shots daily, continuing practice after everyone else had gone home.

    There’s a quote from Irving Yalom’s novel When Neitzche Wept that seems apposite: “First will what is necessary, then love what you will.”

  • Arthur –

    Great point about intervening at the wrong time. I’m mindful of a story my mother used to tell about another mother she knew who had a disabled child. He was struggling to tie his shoes, and a visitor said with disapproval, “why don’t you help him?” She replied, “Can’t you see? I am helping him.”

    There was a great illustration of the same point in an NYT story I read this morning about a 35-year-old woman who had a stroke, and who is now looked after by her mother, with tough love:

    When she feels frustrated, Ms. Santana is irritated by her mother’s insistence that she can do things she is sure she cannot. Like that day in the kitchen.

    “Can you stir the sauce?” Ms. Ventura asked.

    “I cannot hold the pot handle with one hand and stir the spoon with the other,” Ms. Santana snapped. “How am I going to stir the sauce?”

    “Find a way,” Ms. Ventura said.

  • “Ride lots” – Eddie Merckx

  • As someone who’s been teaching myself code, this post is right on. You authors NEED to be thinking about how to help your readers learn. I’ve read too many of your books and my skills are still too novice.

    It does take practice – but it takes “project-based” practice, not just little one minute hell worlds. There should be more projects where I’m building something in a guided way. RailsSpace, by far, was the best book for that.

    To much of my time learning is trying to do something and not being able to find a “guide” out there. I fish and fish and fish for hours on end to try to figure out how to do the most mundane of activities. Dizzy Gelespie at least could just play. Every time he played a scale or a melody he didn’t have to scour the internet for hours on end digging into blunt forums that almost answer his question. For instance, I had to spend two hours yesterday morning figuring out how to get a tunnel up and running for my app. Once I assembled different information from like 4 different blogs and forums, I got up and running in 5 minutes.

    I think you should think less in terms of books and more in terms of small guides to solving this or that problem. Just this morning, I wanted to take advantage of polymorphic associations. I would love to find a few challenges and some guides to practice this before I try to implement it. But, alas, nothing is written out there for that.

    Hitting head up against a wall.

  • This quote by Mr. Kay is so absolutely right. The more I think about it, the more I come to the conclusion that the most valuable are earned and not given for free.

    Rocking regards,

  • Some thoughts:

    Two ways of arriving at a disciplined practice: “One might have a very direct, very innate and natural sense of what music is, like Hendrix, or be like me, a guitar player who began music tone deaf and with no sense of rhythm, completely out of touch with it. For Hendrix the problem was how to refine his particular capacity for expressing what he knew. For me it’s how to get in touch with something that I know is there but also I’m out of touch with.” — Robert Fripp

    There are probably as many unique ways as there are players. Few books, beyond very dry reference books, would have benefited both Fripp and Hendrix. Perhaps a business question perceived through 20th century eyes is “which books best serve the free-est spending demographics?”

    Is a disciplined practice to be valorized? “Discipline is a means, not an end in itself.” — Robert Fripp.

    The discipline of a child learning the multiplication tables is and end in itself. The child is not practicing in order to become the world’s best mental calculator. The child is not by any means discovering the beauty of mathematics by any efficient means. The child is practicing times tables in order simply to know them. Without that basic knowledge the child will be in some respects illiterate and unable to function at some of the simplest tasks.

    With music, the events of performances in which something transcendent transpires between performer and audient are what Fripp seems to care about. It’s not a stretch to imaging Hendrix felt similarly. The discipline of practice is what leads up to these events. Without the discipline, the events and their magic can’t exist. Without the events, the discipline is empty and pointless.

    Many people offer this quote so I need not name any one guilty party: “Programming is a means, not an end in itself.”

    Mostly, people who say that (and, don’t trust me — sample the web) are talking about money. Programming is a means, in this view, to further a business plan. In those conversations, programming skills are indeed about the same as learning the multiplication tables.

    Can programming ever create magic?

    “I’m not really interested in music. Music is just a means of creating a magical state.” — Robert Fripp.

    If unix was a triumph of art, perhaps GNU/Linux has come to be a cheesy cover that draws little attention to itself but is good for playing over the PA system in big box retail stores.

    I would hold up the “mother of all demos” to, say, a Steve Jobs keynote at Macworld, for purposes of comparison.

    At one, an audience was deeply moved and became engaged with a musical idea that transcended performer and audient. At the other, a business plan is discussed and a false sense of awe and wonder provoked with professional cheerleaders competing to see who create the most authentic seeming sense of revolution.

    “Hacking is not primarily about an ethical issue. It is an idea of what makes life meaningful.” — Richard M. Stallman.

    “If some entrepreneur introduced the bicycle today, no one would fund him.” — Alan Kay

    I think that’s the most important part of what Kay has to say.


  • Falafulu Fisi

    David Semeria said…
    Feynman never forgot these early lessons, and was consequently renowned in the physics world for avoiding redundant terminology – a fact which made him a brilliant teacher.

    Some writers and historians have attributed a well known comment to Feynmann, when he used to teach Physics to his student and that :

    Just shut-up and calculate.

  • Michael Staton

    I hope that this article develops an continuing discussion on strategies for bridging the practice/involvement divide.

    Slightly different but related issues:
    • So many books/learnings, so little time.
    • Head-First learning is intriguing, but require commitment to marriage before enjoying a cup of coffee together. Awfully difficult to tell from summaries of a topic (in/on a HF book) whether it’s going to be worth *total surrender* to the whole process. Some intro examples (mini-project-based exercises) might provide that.
    • Baby-step experiences that show what is possible through repetition/evolution could persuade if/when it’s worth making a full 600+ page commitment of one’s head. (i.e., where’s the *sampler* possibility?)

  • Bottom line is that it is pretty much all about hard work. No matter which job we are doing, hard work ends up being the factor which separates the good from the bad or average.

    Hard work, combined with continuous striving towards self-improvement (aka. Kaizen) is a very powerful approach to anything.

    In programming specifically, in my experience, re-engineering solutions is critical as engineers learn new facts about the on-going changing and growing requirements for a system.

    Unlike building a concrete building, in software engineering we have the tools to re-engineer the end product in order to make it better, but most of the time programmers are not very keen on doing this as it still means … hard work.

    This is one of the key reasons why many software solutions are: bloated, inefficient, inflexible, insecure, etc. Lack of hard work.

  • Great point about intervening at the wrong time. I’m mindful of a story my mother used to tell about another mother she knew who had a disabled child. He was struggling to tie his shoes, and a visitor said with disapproval, “why don’t you help him?” She replied, “Can’t you see? I am helping him.”

    My son’s school has a framed quote attributed to Maria Montessori that really nails it: “Once children are ready to do things for themselves, every attempt to help becomes a hindrance.”

  • Kids these days, they just don’t know what’s good for them.

    Me, I lived in a shoe box in t’middle of t’road…

  • I’ve always enjoyed the learning method of building up in small steps from basics, even if you know that once you master the basics, you’ll probably never use them again. In math, for example, you can learn how to compute a sine, but you’ll never actually do it in practice. But if you learn the method knowing that it’s how a calculator performs the function (or how the old lookup tables were written) then you appreciate the tools much more.

    I think programming should be taught the same way. Initially focus on what the computer is actually doing. This means learning about registers, memory, binary arithmetic, etc. Obviously students won’t be writing massive programs in this domain, but they’ll get the point. When you learn what’s actually going on at this level, you understand why there are data types like ints, floats, chars, etc. and you learn why pointers and addresses matter without getting overwhelmed with the task of writing complicated programs in higher languages like C++. In doing so, you’ll also gain an appreciation for modern high level languages like Java and Python that protect you from these kinds of problems (and ones like C/C++ which don’t), just as you would appreciate a calculator knowing how it works.

    I also think that the technical subjects are as much artforms as any of the traditional art subjects. They have tricks, rules or thumb, design patters, and such just like any art. A classic example of this in book form is Horowitz and Hill’s Art of Electronics. There is also history to why technical concepts are they way they are and why things are called what they are. Typically the nomenclature came from whatever problem domain people were working on when they developed the theory. Understanding the motivations for developing ideas helps one understand those ideas themselves. Good examples of this are Morris Kline’s Mathematics and the Physical World, which tackles math and history up through calculus, and David Mendell’s Between Human and Machine, which tells the history of the development of analog computing theory up to World War II.

    Lastly, one thing I think is important to understand about repetition is that it’s a substitute for actually doing in real life, and not an end in itself. Initial learning takes place from an instructor using some drills, but it truly takes hold through actual use. Take handwriting and typing, for example. Yes you learn handwriting in school and do drills, but ultimately it solidifies through repetition in daily life long after you leave school. Pre-computers and typewriters, people wrote a lot more by hand, and thus practiced everyday without realizing it. These days, kids should still learn to write, but they won’t get the same amount of natural practice and thus probably won’t develop old-fashioned exquisite handwriting. Contrast that with typing. It’s important to learn basic typing technique, but once that’s done, nowadays people get so much natural practice that they don’t realize how fast they type. Not too long ago, typing at anything other than a snail’s pace was a special skill owned only by secretaries and programmers. Obviously some skills are more amenable to natural practice than others, and there will always be a place for concocted drills, but the closer they are to real life, the better. Maybe this means for arithmetic, good exercises might be things like balancing a checkbook, calculating tips on a restaurant bill, etc.

  • nycsean

    This article seems to be interrelated with a lot of trends in the working world:

    1. Managers discovering that the current generation entering the workforce is so coddled from criticism’s that they are unable to give them any constructive feedback or mentoring without tears.

    2. Discoveries that qualified praise is the best way to teach people.

    The irony of these modern studies is that they point back to tried and true methods of great teaching. My piano teacher was a master of praising actual progress, but also pointing out the next challenges. She had no fear to push me sternly- nor tell me “well done”.

    Now in my personal life, as instruct younger programmers and new students in martial arts, I am trying to learn this as well. It’s easy to blame teachers, but might be the hardest skill of all to learn.

    And while love what technology has brought for society, I do see it in even young programmers that the joy of solving a problem for it’s sake, and to pursue a deeper understanding, becoming a rarer and rarer skill. Which is a shame, because the greatest joy is to look back on some endeavour, remember your startign point and realize that you have come much further than you ever thought you could.

  • Richard Wagner

    This article is 100% wrong. Apple’s OS X is proof positive that computers do not have to be difficult to be useful. Just look at how technical people in every field are switching en-masse from inferior systems like linux and windows to see proof positive that when something is truly intuitive, the concept of “practice” simply does not apply.

  • Richard –

    I’d say you’re overstating the case. A bicycle is also elegant and powerful, but still requires learning.

    And I’ll guarantee you that even MacOS X benefits from practice. The difference in ability between the averaqe novice and say, David Pogue, is enormous. And that’s why millions of people have bought Pogue’s books, to get more out of the “simple” Mac than they could discover on the surface.

    “simply does not apply” simply does not apply, really to anything. :-)

    Any idiot can swing a bat but Ted Williams is the last batter to hit .400 in a season. Anyone can shoot a basketball, but there was a reason Larry Bird kept practicing, and became a superstar.

  • Richard Wagner

    I’m not sure you understand my point. Ted Williams could certainly hit .400 through practice, but if he could just use a machine elagantly built to hit homeruns every time, he’d simply push a button, bat a 1, and spend his free time flying Marine jets. OS X is that home run hitting machine. It eliminates the need to practice all the useless archaic tasks that takes up so much time on other systems. So yeah, practice re-compiling the linux kernel to support your hard drive or rebooting your crashed Windows servers every other day. But neither of those “skills”, no matter how hard you practice them, will help you write better documents or compose better music or edit better movies, etc. Fortunately people in creative professions are increasingly discovering this.

  • Richard, do you want to bet? Someone who writes a lot will generally outperform someone who writes rarely. The ease of the writing interface is good only to the extent that it encourages natural practice.

  • Kathy Sierra

    This is one of my favorite topics…thanks for posting the discussion. Tim, if I understand Richard’s point–and I think it’s a good one–that we should be practicing *the thing we want to get better at* rather than improving our skills for the tool itself. Using writing as an example… we should practice *writing*, not spend time practicing how to use/maintain the system/tools that allow us to write (edit, compose, etc.).

    That’s just good interface/tool design (and documentation and training)–get the tool itself out of the way so that we can spend time practicing what the tool enables us to do and create.

    But I don’t agree with his conclusion re: Mac OSX because it is not simply a tool for doing other things. We tell people “don’t focus on the hammer, focus on the house they’re building with it…” but Mac OSX can be both the hammer (tool) AND the house (thing you’re using the tool to DO). In a perfect house-building world, the hammer would disappear completely, but in the world of Mac OSX, the line between tool and what the tool enables is much fuzzier, and up to the individual user (and those who help teach and encourage them).

  • Roger

    I find it interesting that I came across the following column in ‘Datamation’ shortly before seeing this particular Radar entry:

    “Hard Work is Dead. Call It ‘Work Ethic 2.0′”


    There is a lot of truth in this perspective. Today there are so many technology distractions (twitter being a prime example) that it is easy, if not expected, for someone not to ever be paying full attention to a particular task or project at hand, never mind REALLY learning it in depth. There is plenty of evidence that multitasking is synonymous with being inefficient (contrary to what its practitioners think, like driving and talking on a cell phone). Is this what “begin digital” means – a generation focused on shallow knowledge versus deep understanding.

  • The way we learn, and therefore the necessary nature of our practice, changes as we gain expertise. The type of “practice” that a beginner needs is not the same as what a more advanced practitioner needs. Early in the process, rote learning may be exactly what’s needed in order to make basic actions automatic, so that we can focus on higher level learning. Experts benefit more from abstract learning, such as creating analogies and developing new techniques.

    In response to Terry Jones’ question about “good taste”, I think this is roughly equivalent to “unconscious competence” or “intuitive knowledge”. This is the type of expert insight whose origin is unknown, not only to the observer but to the expert themselves. At this point it becomes “magic” because we can’t explain it.

    Dave Thomas delivers a good talk on the process of gaining expertise, which is now available online at http://www.infoq.com/presentations/Developing-Expertise-Dave-Thomas

  • dave

    Very interesting discussion from admirable people! One of the most interesting factoids I picked up in undergrad was in physiological psych when they talked about research into hearing, and the problems they faced until they began to also measure false positives – those results that had been considered unimportant and ignored. The parallel I draw is to look at the kids trying to learn when using a book that omits mention of a vital step, or trying to ride a bicycle with negative fork rake (unridable). One of the things they learn from these unfortunate experiences is that hard work doesn’t pay off, that complicated and abstract ideas aren’t interesting, that practice does not make perfect. For all of us reading this article, we have been fortunate; we didn’t learn these things. These are things, like the false positives in the hearing research, that exist in reality and cannot afford to be ignored in any serious discussion.
    By the way, thanks for all the great books!

  • Lasse

    This topic is really an eye-opening for me and I´am very pleased to know that somewhere out there people are thinking about the learning process.

    Learning, as sad before, is a means not an ends in itself. And the attempt of making learning (that includes practicing) funnier is really great. But I think that is really dangerous.

    We know that to achieve something and make it become great demands hard work, and learning, especially in College, is somehow realizing that hard work is needed. I think that if your learning is always motivated by something fun, you will never realize that most think you do demand patience and perseverance.

  • Great discussion. I’d like to introduce an idea, not my own, about how repetition in learning works.

    Many complex systems, like the human brain, have “leaps” or “changes” but not incrementally. So, think of your kid’s math drills or scales, etc. Nothing may happen for 20, 30, 40 problems, but there comes a moment (John talked about drops into a beaker in chem class) where the mind understands it or makes the leap. That leads to many implications for educators.

    I heard this idea from John Mighton, a Canadian playwright and mathematician, when he came to our office in Vancouver a few years ago to inspire us to volunteer with his JUMP math education program.