railway

Why Everybody Can Profit From Learning a Little Bit of Programming

TL;DR

Most people would benefit from gaining some basic coding skills. Coding empowers them to build their own stuff and helps them to learn the structured and strategic approach to problem solving that we coders use every day to solve our programming problems.

Background

There’s not many blogs that I read on a regular basis but Jeff Atwood’s (aka Coding Horror) blog is one of them. Just today he published a post titled Please Don’t Learn to Code – and reading it made me sad. Jeff argues against recent initiatives that suggest that everybody can and should learn to code (e.g. codeyear.com). While I agree with some of his arguments and while I can follow his reasoning, I don’t agree with the conclusion.

Sacha Greif wrote a response that is short and to the point: It’s not about mastering something so you can code professionally like we do – it’s about gaining some basic understanding of how these things work. I think this is spot on – but I also think it’s missing two vital points that I want to talk about in this post.

Creating Cool Stuff

Jan Lehnardt responded to my tweet that it’s about “building absolutely cool shit” and I couldn’t agree more. At some point, everybody has some cool idea about a website or application – but they don’t have the money and/or the skills to build it. Which is sad – very sad, in fact. Just think about all the potentially cool ideas that we lose every day and every hour because somebody who has a cool idea doesn’t have the means to make it happen. It reminds me of what Linda Liukas said in her talk at RailsBerry about girls who don’t know how to program: Imagine what young girls (and boys, for that matter) could do with all their energy and motivation if they had ways to channel their motivation into a website, app or even a commercial product. Pure awesomeness.

And even if people have the resources to let someone else do it: There is still a dissonance between the thing you think of and the thing somebody builds for you based on what you tell them. If you could do some prototyping yourself, well, that could change things.

If coding was a “basic skill” just like writing, reading or doing math we wouldn’t have these problems. People could – at least rudimentarily – implement their own ideas and then maybe go find some professional coder to do the real thing or an investor to provide money or whatever. It would be empowering.

Problem Solving

Jeff mentions that to focus on learning to code “puts the method before the problem” and that coding is not the goal – problem solving is the goal. I agree – and this is the important point.

In my humble experience, lots of people lack the basic skills to tackle and solve even the simplest problems. How many people do you know that suck at math – especially word problems? If you haven’t realized it before: They don’t suck at math per se – which can often be seen by their issues with other things that require structured approaches like physics, chemistry or even Latin. They just have a hard time coming up with a strategy to understand and then solve the problem in a structured manner.

Think what we software developers do: Some customer explains the problem to us – and we immediately try to split the problem into smaller subproblems that are easier to understand. Then we rephrase it by writing a test. Then we solve the problem and verify it with the test and by showing it to the customer. In the process, we’re extracting variables and methods – which actually just means we put name tags on previously unnamed things – and we put them in context.

Most people don’t think like that. Instead, they try to solve the whole big ass problem in a brute force style – and quite often, they fail. How often have you looked someone over the shoulder when they wrote down the first steps of an equation and thought “I can solve this problem easily but if I did it like him/her, I would also fail”?

It’s not about learning to code – it’s about learning to take a big problem or task and strategically dividing it up into subproblems or subtasks and then tackling them one by one in a structured way. It’s about a bottom-up instead of top-down approach of doing things – no matter if they’re complex or easy. Learning to code could help people get used to that strategic problem solving because, as I said before, it is extremely motivating and empowering to create things – as opposed to, say, learning this skill by doing math which lots of people find boring and frustrating.

So that’s it: Two reasons why I think that most people would benefit from some basic programming skills.