On [not] learning to program

Back when I was desperately trying to learn PHP a few years ago, I would have killed for the resources that are all over the web today. If I had had those Stanford classes, Kahn Academy, Code Academy or Think Vitamin, maybe I would have actually learned to program. Instead, I struggled along with out-dated books, rambling, bug-filled tutorials, and complex theoretical discussions on the MySQL documentation forums. In the end, while I learned an incredible amount, I certainly never did learn to program.

I stumbled across yet another incredible resource yesterday: The Bastards Book of Ruby. Written in plain English, the online book takes you through practical programming projects, while teaching you about variables, loops, and objects as you go. In just a few minutes yesterday, I read about how to create a tweet aggregator and how to read from and parse text files. Both were interesting, engaging and useful examples. Somewhere down the road, I can picture myself going back to this book and putting some time into finally learning/playing with Ruby.


But (of course), there’s still a huge fly in the ointment: getting this stuff downloaded, installed, compiled and working. I’d venture to say that the target audience for this book is people like me—people who already build websites, people who already code, people who already make stuff using some combination of technology. Like many other people, I make my stuff with WordPress on my local installation of MAMP. The 10+ times in the past when I’ve tried to get Ruby and Rails working on my local machine, I’ve broken MAMP. Subsequent research and forum postings have even advised against using the MAMP copy of MySQL with Ruby. So how are you supposed to run the two? One forum poster told me to run a separate copy of Mac OS in a virtual machine! Sorry, but that’s just a bit too much for me.

In an interview with Fresh Air in 1996, Steve Jobs argued that computer science was something that we should all be exposed to:

In my perspective … science and computer science is a liberal art, it’s something everyone should know how to use, at least, and harness in their life. It’s not something that should be relegated to 5 percent of the population over in the corner. It’s something that everybody should be exposed to and everyone should have mastery of to some extent, and that’s how we viewed computation and these computation devices.

While I couldn’t agree more, I really don’t know how this can become a reality, given the state that technology is in these days. In order to execute a single line of code, you need to download Xcode to be able to download to Homebrew, to be able to download Ruby, Rails, MySQL, rpm, etc etc etc. This really makes the whole Ruby on Rails framework available only to a select few.

The reality is simple: increasingly few of us know how to actually program in an age where we need exponentially more programmers. Computer science enrollment has leveled-off or dropped in the last decade, and we don’t teach kids to program in school anymore. And finally, in my opinion the most crippling issue, when people actually get motivated enough to learn to program in something new and exciting like Ruby on Rails, they’re extremely likely to fail even getting the software installed.

While this abundance of new learning resources is obviously fantastic, I think considerably more attention needs to be payed making it so that we can actually use them. When writing a single line of code involves an hour of downloads, broken installs and late nights trolling through support forums trying to decode error messages, I really don’t think we’ll reach our end goal: teaching more programmers.