The whole "everyone should learn programming" meme has gotten so out of control that the mayor of New York City actually vowed to learn to code in 2012.
Nice post, I really like this bit: "It assumes that coding is the goal. Software developers tend to be software addicts who think their job is to write code. But it’s not. Their job is to solve problems."
Took me 10 years to get it.
I think you’re missing the point about the initiative.
It’s not about getting more professional programmers into the job pool.
Programming itself covers a whole range of skills that have real world uses. Critical thinking, problem analysis & solving, logic, etc. These are the skills the current generation of kids seem to be missing out on in their education and part of the reason the Raspberry Pi and similar initiatives were formed.
Also, I don’t think Mr Bloomberg is planning on becoming a coder. This to him is a hobby, you do other things for fun besides code eh?
I disagree. Of course, not everybody should learn to code in order to actually write code. BUT everybody should learn to code in order to THINK in code. “Ability to code” is a mode of thought and a language in itself, just as literacy or mathematics. We don’t teach people math and calculus so that they would crunch numbers, we teach them math so that they become SMARTER. Learning to code makes you smarter just as learning to read or count does. Or as learning to ride a bike makes you more agile.
I think you got it wrong.
The reason, why everybody should learn to code is not to have more programmers! It is only to have people know the most basic things about the technology they use everyday so that companies, advertiser and politicians can not trink them as easily as they do right now.
To drive a car, you need to attend driving lessons in which you - ideally - learn a little about the way a car (e.g. its brakes) work. Now there are no required licenses for using computers (and since computers are just everywhere there will never be such) so we need to help people help themselves to understand the technology that surrounds them.
And the information technology is not comparably to a skill like plumbing. E.g. probably real programming is comparable, but again, that is not the point why I would like people to learn to code. Even if you hire a plumber to plumb your house, you know that you will need separate pipes for fresh water and for the dirty water from your toilet. Thats common knowledge (I hope). But people don’t know these basic things about computers. (“How can my download limit be exceeded, I haven’t downloaded anything, I just watched streams?!”).
I sort of agree with you about the idea of learning “to code”, but I do think kids should learn something about how all this technology around them works, not as a potential career path but so they are just a little less ignorant about the world.
And I completely agree with you about my job not being about writing code, it’s about solving problems, with some code.
But of course the arguments against learning this sort of thing in school would apply to about 3/4ths of the school curriculum.
Learning History, Geography, French, German, Woodwork, Games, and the vast majority of the science I was taught has provided almost no direct benefit to me in my career or my job as a developer. And frankly the same goes for the majority of the maths I was taught. I’ve used trigonometry once since education.
But learning all these disciplines (however badly in some cases) has taught me a) about the world I live in and b) new ways of thinking. I think teaching kids at least the basics of how computers actually work, perhaps as a facet of other subjects, rather than just how to use them, will be important in the future.
The tech around us has achieved Clarkian levels of magic for the vast majority people, and even most of us who have a fundamental understanding of it all don’t really understand how it all works.
A few months ago I taught my mom to code. Not to be a coder, but to understand a little about the profession. I teach myself a little about plumbing, so that I know when I should and should not ask for a plumber. It also helps me be a little more critical about materials, water usage, etc.
The same goes for my mom, who now understands just a little more of what programmers do and what is possible with numbers for her classroom grades (she’s an elementary school teacher).
It’s an enigmatic field for most of the world, and I think this initiative is not to make coders, but to make the world more understanding of what we do.
It assumes that coding is the goal. Software developers tend to be software addicts who think their job is to write code. But it’s not. Their job is to solve problems. Don’t celebrate the creation of code, celebrate the creation of solutions. We have way too many coders addicted to doing just one more line of code already.
I am a programmer myself, and most of my non geeky friends somehow think I get turned on by code, by the process of coding. I like making solutions and making things work, and work the best way possible. Coding is just the means to that end.
I agree 50%. Programming is often taught as a combination of two things: algorithms and data structures. Algorithm instruction should be left to those of us who revel in them. However, in our current world, everyone needs to understand data structures… and all too few people do.
Anyone typing their e-mail address into a website needs to understand the power of cross-referencing.
Anyone using a word processor for more than a page needs to understand styles. (Actually, most programmers I meet still waste hours because they don’t understand word processor styles… which is weird, because they’re just like CSS.)
Any Mayor or CEO should have a broad understanding on what their organisation’s data can do for them… and how much damage it could do if exposed.
So, algorithms are optional, but in the future everyone must be data literate… or their lives will be destroyed by those who are.
You more than explained the pros and cons of such an aspiration. You also provided alternative initiatives and how they could benefit a larger population better and faster.
One point I’d like to add in favor of learning the basics of how computers work and how one may better use the Internet: Such achievements would also reduce the amount of INSANE protective UI and validation code. If more people simple understood what the basic elements presented to them on thousands of websites represent, we could all move forward in leaps and bounds!
Thank you again Sir CodingHorror for providing a well stated perspective to a well misunderstood problem.
They should teach kids to have their minds open and to think in as many possible ways… This will be the base of all work “done properly” regardles of it being coding, governing, teaching or just plowing the fields… But it’s easier to throw bu…it statements at people then to try and fix the real problem…
I think that your example with plumbing is spot on what this movement is about. I do think that everybody should know at least a bit of plumbing. You don’t have to know everything about it, but changing a pipe and unblocking a pipe are basic and common things that everybody should know.
It’s the same with programming, learning some basic things on your computer:
what is a file, how it’s accessed and why it could be inaccessible at some times
how a real life problem is seen in a computer world, what is an algorithm
reading basic (not the language) code and being able to understand some principles such as variable assignation and conditions
Knowing that is somewhat related to knowing how your car engine works, and yes you won’t have to use that knowledge every day (it’s not your job), but it’s an helpful skill to have.
It’s the same with almost every skill, you don’t need to be a professional in it, but having a basic understanding of it can always help you in life:
French, German, Chemistry, Biology, Physics, Woodwork, Metalwork - I do not need them for my day job or to survive.
The information I learnt in those subjects means I have enough knowledge to understand the basics when it comes to reading or talking about a topic, such as how electricity is generated, what happens when certain chemicals react or why is the sky blue or why are plants green.
Likewise, learning the basics of coding helps people understand how computers work and the logic behind the programs they use on a daily basis.
I am all for teaching children from an early age (7/8 years) the basics of coding using software like Scratch. It helps them think logically and to solve problems - all of which are vital for anything that life throws at them.
My 10 year old was able to build a space invaders game in scratch after a few hours of using scratch:
He might not grow up to be a software developer but it made him appreciate how computer games work as well as think how to solve problems like how to make the score increase when he blew up a spaceship.
It is obvious to me how being a skilled reader, a skilled writer, and at least high school level math are fundamental to performing the job of a politician. Or at any job …
In fact, none of this is obvious at all, it’s just always assumed. In reality, high school literature, mathematics, and any of the other subjects are next to irrelevant for most people. The canonical education curriculum was created almost unchanged over a century ago, and even then it never had a demonstrable benefit beyond basic education.
Arguing from need won’t bring you far. The arguments brought forth by Lockhard apply, 1:1, to teaching programming. Not everybody needs to learn programming, just like most people don’t benefit from mathematics beyond basic arithmetic. But teaching them something interesting, fascinating, wonderful can never be a loss.
tl;dr Don’t fall in the canonical education trap. Our current school system operates without a good plan and almost everything learned in high school as irrelevant for most people as is programming.
The other part is they risk becoming people who “learnt to code” in Javascript and will therefore attempt to solve every problem and adopt the “shit’s easy” attitude.
In essence if you know how to write and do math(logic), then you know how to code already, learning a specific syntax gives you nothing more. The last thing we need is more “hackers”, they water down the talent pool and have already created a world where developers have to jump through the most ridiculous tests simply to get to a real interview because the HR department can’t cope with all the applications from people who “learnt to code”.
Mike Bloomberg should have tweeted “I am going to learn Spanish” (or Chinese if he knows fluent Spanish), that would have caused all kinds of industries to think “wow, respect”.
Should everybody know how to write a system driver or the middleware to Amazon.com? Of course not. Should they know how to write a small macro or script to massage their data when they need it? Absolutely.
This can benefit basically everyone with an office job, from secretary to mayor. Remember also that for many people simply knowing how to use the functions in Excel is also “knowing how to code”.
Perhaps learning javascript isn’t the fastest shortcut, but anything that demystifies the whole process and teaches people “hey, it really isn’t rocket science”, will help out in the end.
Using your plumbing example: learning about plumbing can be handy so that you can know how to deal with plumbers. You can appreciate what they do and you can even have a general idea of how to manage them and if you’re getting screwed over by them.
I find that managers manage better when they have SOME technical background. I don’t want them to be programmers, just to have some experience.
You’re right that they shouldn’t think that learning to program for a month (or even a year) makes them good, but they should get a taste (and know that they’re only getting a taste)
This is a good post, but I am not 100% in agreement. I think the reason people seem to pick sides in this argument is that they have different views on what code is.
For example, would you equate Assembly with Html? How about C / C++ with SQL?
The people that are pro teaching to code at school are trying to get the next generation to understand the basics of our world so that they are not mystified by the work of others.
For example, I would prefer if people learnt how a central heating system works on a broad level so that they don’t end up calling a contractor in just to relight the pilot light if it goes out. (I have see this happen personally and it pains me to see this ignorance) In some cases I too have been just as ignorant of such things where I have left it to professionals to do something for me which I should really have learnt to do it myself.
Coming back to the point, the developer community generally thinks of coding as in Java or C, etc. which even I would not recommend be taught in schools. However learning to code HTML / CSS can be bring about a new approach to learning which is more experimental than the traditional methods used for other subjects like history or English literature.
I think I have a balanced view, and guess what I attribute that to. I am a software engineer. I am not a coder, I am an engineer. The difference I feel is that engineers are problem solvers, builder and makers. Which is a whole lot more than simply coding. Coding is just a means I choose to solve the problems I face.