EstherGupta's picture
Upload 35 files
e576e66 verified
Chapter 16
Software Makerism
The concept of Maker doesnÕt only apply to physical objects. We believe an important part of Makerism is Software MakerismÑthe ability of ordinary people to make the software they need and want themselves, or in small groups.
We canÕt have hardware Makerism without some form of software Makerism. People have to learn the Computer-Aided Design tools that allow them to design things to print. Though perhaps most people will download designs from web sites like Thingiverse, thereÕs an awful lot of designing to be done. (The web site Thingiverse had 880K items for free download in 2017. It is the largest, though not the only, site makers use for sharing designs.)
What weÕre talking about here is the ability for ordinary people to use the amazing procedural powers of modern computers, phones and other devices to help solve personal problems, and enhance personal creativity in peopleÕs lives.
This is called end-user programming. In order to maximize self-sufficiency and customization, the power of programming has to become accessible to everybody, not just a specialized professional class of people who have to learn esoteric languages. The easiest way we know of to learn the definitive reasoning required for rational governance is to learn how to program.
Currently, the production of software is largely done by large-scale industrial capitalism, companies like Google and Microsoft, mirroring the production of cars by companies like General Motors. These companies can only make software that supports processes performed identically by large numbers of people. Otherwise, thereÕs no market for it, and they canÕt justify the expense.
Sure, thereÕs plenty of software to help run small businesses, but nobodyÕs going to write software specifically for AhmedÕs Falafel Shop in Bay Ridge, Brooklyn. Ahmed wants to use the accounting terms he learned in Arabic back in Fooistan, which are a bit different. But then heÕs got to generate a report for his tax guy in English, so he canÕt just use the Arabic version of the accounting software. Sure, there are plenty of CAD systems, but they arenÕt much use for WaltÕs unique glass sculptures for his next art gallery show, where he melts photographs into ßowing, curved vases.
The key to programming is language
But isnÕt programming a difficult, specialized skill that only science nerds with years of training can do? It doesnÕt have to be. The basic concepts of programming are already familiar to us from everyday life.
We all make decisions, so weÕre already familiar with ÒIf É thenÉÓ statements, what programmers call a conditional. We all have to-do lists, and other kinds of lists. Lists are one of the basic data structures used by programmers. When we fill out a form, we know to put our own name in the space that says, ÒNameÓ, what programmers call a variable. We all seen recipes for cooking, which are composed of a sequence of steps. We all know how to do repetitive tasks, or some sort of loop. These are just the names computer scientists give to these concepts.
A programming language is a special language for talking about these kinds of concepts. TodayÕs programming languages grew up out of mathematics and engineering languages, which is why they look so opaque and scary to the uninitiated. New programming languages and systems that are specifically designed to be more accessible to a wider audience will be a key technology for achieving Software Makerism.
ItÕs a little bit like playing chess. The rules of chess arenÕt that hard to learn, and neither are the basic rules of programming. But of course, becoming highly skilled isnÕt easy. The best chess grandmasters can beat almost anybody, and you can spend your entire life learning chess strategy. But anybody can learn enough to play an enjoyable game of chess, and anybody should be able to learn to do simple programming.
The key strategic skill to learn to become a programmer is procedural thinking. That is, you have to learn to be able to describe a procedure you want the computer to follow, in enough detail that the computer will be able to know what to do in any situation it may find itself. People do this when they prepare a set of instructions for others to follow. A kitchen recipe is a program. A set of how-to instructions for a home repair task is a program.
There are programming languages designed especially for beginners, such as Logo [Papert 1993], Scratch [Resnick 2017], and ToonTalk [Kahn 2017]. These are much better for beginners than languages designed for professional programmers such as Java, C++, and Python. But even languages like Scratch are still much, much too hard for widespread use. The beginnersÕ languages canÕt manage complex programs. The pro languages are too hard to learn and too error-prone for most people.
But maybe we donÕt need programming languages at all. A radical idea (and the topic of some of our research [Lieberman 2005]) is to make it possible to program just in (spoken or written) English. One of the original programming languages, Cobol, had the idea of making programs read as much as possible like English. It was the most successful programming language for business applications of its time. But it was only English-like on the surface; it had strict rules for a correct way to express something, just like other programming languages.
Now, advances in natural language understanding may make it possible to understand a wider range of variations of natural speech, as do conversational agents like Siri. The challenge is: can we understand enough to be able to do programming (which Siri canÕt)? It still wonÕt get us out of the problem of procedural thinkingÑexpressing programs in precise enough form that the computer can take care of all the contingencies a program will experience. But it could vastly increase the accessibility of programming to most people.
Some people are visual thinkers rather than verbal, such as artists and designers. These people usually find programming difficult, based, as it is, on words. Scratch and Toontalk are visual programming languages, so visual thinkers often find them more congenial. But they still use abstract representations of programs, and their visual vocabulary is extremely limited compared to what appears in art and design. So new programming languages that exploit a wide range of visualizations are needed. ItÕs also possible to have programming languages based on other modalities, such as gesture, like the one depicted by Tom Cruise in the movie Minority Report [Spielberg 2002].
Sometimes, instead of programming by telling the computer what to do as a set of rules, it would be better to just show it by example. People learn best by example. If you do your taxes one year, the process youÕd go through for next yearÕs taxes isnÕt that different, except maybe for a few details. A solution to that is called Programming by Example [Lieberman 2001]. You show the computer a sequence of steps on a concrete example, and it remembers them. Then it creates a program that can be used on different examples (like next yearÕs tax return) in the future, following the same pattern. It can generalize the program to be more ßexible, so that it may apply to situations where the new examples are only similar to the old ones in some way.
Writing a program in languages like Scratch means you have to start from (excuse us) scratch. You canÕt use the vast capabilities of all the other programs you have already. Programming by Example is a solution to that, because you should be able to demonstrate a procedure using any program you already have.
Another important aspect for demystifying programming, ignored by most beginning and expert programming systems alike, is debugging. Beginners are shocked to find out that almost all programs they write donÕt work the first time. Most systems leave the programmer pretty much on their own to figure out what happened. Debugging tools in most programming environments havenÕt substantially changed in decades. Many aspiring programmers quickly give up when they see how hard debugging is. But there are some great ideas about how to make debugging easier, such as a debugger that lets you run your program forward and backward at different levels of detail [Lieberman 1997].
WeÕll need a considerable amount of innovation in programming languages and environments before we can truly get to Software Makerism. A good programming environment not only helps you manage complexity. It also teaches you about the language, your program, and most importantly, how to clarify your own thought process.
Hackathons and the Maker movement
You can see an inkling of the democratization of programming in the current popularity of ÒhackathonsÓÑsocial events where people get together to write programs on particular themes. They brainstorm together, share ideas, make presentations, eat pizza, stay up late, and build community. The social atmosphere of these is wonderful.
ItÕs just a shame that the programming tools used in most hackathons are still so difficult that full participation in a hackathon is generally limited to people who are already ßuent in programming. And even then, the duration of such events, usually a day or weekend, makes it hard to accomplish substantial work. Many current hackathons are exploitive, run by companies to get free work from people, steal ideas for their products, or scout out potential employees. The prizes given out by hackathon organizers serve to encourage a competitive rather than cooperative atmosphere. But as programming gets better, events like hackathons will become a way that more and more people will drive the Software Makerism movement.
When all these new technologies come into play, we expect that writing your own programs and sharing them with friends will become commonplace. As in hardware Makerism, people will want to share designs and contribute to the community. Software wonÕt have annoying ads, license agreements, privacy violations, etc. since it will be at the service of users rather than serve the commercial interests of the companies.
As Software Makerism rises, software companies will get increasingly disintermediated, just as we believe hardware companies will be disintermediated by 3D printing. For example, we are writing this book using free, open-source software rather than a commercial program; not because we donÕt have to pay for it, but because it appears to meet our needs better.
We were originally going to end this chapter with the line:
Programming is too important to be left to programmers.
But upon reßection, we thought, why should we assume that programmers are a small, specialized group to be Òleft toÓ? Instead, weÕll say:
Programming is so important that everybody needs to be a programmer.