Copying & Repetition

You ever hear parents complain about their kids TV habits?  “Oh my god! If I hear Blues Clues one more time! Timmy plays that damn video over and over and over.”  What Timmy is doing is learning.  Timmy probably also mimics his parents and siblings actions, copies their speech patterns, observes their habits, and repeats them over and over.

Copying other people and repetitive training is the foundation of education, but in today’s education this has been thrown out in favor of “conceptual learning”.  The idea of conceptual learning is if you expose someone to the concept of a subject then they’ll have a higher more refined understanding of the topic than simple copying and repetition (what they call “rote learning”).  The reality is conceptual models of education simply find students lucky enough to naturally know the topic, and then leave the rest to fail and flounder.

In the united states, there is even a slight racist tinge to the attitude of conceptual vs. rote education.  I’ve heard many people say that “Asians really can only copy others because they use rote education in school.”  If you’ve spent any time studying Asian art and culture you know this isn’t true at all, and is a very racist attitude.  Whether it’s the Ruby Programming language, or BABYMETAL, or Old Boy, it’s entirely wrong to think that Asians are unoriginal little robots because they learned by rote.

There’s also a strange fear associated with rote learning that says if you learn rote you’ll somehow be less “creative”.  The problem with this is that nearly every creative thing you do requires rote practice.  The idea that I’m going to learn the major scale on a guitar by just learning the concept of a major scale is laughable.  Nobody who teaches music thinks that.  I learned guitar from repetition and copying other guitarists.

Painting might be the next discipline someone who believes in “concepts” puts forward as an example of avoiding rote learning.  Again, there’s a very long history or repetitively copying the works of other artists. There’s even a term for it: “Master Copy”.  Every great artist and almost all art schools have copying other artists as a way to learn to paint or draw.

If doing rote copying turned painters or musicians into unoriginal robots then all of them would be that way.  Painters and musicians are frequently put forward as the pinnacle of creativity, so clearly rote copying doesn’t impact your originality.  In fact, the dividing line between amateur and professional is how much they practice, and practice is repetition. Artists do small studies in a formal way. Musicians play scales their whole life, again repetitively copying.

How about writing?  Again, you learn to write by first copying the alphabet, then small stories, then trying to write on your own, and reading and trying to emulate your favorite authors.  Copying and repetition is all there.  Memorizing a poem is copying and repetition.  Reading and pulling out quotes and phrase structures is also copying and repetition.  Every author who is any good copies other authors and repeatedly writes almost obsessively.

Martial Arts, Dance, Singing, even Mathematics is full of copying and repetition.  Denying the role of these two practices in education denies what is a foundational aspect of human learning.  This is even the foundation of non-human learning, so why is it that people in the computer science field think there is no role for copying and repetition?

Rote in Computer Science Education

Copying and repetition is necessary in education because it builds instinctual basic skills someone needs to understand the more abstract conceptual parts of a discipline.  Nobody thinks you can memorize all of Jazz, but they definitely know that if you can’t instinctively play a scale then you’re probably not going to be able to play Jazz.  Nobody thinks you can memorize all of art, but if you drawing or color isn’t instinctual then you are going to struggle.

I believe Computer Science education could benefit greatly from copying and repetition at the beginner level and possibly later.  Copying is how a vast majority of programmers learned to code, but many CS educators deny this fact.  If you’re imagining yourself at 12 trying to learn to code, then I’m betting you had either a book or website with code that you copied and made work.  This should just be how we start people in programming, and not the current method of conceptual “weed out” classes.

Repetition is a mostly un-researched aspect of CS education that I’d like to explore more.  I believe that repetition happens naturally if you have copying as a base part of the educational experience.  However, I feel that drilling and repeating aspects of a language that need to be instinctual would improve retention.  For example, if students had to memorize all the lexemes and syntax structures of a language while they’re copying small working programs.

I think the main reason why this is ignored or vilified in CS is the same reason that most programmers simply can’t teach:  They are so far removed from their beginner experience that they forget that they actually learned to code via rote learning.  We see it all the time when a programmer attempts to teach non-developer and immediately tries to get them to use Vim and write C code.

The experienced programmer has completely forgotten the nights they spent repeatedly copying other people’s code and writing and rewriting buggy code to make it work.  To them this isn’t “rote” because they were so deep in it that they can’t see all the implied rote work actually being done.  They were also 10, so their brains were very bad at meta-cognition and can’t really say why they thought anything, so how can their recollection of their self-education possibly be accurate?

Hopefully Computer Science will adopt the educational style I’ve found in Music for beginner, and painters for intermediate developers.   I believe an early training that involves a mixture of rote (scales, chords, ear training) followed by copying and modifying (learn a song and try to improvise) will benefit beginners.  For intermediate programmers I think the Painting style of education would work well:  copy master works and create your own studies of simple subjects.

Adopting these two models would make CS accessible to more people, and make it easier for beginners to transition to intermediate and then advanced skills.

About the author zedshaw

I'm the author of the Learn The Hard Way series of books, a painter, a guitarist, and programmer.

All posts by zedshaw →


  1. First you master (to some extent, or all the way) the subject of interest by repetition, than you get creative, when and if you feel comfortable at it. It helps a lot.


  2. I try to do this when mentoring new programmers in the company I work for. I purposely google stuff that I know to hint that googling is important and should not make them ashamed. Having a model software project is also useful in a sense that I tell them this is how we believe this should be done, please try copying how they did what they did in the the model project.

    Being given the permission to make mistakes.
    Being given the guidance of how we believe it should be done.
    Being given the latitude to make up ones mind.


Comments are closed.

%d bloggers like this: