What we mean by “programming”
This is a preface to an upcoming post on best practices for teaching programming.
Before we get to the list, let’s step back. What do we mean by teaching “programming”? We aren’t just teaching kids about classes and variables that can come together to build an iPhone app (although, this is an awesome outcome!). Programming is much greater than that:
Programming is about learning to think. It’s about taking a structured approach to solving a problem and being able to dissect a complex problem into smaller, less complicated sub-components.
Programming is also about being persistent and being able to recover time after time from failure. It requires determination and confidence in your own ability to get through a problem. Programmers are accustomed to being in “crisis-mode”; they are comfortable and calm in the face of pressure.
Programming is about being able to make good design decisions given multiple audiences and a variety of often conflicting constraints. When you are programming you are designing for two audiences: 1) the end-user and 2) other programmers who will contribute to your code. You need to consider end-user optimizations, like speed and functionality, along with contributor needs, like code readability and flexibility.
Programming is about being able to synthesize and articulate complex ideas. It requires excellent communication skills because when you get stuck, you need to look to the internet or others for help, which means you need to be able to articulate the problem into words. Being a good Google searcher is an important, non-trivial skill.
Programming is about taking the long-view and long-term payoff. Sure, occasionally you get immediate results, but usually you are working on a project that requires many small steps and hurdles before it’s useful and applicable. You need to stay motivated even when your immediate actions seem disconnected from a larger goal.
Any successful programming curriculum must teach these attitudinal skills along with actual programming concepts. Actually, the attitudinal stuff may be more important since the world of programming is always changing, new languages and better methods constantly replace old ways of doing things. Therefore, people who only know a specific syntax won’t last, but people who have all these other skills, will.
So if you are teaching programming, don’t just teach <b>This text is bold</b>, teach why and how, and intentionally set your students up to deal with persistent failure. Teach the lasting skills that define excellent programmers.
Stay tuned for a list of best practices for teaching programming.















