Computers and software of all kinds have generally been designed and built by engineers for a broader population to use. Computing is becoming ubiquitous, and the skills for using computers are becoming as standard as reading and writing. Yet few of these tools are designed for everyone to modify them. We are teaching read-only computer literacy to the vast majority of students. No one would advocate only teaching people to read without teaching them how to write. We need to think the same way about computer literacy. This means not only providing free access to the source code, but also changing the way we think about designing these tools.
Humans started out making their own tools because there was no one else who could do it. As society progressed and we became more and more specialized in our skills, we find that those of us who want to express ourselves are using tools created by people who we will never even meet. It is therefore difficult to affect the development of these tools in any way. Software has the power to accelerate this trend, with proprietary software locking us out entirely. We could always modify our brush or pen, we cannot modify Macromedia Flash. Software also has the ability to reverse this trend when it is free (as in speech). When the software is free, that means the tools could be built by highly skilled developer, yet it is possible for anyone to modify it.
Everyone should own their tools like traditional artists and craftspeople do. Traditional artists spend a lot of time figuring out the tools they want, usually customizing them, like paintbrushes and chisels, and even making the tools themselves. Sculptors hone their chisels, reed instrument players make their own reeds, wood and metal workers are constantly making new tools to solve unusual problems. Proprietary software makes this quite difficult at best, impossible at worst. Even for the Flash expert, it is not easy to write Flash plugins, and even if they can write plugins, what those plugins can do is limited by Macromedia’s design choices. Digital artist should own their tools just like traditional artists can. Free software is one essential aspect of this, and programming literacy is another that is often forgotten.
The problem is not only that humans need to gain literacy in programming, but also that the tools need to gain fluency with humans. Programming environments are usually designed by and for experts who were educated as engineers. Even though Java, Python, etc. are relatively new languages, they are strongly rooted in languages like C, which were designed for computer efficiency over human efficiency. Even the QWERTY keyboard was designed to hamper the human in order to protect the machine. The ideal tool complements the user’s thought process. The ideal tool is accessible to the beginner yet powerful for the experienced.
At the root of this problem is how most people view programming: a specialized skill that few need to learn. Instead, everyone who uses a computer should be able to program a computer. Programming literacy should be as commonplace as reading ability. Everybody who can read also writes at least sometimes. Anyone using software should be at least able to modify software, if not create their own. Computing devices now are almost always built for one sided interaction: the programer creates it, and the user uses it.
Few users question this, most people think it must be this way. This is what what most of us have experienced, and most of us have been taught. There are a number of different projects such as Pure Data, Processing, and Arduino that are demonstrating that read/write computer literacy is not only feasible but something that people desire. Add together free software, free hardware, and programming literacy, and we should now think of all people as creators and users, and all devices as programming platforms.
This is not a new idea, far from it. In fact, it was one of the driving ideas behind the development SmallTalk at Xerox PARC. Object-oriented programming, the largest advance in programming in the past 30 years, traces its history through SmallTalk. But sadly it is an idea that has been once again cast aside as the product managers embraced the power of Object-oriented programming to produce better software while skipping over the core idea that the whole system should be open to all users to modify and create as well as merely use.