Programming Literacy Done Right: It’s About the Tools

1/8/13Follow @hirodusk

(Page 2 of 2)

syntax and data types, rather than what meaningful tasks the reader can accomplish with programming.

Most laypeople don’t care about computers; they care about what they can use a computer for. They learn how to use a given computing tool so that they can share vacation photos with their family online, write a term paper, or check the value of their stock portfolio.

It follows that most people will only care about computer programming when it offers them a clear way to accomplish specific goals that are relevant to their lives.

The spreadsheet

To date, there has been one pervasive success for end-user computing: the spreadsheet. Spreadsheets fill both of the end-user computing gaps:

No-fuss setup: Install Excel or sign up for Google Docs and you can start your first spreadsheet with a single click. There are no lengthy setup instructions and no decisions to make.

Task-oriented tool: A user firing up a spreadsheet for the first time understands that this is a tool for basic accounting tasks. For example: totalling up the line items on a receipt, calculating interest payments on a home mortgage, or tallying up hours worked during a week. The spreadsheet’s appearance instantly identifies it as a ledger for entering and doing calculations on columns of numbers.

The accounting specialization is reflected deeply in the domain-specific language used to program spreadsheets. SUM() is usually the first function a spreadsheet user learns. That function performs one of the most common tasks in basic accounting: totaling a column of numbers.

Compare the ease of SUM() to the amount of code needed to total a set of values in a programming language like Java or PHP. In those general-purpose languages, the programmer will need to understand concepts such as arrays, loops, and variables in order to perform this task.

Visual interfaces

Another appeal of spreadsheets is that they are visual. Users see their data laid out on a grid. Variables are named for the value’s spacial position on the sheet (for example, A1 is the upper-left cell). Code is entered into cells, where it executes as soon as the user leaves the cell. The results of the recalculated spreadsheet are plainly apparent.

Visual interfaces are more discoverable and less intimidating. Bret Victor’s fantastic Learnable Programming illustrates how visual elements can improve discoverability and usability while still putting code front and center.

Note that neither spreadsheets, nor Victor’s examples, attempt to hide logic creation behind a point-and-click interface. Purely visual programming is a red herring, and history is littered with the corpses of products that have attempted to offer programming without code.

Other end-user computing successes

While the spreadsheet is the only end-user computing tool to reach the mass market, there have been many successful products in more specialized domains:

—Industrial designers use scripting to automate AutoCAD.

—Statisticians visualize data with tools like Matlab.

—Businesspeople build database apps using tools like Filemaker Pro and Microsoft Access.

These tools all share the same two golden traits: no-fuss setup, and a programming language and development tools focused on the specific tasks their users want to achieve.

Learn programming courses

Software developers are passionate about their craft and most, like me, would love to see more people gain basic competency with programming. To that end, a number of great resources have appeared in the last few years: online learning apps like Codecademy and Code School, courses from Khan Academy, and tutorials for kids like Hackety Hack.

But while these efforts are well-executed and well-meaning, I question whether they put us on a path toward broad programming literacy. Learning to program for its own sake, rather than focused on a task the student wants to achieve, may never attract a very wide audience.

Codecademy courses are named for technologies like Javascript and Python, instead of tasks students might be interested in, like creating a website or a game. Khan Academy’s courses target the task of digital drawing and animation, but it may be unclear to the average user why someone would want to learn to program for this, when a non-programming tool like Photoshop does the job just as well.

An alternative is to build products focused on programming with a particular task in mind. For example:

—Many teenagers spend a huge amount of time on Facebook. How about a way to build your own Facebook apps, where the program lets you traverse your social graph with just a few lines of code? Just as spreadsheets offer SUM(), a social programming tool could give you functions like my_friends() and my_photos().

—Home automation is easier than ever with tools like the Belkin WeMo. How about a product that allows homeowners to attach scripts to household devices? Parents could write scripts to control their kids’ access to the TV, adjust the thermostat, or the feed the pets via an automated food dispenser.

—I learned to program because I loved video games as a kid and wanted to make my own. How about a toolkit and learning resources targeted at kids who want to make games?

In each of these examples, the tools must be incredibly simple to set up. If at any point the user needs to download and install Python, choose a text editor, or configure a database, then the jig is up before it has even begun.


Broad programming literacy is crucial in a world increasingly made of computers. Despite common stereotypes, programming is not out of reach for the average person. If the tools are easy to set up and specialized on the programmer’s task, programming can be a small matter after all.

Adam Wiggins is an entrepreneur, technologist, and product guy. He cofounded Heroku. Follow @hirodusk

Single Page Currently on Page: 1 2 previous page

By posting a comment, you agree to our terms and conditions.

  • gigaherz

    You may be interested in whatever may come out of:

  • Tim Rue
  • iau

    Environments which are actually designed for beginners address many of your concerns about setup, complexity and task-focus. Look at Scratch, Alice, Greenfoot and AppInventor. Sure, a lot of them are focussed on kids, but that’s where most beginners are. Observing that Ruby is hard to set up for people who just want to learn to program is like saying that CNC machines are hard to set up for beginners in metalwork. It’s true, but why would you start from there?

  • Boris Vassilev

    Good points made! However, you seem to ignore the elephant in the room: the easy problems have solutions already, and we are using them daily. You even mentioned some good examples: Excel spreadsheets, AutoCad. But I can’t write up this cool app idea I have in Excel, and I couldn’t use AutoCad just because I know nothing about design.

    It’s the messy problems that need not only a bit more complex tools, but also a deep understanding of the problem. Many people just don’t want to spend the time to translate their understanding of a problem from a common-sense, human point of view into a formal definition. Even recognizing that a problem can be solved with a computer (better than with a pen and paper) requires a deeper knowledge of computers than you seem to acknowledge.

    Of course, teaching kids and grown-ups about how computers work, and how they can solve problems that are beyond us (often simply because of practical reasons, like limited time) is definitely going to help more people use computers on that level. It is not going to make it easier, though…

  • Lukša Kraljević

    Unfortunately Microsoft OS designers decided long ago that decent scripting capabilities are not required for a desktop PC. What you describe is exactly what should good desktop scripting system have looked like had they decided otherwise. Unix shell fulfils your 2 criteria – it is the environment you normally interact with your computer without any need to set things up and it is task oriented. Unfortunately Unix CLI environment is beyond grasp of “regular person”, and AFAIK in the last 20 years nobody bothered to bring the scripting to the desktop.

  • Horace

    The literacy analogy is invalid – most people can’t write more than a shopping list or a tweet – no program is that simple.

  • James Simmons

    The One Laptop Per Child project has been interested in getting kids to program from the very beginning, and they provide Activities that can be easily installed (and removed). EToys, Pippy, and Turtle Art are the oldest Activities related to teaching programming but there are others:

    An indication of the success of OLPC in this area is the large number of Activities written by young people. Projects for Sugar Labs have been a popular choice for Google Code-In contestants as well.

  • a

    I learned programming straight from reference sites and reference books for Perl/Python, but mostly C++. Self-taught is the way to go, none of this “child programming” bullshit that tries to soften the scene and make programming look ‘fun.’ A person should want to learn how to program because it is intriguing and they enjoy a challenge, among other things. They should learn by solving complex problems or trying out new things the way they want to implement it. They should want to find a better way to go around their solution. Having lessons shoved down their throat with no room to think or try to expand knowledge is a garbage way to learn.