Literacy, Software and Otherwise

Is your computer a tool, or an appliance? Appliances are good, but tools can be better. You can watch video on an appliance; you can make a video with a tool. You can read a book on an appliance, you can write a book with a tool. You can use software--access a website, use a database, manipulate data--on an appliance, you can create your own software on a tool.

At the moment, the computer-using world is divided into two groups. There are those who are happy enough to use their computers with whatever software is made available to them, and there are those who are able to make their own software.

In other words, the software literate and everyone else.

The software literacy divide is comparable to the old-fashioned literacy divide. In populations where literacy is not widespread, a professional class of scribes can develop. If you want to read or write a letter, a note, a book, anything, you go to the scribe. You hope the scribe is good enough to express your ideas accurately and to be able to explain all the words you want read to you.

If you aren't software literate and you want a piece of software to solve a particular problem, you go to a software scribe. You hope the software scribe is capable of writing a program that solves your problem correctly, accurately, reliably and maintainably.

Illiteracy is generally considered bad. In a free democratic society, it's best if you have a citizenry that can read and write, and think critically and for themselves about what they read and write. So we have comprehensive public education and a literate population.

What makes software so different? There are many reasons software literacy would be advantageous, beginning with improved efficiency at work. It shouldn't be hard, either: computers are everywhere, in our pockets, schools, homes, workplaces. High quality professional software, published under open source licenses, is widely available for free download.

So, what's the problem?

Learning to Read and Write

Do you remember learning to read and write? Chances are, you learned over a period of years, starting from the first time you ever saw a written word: maybe on television or maybe on a traffic sign or maybe in a magazine or maybe even in a book.

What you didn't do was sit down with a copy of Warriner's English Grammar and Composition and the MLA Handbook for Writers of Research Papers and start reading from Chapter 1 about why you might like to learn how to read and write. You certainly didn't do that before you'd ever held a book in your hands, or knew what a book actually is.

Yet that is almost exactly how most people have been trying to learn to program.

We buy 1200 page books that describe in excruciating detail every command and function of a programming language, every quirk of the language's control structures and data typing, every keystroke and mouse click to install and configure the software--yet these same books skimp on or skip entirely providing any context for what those functions do and how you might use them.

We try to follow tutorials that involve fairly complex processes, without understanding what they are, or in some cases without even being aware that they exist.

Imagine being a child who has never seen a book or learned the alphabet. Now, imagine being given Moby Dick and being told to read it and write a book report on it. Because that's more or less what it's like to try to learn to program. It's possible, but you'll have to put in a lot of time to try to teach yourself all the supporting technologies: the alphabet, how to open and close a book, how to turn a page, how to interpret the words on the page and navigate through chapters and all the rest that we take for granted as adults who have been reading for as long as we can remember.

Learn Python the Hard Way, by Zed Shaw

A Better Way

The beauty of Shaw's book is that it's the programming equivalent of Fox in Socks or Go Dog, Go. Each chapter is a simple snippet of code that you copy, one character at a time, into your own files and run on your own computer. Each chapter includes some "extra credit" problems that build on what you've already learned, and the focus of the book is on showing the reader how to move on, not telling the reader everything there is to know about a programming language.

Learning to Write a Web Site

So, here's my contribution to the literature of learning to program. I'm still very much learning to program myself, but I'm getting a lot of help, not just from the Internet, but also from great people in the Boston PHP and Boston Python meetup groups. So far, I'm making progress, but the only way to get better at writing anything, software or stories, is to do it, A LOT.

Use this site as a resource, but not the only resource. Some other suggestions:

Exercises

I'll try to incorporate additional exercises or questions or topics of further research on each page; try to at least read and think about them before moving on to the next page.

  1. This web site is intended to be an aid for learning to build web sites with HTML/CSS, PHP, MySQL and JavaScript. What do those different things do, and what are they used for? Why not just use one of them for everything? PHP and JavaScript are both full-featured programming languages, so why use both?
  2. What's your favorite text editor or IDE? If you don't already have a favorite, think about picking one; if you don't know what these are, be sure to do some research and pick one and try it out. If your first choice doesn't work out, go back and try another one. Keep at it until you find one you like.
  3. Set up a web development environment on your computer. Do some research; odds are you'll need something that rhymes with "AMP" (hint: XAMPP is a pretty good choice and easy to use). You'll want to make sure it works and that you know how to use it.
  4. What other tools and facilities will you need to develop and publish your own web site? (hint: you'll want to be able to keep track of the changes you make in your code over time, you'll need a hosting service for your live web site, you'll need a way to get files on your web host, and there may be other things you'll want/need to do). Don't worry, you don't need to have it all from the very beginning, and you can learn a little bit at a time as you go.
  5. What happens when you screw up? (hint: you'll have to do things over again; sometimes, you'll have to go over the same ground many times). One thing not to do when you screw up is worry about it or get upset. It's going to happen, and it will almost always help you learn.

Vocabulary

I'll include this section on every page, going forward, to list the new words included on the page that you should really have some idea what they mean before going on. If you already know these words, great! If not, do your own research to get definitions that work for you: