Purpose

The purpose of CodeMotion is to make programming accessible to all students, starting in middle school. I believe that programming falls at the intersection of three crucial areas where we need to better equip our students for the modern world. First, I will argue that programming is a basic skill in a science, technology, or engineering career. Second, I will suggest that programming disciplines your thinking and builds confidence in your own reasoning. And third, I will explain why programming is the art form of choice for children growing up in a computer-saturated culture.

Programming is a basic skill

Isn't high school rather early to be teaching a specialized skill like programming? The goal of high school, after all, should be to equip students with general skills, like writing a persuasive essay or solving a math problem. These skills provide a foundation that allows a student to then learn whatever profession they choose. There will be time enough in college for them to choose a career and acquire the associated skills.

Programming, however, is no longer a specialized skill for a very specific job. A basic programming ability is either an asset or a requirement in a growing range of fields. Scientists write programs to analyze their experimental results or to simulate some aspect of the world. Engineers write programs to model how buildings and products will be used. Programming is an integral part of these job because it is the language in which new ideas are formulated, tested, and expressed.

Writing was once a simple mechanical task performed by a small group of highly trained scribes. But now, nearly all work requires some form of writing. So we teach writing in high school, so that students enter college will have mastered the mechanics and will be ready to learn and hone the craft of writing for a particular field. In the same way, programming was once the domain of a small group of specialists, but now it is becoming part of the general expertise of every field.

One result of this transition is that college is now far too late a time to start learning programming. Colleges want to be able to teach the craft of engineering or software design or scientific data analysis. This is only possible if the student has already mastered the mechanics of programming. We know that a student cannot get the full benefit of a journalism course in college unless they have already learned grammar years before and have practiced their writing to the point where the mechanics are automatic. In the same way, a student needs years of practice with programming before they can learn to employ that skill in a particular field.

If we fail to teach programming in high school, we place a huge hurdle in the path of any student desiring to major in a science, technology, or engineering field. These students often manage to get their degrees anyway, with much help from classmates. However, as they struggle to learn just enough programming to survive a class, they often miss out on learning the craft embodied in their field's particular idiom of programming.

Programming is a mental discipline

I took karate classes for eight years as a child, from fourth grade until I left for college, and it was one of the most worthwhile parts of my entire education. I have never had to use those skills to defend myself, and I certainly never got good enough to make a career out of it. But that is not really the point of karate anyway. What karate really did for me was to transform the uncoordinated, athletically inept kid I was in elementary school into a high schooler confident that his body could do anything he asked of it.

Karate is not merely a skill; it is a discipline. More than just a set of skills, it is a whole new way of using your body. By practicing karate, your awareness and control of your body grows, and you begin to recognize where its limits are and how far you can push those limits if you have to. The effects are far reaching, from balance and posture to strength and flexibility.

What is true for the body is true for the mind. We can learn by increasing the number of mental tasks we are able to perform, but we can also practice mental disciplines that expand the ways we are able to think. Unfortunately, in modern schooling we focus almost exclusively on skills rather than disciplines. A science class might spend a few days learning about the scientific method, a powerful discipline whose practice has permitted the construction of theories that never could have been thought of before. But the students are not expected to practice that discipline, only to answer questions about how it is practiced. Likewise, an English class might spend a whole year analyzing how others practice the discipline of crafting fiction, but actually practicing that craft is considered beyond them.

Schooling in ancient times was largely focused on teaching mental disciplines, equipping students with new ways of thinking rather than just new facts and ideas. Disciplines like dialectic and rhetoric empower a student to reason their way to a valid conclusion and then explain their reasoning to another person in a coherent way. Students who know how to structure their own understanding of a topic and how to follow and critique a line of reasoning are exceptionally well equipped to learn anything else they may have need of. But in our modern schooling, we are so focused on meeting skill-based standards that we just throw information at our students without stopping to consider if we have given them the tools they need to make sense of that information.

Programming is one of the most powerful mental disciplines that we have ever developed. It is far more expressive than rhetoric, far wider in its scope than dialectic. By practicing programming, a student learns how to organize information and how to construct a correct line of reasoning. Even if they never become a professional programmer, these new ways of thinking transform the way they use their minds, just as karate gave me a new level of control over my body. And just as I grew more confident in myself physically through karate, students are astonished and delighted to recognize the growing power of their minds as they practice programming.

We tend to think of programming as something that only a very analytical, mathematical mind can handle. Programmers are often guilty of trying to perpetuate this mystique. But the truth is, programmers have very keen minds simply because they have years of practice in a mental discipline that sharpens the intellect better than any other activity commonly practiced. We ought to make this discipline available to all our students, especially the ones who do not seem logically inclined. After all, being uncoordinated as a child indicated not that karate would be impossible for me, but rather that it would be uniquely empowering.

Programming is an art form

Human being are not merely consumers of art; we have an innate desire to produce art of our own. We find something uniquely satisfying in acting in a play, or drawing a picture, or making a home video, even if our own art is not as "good" as what an expert might produce.

More particularly, we tend to want to produce the kind of art that we most enjoy. Someone who loves to read is likely to also enjoy writing, while creating videos for YouTube might appeal to someone who enjoys watching other short films.

Computer programs, and particularly computer games, are one of the art forms that modern children invest the most time in and are most knowledgeable about. So naturally, they also want to create games of their own.

Many games come with tools that allow users to create their own levels for the game. But while these tools allow you to create new places and new stories, the world they exist in is still defined by someone else's vision. In order to create a game expressing an idea that is new and uniquely yours, you need to be able to program.

A student is not likely to be able to produce a game on the same scale as a professional development studio with hundreds of people and millions of dollars to invest in a product. But students still take great delight in being able to make simpler programs that are entirely their own, just as they enjoy writing stories even if they never expect to be published.

As an art form, programming is uniquely accessible: everything needed to do it, with the exception of the computer, is free. And it has far fewer limits than any other medium. A computer program is a pattern of thought, crystallized out of the mind of the author and formulated to allow you to interact directly with that thought on a level never before possible. We owe it to our children to allow them to experience what it is like to work in this medium, just as we take care to expose them to all other forms of art.

References

There are a few articles that I find encouraging and thought-provoking for both teachers and students of programming. Chris Crawford's essay You should learn to program gives a lot more detail on the importance of programming both as an art form and as a mental discipline. If you read further in his book, he in fact argues that programming embodies many of the central concepts of civilization. Peter Norvig's essay Teach Yourself Programming in Ten Years is another famous reminder that programming is a discipline and not just a skill, and that only patient practice over many years can make you into an expert at it. Finally, Robert Read's How to be a Programmer: A Short, Comprehensive, and Personal Summary is a description of how to develop yourself from a mere coder into a software engineer, with all the people skills and useful secrets of the craft that are necessary to a professional programmer.