Programming Literacy Done Right: It’s About the Tools
Bonnie Nardi is an anthropologist who studies interactions between humans and computers. In 1993, she published her first book, A Small Matter of Programming. The book’s thesis is bold and simple: every human being can, and should, learn to program computers.
The book didn’t get much attention outside of academia and is now long out of print. I picked up a secondhand copy in the summer of 2007, just as I was working on the initial prototype of Heroku. The ideas from this book have inspired and haunted me ever since.
It challenges common assumptions to say that anyone can learn to program. Many assume a divide between “geeks,” who can program, and “normals,” whose use of computers is limited to using software created by the geeks. But is this the case? Let’s consider a parallel situation from history: the written word.
A thousand years ago, writing was a technology enjoyed by an elite few: rulers, clerics, scribes. This technology offered the power to store information with more permanence than human memory, to pass such information between people, and to archive it for future generations.
The invention of the printing press in the 1400s made books widely available, and literacy spread. Today, literacy rates exceed 90 percent in most of the world. Not everyone is a novelist or English professor, but almost everyone can read street signs, write down a grocery list, or send a text message.
Programming as literacy
We increasingly live in a computer-embroidered reality, and the ability to manipulate that reality is empowering. If we can find a way to bring that ability to a wide audience, it could have an impact comparable to the invention of the printing press.
This is end-user computing. “End user” means everyone: people like you, me, and your friends and family. We all use computers in our daily lives to accomplish both work and personal goals. When those end users can write and run their own programs, they will have fully harnessed the power of computing.
I’m far from the first to address the topic of programming as literacy; see Programming is the New Literacy and Computer Programming for All: A New Standard of Literacy for two recent examples. But while the interest in this topic is exciting, the methods proposed are often nothing but wishful thinking. The true challenges of programming literacy are rarely addressed.
A Small Matter of Programming, though two decades old, contains hard research on the real benefits and obstacles to end-user computing. And surprisingly, these findings remain just as relevant today as when they were written. Programming-as-literacy enthusiasts should take a close look.
The two comprehension gaps
The research presented in the book demonstrates two major gaps that block programming accessibility. These gaps are in the tools, not the teaching process. What we’re missing is 1) no-fuss setup, and 2) task-oriented tools.
Gap 1 – No-fuss setup
Professional software developers favor composable tools that can be combined in a customized stack according to the developer’s taste. Consider the number of tools in a web development environment: language runtime, code editor, revision control system, webserver, database, web framework, dependency management tool, templating language, test harness, and more. The bewildering array of choices often proves defeating to beginners.
The lengthy setup instructions for Ruby on OS X or PHP on Ubuntu illustrate this, each with many pages of error-prone manual steps and incomprehensible jargon. A newbie programmer cannot run even the simplest program without having invested many hours struggling through this setup process.
Even worse, the budding programmer is often pressed to make many choices: what IDE? what language? what database? Experts want choice; newbies want to be handed an integrated product where good choices have been made for them and they can dive straight into their task.
Beginners would be better off with a single integrated tool that they can install (or access on the web) and use to begin programming immediately.
Gap 2 – Task-oriented tools
I recently demonstrated the simplicity of programming to a friend of mine by showing her how to write a short Ruby script. “That’s cool,” she said. “But what would I use this for?”
Her response demonstrates the second gap in programming accessibility: too much focus on the technology (e.g., programming language) and too little focus on the user’s task.
Anyone who can program today probably learned because they find programming itself compelling. The first few chapters of nearly any introductory book on programming illustrate this mentality: they focus on topics like … Next Page »