I hear a lot of people who already know how to program say regularly that learning to program has never been easier. They’re right, in one sense: there have never been more, less expensive, or better tutorials available to learn how to tell computers what to do. In a few seconds on google, I can find how to write HTML/CSS, install wordpress, and write my own theme. All of these resources are helpful, clear, and easy to apply. In no time, someone like me can write a simple theme to suit their needs. What wonderful times we live in!

And yet, there are a lot of other things you need to learn to run your own wordpress blog. You need to understand PHP’s very cryptic, messy syntax. You need to pick a host and know how to tell between a bad one and a good one. You need to know how to setup, use and backup a MySQL database. You need to learn how to use FTP. You need to know how DNS works to set up a sub-domain (or pay the price of a whole new domain; probably why many hosts make DNS management so confusing, now that I think about it.)

All of these things I know how to do, but it took a long time to figure this stuff out, even with the many resources available. I recently had the idea to write a TV Tropes app, seeing as how uncomfortable it is to read on mobile and how spoiler text doesn’t work, along with a couple of other nagging issues that could be easily solved with a native app. Seems like a pretty straightforward problem, right? It’s basically a re-skin of existing content, right? Somebody already created a RDF database of the site that would work perfectly, right?

But there are a lot of hidden learning dependencies there, too. Of course, you need to learn Xcode and Objective-C. But there are loads of really great tutorials for these; if you have experience with other languages, that shouldn’t take more than 20 hours to learn well enough to use. With some practice and a little trial & error, you should be able to figure that out.

Then you have to learn how to use an RDF. Somebody already wrote some C-libraries with Python bindings called Redland. In order to use Redland, you need to install and learn how to use the Raptor and Rasqal libraries. To install these, you need to figure out Git. You also need to learn Python in order to bridge the libraries over to Objective-C. How long would this process of just learning these libraries, languages and project managers take? I couldn’t begin to guess. And these are just the dependencies I could identify with about 15 minutes of research. It’s always more complicated than you think it will be.

Programming is still really hard to teach yourself, but for different reasons. There are loads of resources available, but the problems we use programs to solve are a lot more complex than they once were. And there are more apps than ever, more designers than ever, and more “computer people” than ever, even if they don’t have a clue how computers actually work. It’s as hard to sort the good resources from the bad as it is to sort the good products from the bad. We’re flooded with free, amateur things. Right now you’re reading a free thing from an amateur writer and programmer!

Programming takes a lot of boring research and tons of trial & error. You don’t need to spend any money or find some sort of special wizard guide to start learning. But don’t let anybody tell you it’s easy.