So I’ve been reading the Joel on Software blog pretty religiously lately, and I’ve decided that part of his success was that most of his blog posts were so short he could probably do them in one sitting. I’ve been trying to blog more, and I think that short, hastily edited blog posts facilitate getting into the habit of writing more, which is a skill I want to keep sharp. So expect more, lower quality content from me from now on!
Everyone should learn to code!!!one1
Something that seems to keep coming up on the programming subreddit and Hacker News lately is the popular movement to teach programming as a skill to everyone. This is generally the point where the career programmers crawl up into their tree fort and pull up the ladder prior to sneering at the optimistic newbies who think that they can learn to code in a day! What fools! How gloriously they shall fail! Come, brothers, and let us await the schadenfreude and “I can haz teh code?” questions on Stack Overflow! Guffaw!
The biggest aspect of this movement that rubs programmers the wrong way, I think, is the fact that these campaigns seem to target themselves specifically at people who understand very little about computers in general, and conveys misinformation to the people who are already least informed. Sometimes they do this because the media networks themselves know nothing about programming, and other times this is done to take advantage of people by offering them $99 one-month online courses in how to get rich in the computer industry.
The following video was probably the most egregious example of the ignorant media. They don’t even manage to make it through the first minute of what purports to be objective coverage of the Year of Code movement without describing the code as “baffling” and “gobbledygook.” It gets better when one of the directors of the program admits to not knowing how to code immediately before making broad assertions about the role of programming in our modern world.
So the career programmers are probably understandably miffed at these sorts of descriptions of their profession, combined with the suggestion that anyone can do it without much effort and that “you can build a website in an hour!”
When your livelihood is based on using over a decade of ongoing education and experience to charge $100/hour to build websites, a task which normally takes you between days and weeks, ignorant assertions like that are both insulting and have the potential to deter prospective customers.
“If it’s that easy, I’ll just do it myself!” the potential customer scoffs, before teaching himself PHP and building a website that exposes his database to SQL injection attacks, lacks even the most basic of usability features, is unusable on mobile devices, and errors frequently (but he’ll never know because he doesn’t even have logging to tell him of the terrible experience his prospective customers are having!)
But on the other hand, some programmers welcome the idea of our profession gaining more mainstream appeal. We work hard and care about what we do for a living, so seeing our friends’ eyes glaze over whenever we talk about what we’re passionate about can be frustrating.
Furthermore, with most employers complaining about having difficulty finding good programmers on the market, we could do with having more talented people entering the field from all walks of life.
If nothing else, it would be nice to get rid of the gut-wrenchingly naïve way that programming is portrayed in popular television.
That scene is essentially the programmer equivalent of a plumber announcing to a room full of contractors that he’s going to “Use a wrench to check the valves to see if there’s some sort of aquatic discharge” before rushing off, clearly in a hurry to get to work before his buzzwords get cold.
Ultimately I think it comes down to educating people and setting realistic expectations. I really believe that people can learn useful programming skills in a limited amount of time. I also believe that coding is an excellent way of helping people to hone their analytical, logical, and problem-solving skills.
Let me put it this way: I’m not a carpenter. I’ll never be a carpenter, and if a genie suddenly appeared and offered to give me the skills of a carpenter, my reaction would be an unenthusiastic “Meh, why not?” or perhaps “Genies aren’t real. Where’s the projector and fog machine?”
Yet I own a tool set, and an electric drill. I used these just the other day to assemble a liquor cabinet for myself and to mount some surround sound speakers on the wall of my living room. But I would not attempt to build a bridge.
People already understand the difference between someone who owns a drill, and someone who makes a living doing carpentry. They also understand the difference between someone who does carpentry as a contractor for a living, and someone who has spent 60 hours per week for most of their life working with wood because it is both their passion and their profession.
This, I think, is the key distinction that is often lacking when teaching people about programming. Hobbyist, professional, and artisan are all different levels of skill in the same discipline. But many of the most common tasks people need computers to perform are also ones that can be achieved by a hobbyist programmer. Tweaking the CSS on a wordpress blog, automating some simple paperwork task the office, or simply being able to identify which tasks might be automated so that one can make better suggestions to the creators of software.
Conveying the appropriate expectations to those learning to code and teaching useful basics to a wide audience of people is a Good Thing. But misleading people into thinking that difficult tasks are easy will hurt more than help. People should expect to learn to create simple applications to perform tasks that are both simple and useful.
They should also be told that given what they already know, expanding their knowledge of programming to include new things they’re interested in accomplishing with their skillset is much easier once they know some basics.
They should not be led to believe that they can quickly slap together a fully-featured, multithreaded, asynchronous, peer-to-peer file sharing system on a Saturday afternoon. Nor should they be led to believe that their programmer friend’s work as a computer security expert for an online financing company is actually pretty basic, but she’s just really really bad at explaining it.
Conveying realistic expectations of what these sorts of introduction to programming courses can and can’t achieve is imperative to their success, and so far we’re failing pretty miserably at that task.