=====
Please learn to code. Also, learn to change your oil and maybe your spark plugs; learn to cook; learn to replace buttons on your shirts; learn to fix your leaky sink and plunge your toilet; learn to plant flowers and tomatoes; milk a cow; shovel some dirt; experience driving a tractor, both the kind in a field and the kind that pull tons of cargo down the expressway ...
Get out of your comfort zone, live for a minute in someone else's shoes and maybe, just maybe, you'll learn to respect the work that other people do and be willing to pay them for it - they deserve to be paid for their Work. Yes, sitting behind a desk all day bringing brainpower to bear on saving the company money is Work. Driving 11 hours a day is Work. Grilling that steak and walking it to your table is Work. It's all Work because it takes us away from our families, because it's so well regulated that it adds stress, because we'd rather be doing other things but the bills have to be paid (i.e. we have to pay other people for the Work they do keeping our lights on, our Internet connected and our water reasonably clean.)
So, please, learn to program. Then, when you need software built, you'll know why you hired me for "so much" and how much trouble I'm saving you.
As people who have embraced technology we all see the benefits of it and it's foremost in our minds as to how useful it would be if others did the same but how many of us have really weighed up the benefits of someone spending 20 hours learning basic coding against 20 hours learning to cook, or plumb, or speak a foreign language, or understand physiology, or how to listen, or a safe driving course, or plastering, or gardening, or understanding statistics, or history, or spending that time with a friend.
It feels to me to be a gross generalisation - it's really useful to me therefore it's really useful - but without knowing more about the person in question, their life, their issues, how they think, that's really all it is.
I guess "You don't have to learn how to code" would have been a more accurate title.
No one is seriously saying that learning, say, an obscure type of lace-making will improve your life in any way.
Learning to program is akin to learning to read; in a sense learning to program is really about learning to think clearly about a problem.
And that can be clearly applied to most aspects of life.
That's not a problem, that's opportunity.
... learn to fly a plane; learn to fight with a sword; learn to design cars; learn to write novels; learn to make shoes; learn to design clothes ...
So in that respect, why should I decide that one of my skills is the most utile on the planet and thus, everyone ought to be familiar with it. We all wear shoes that only a minority of humanity know how one can be built from scratch, and virtually no one can build one from scratch without requiring input from professions he/she doesn't understand.
IMHO, this whole "Learn to code" thing is a bit egotistic.
[EDIT] Changed "profession skill" to "one of my skills"
I also agree with what you advise that learning is good for its own sake esp. if it is a concrete skill.
--
But I think the "learn to code in a year" fad has less to do with normal concrete skills. A lot of the cheerleading present this mysterious "Coding" as some form of national imperitive.
I've seen references to how many 'coders' other countries have as some sort of Arms Race. More coders == better somehow.
Whilst I admit having zero coders is bad, I just don't think that happens in practice.
This article is the best-articulated explanation of why programming should be a core part of the college, and even K-12 curriculum I have ever seen. I just can't agree more.
An anecdote.
When my girlfriend was still in school she needed to collect a great deal of data for a project. It was available for sale from industry groups and such, but she didn't have tens of thousands of dollars for a membership. So she resigned herself to harvesting it manually.
When I noticed what she was doing I pointed out that I could make this process easier for her by writing a small computer program. A few lines of Javascript and Python later she had her data, and in a small fraction of the time it would have taken her otherwise.
I explained, in general terms, what was going on in the program and why it worked the way it did, and explained some of the changes I could make if she needed it to work differently. The programming involved here was not in any way difficult or clever. The interesting thing was that she had never even considered the fact that her problem could be solved using computer programming.
She commented to me a couple months later, after I'd helped her with a couple other small problems in the same vein, that she had started to see problems that could be solved easily with a little bit of code everywhere she went. I didn't coach this response out of her, she was honestly amazed at what could be accomplished and she continues to view the world differently because of this exposure.
Now, she certainly hasn't become a "computer programmer" since (and she likely never will). But gaining a basic understanding of what can be accomplished using programming tools has actually changed the way she views problems.
Edit: I noticed people are concerned that having too many people with just enough knowledge to screw things up might be a bad thing. In my girlfriend's case the opposite has been true. She hasn't all of a sudden decided she can solve every problem by writing some code (or convincing someone else to write code).
On the contrary, she actually has a better appreciation for how computer programs work and why writing a new one may not be a good idea in all cases. For example, she understands why a custom application requires maintenance, and that maintenance isn't just some trivial thing that you hire an intern to take care of. In fact, she has actually talked her boss out of having new applications created because she realized that the projects would likely end in failure.
For the common woman or man the revelation of computing comes from seeing what can be achieved, not how it is achieved.
She might not be able to write a single line, but when I was explaining it at a very high level going through the code, it felt like she was trying to see how the computer would think. She's still of the belief that a computer can think on its own and we're simply asking it to do something for us (like you would a horse on a farm), but she really did want to know how I could teach a computer to do something it didn't know how to do before.
I don't think you should ever discourage someone who _wants_ to program, I just don't think it's knowledge that everyone needs. Getting a general understanding of the way computers work (high level) would be far more useful to the vast majority of people.
1. Don't we all learn physics? At least basically in school we learn about inertia and atoms and velocity. Sure we don't learn the hard stuff and our understanding is woefully incomplete. But the analogy would be "the physics we learn in school" and "things like conditionals, sets, graphs, types". 2. The utility curve of physics is a little different than that of programming. Both contextualize the world and give you richer understandings of it in a similar fashion. However, physics stops solving everyday problems sooner than programming does. I have never whipped out alternative spacetime topologies to solve an everyday problem. I have written tons of bots and things to automate my life.
Dunno, just some thoughts.
I think your first points kind of undercuts your second in that we simply don't think about how physics helps us with our everyday problems since the basics have been ingrained since childhood. I agree that basic computer architecture/programming should be taught in grade school and will go further and say that if it was, it's utility would also fade into the background as we end up applying those childhood lessons unconsciously in our every day life.
Really? The average person needs as much physics as a great ape needs, which is essentially to just unwittingly count on it working. Very few -- if any -- of one's typical actions during a day would be simplified by a better understanding of physics.[1]
Meanwhile, the average modern person encounters software issues countless times a day. Many of those interactions pose a struggle that a modicum of computing knowledge would simplify, helping the person help the computer help them.
1. Except thermostats. Most everyone occasionally needs a refresher in thermostats versus HVAC capacities.
Now, to be entirely fair, this is not "coding" but "computer science". (Which, coincidentally, is neither a science nor about computers.) However, I think coding is a practical proxy for computer science, so the idea is the same: it's not just a practical skill but also a deeper understanding of the world.
And many of the problems the author outlines really aren't problems. My Android app crashes, or my form doesn't submit. Yes, there's code underlying those problems, but SO WHAT. Why should a layman care about memory management?
Anyway, I find this a supremely short-sighted argument. But I think the crux of this whole series of discussions is around one question: Where on the spectrum of "things everyone should know" does "programming" fall?
We all agree that there are hundreds, if not thousands, of things about programming on that list. Reading, arithmetic, critical thinking, civil rights, personal finance, health, history, etc. And in a world where many people are illiterate, in debt, oppressed, and so forth, shouldn't we focus on those problems first?
[1] "If you don't know how to program, you filter out all parts of the world that involve programming. You miss the loops and divide-and-conquers of everyday life."
As you your other point though, about general problem solving, I think I was unclear. When I said you miss the loops and divide-and-conquers of everyday life, I was just trying -- perhaps too lyrically for my own good -- that you are unable to categorize the world into categories you do not know and cannot recognize. You can't see that the operation you do for every page could be abstracted into a loop, exectuable by a computer. You don't see that you don't need to compare all of your friends to arrange them by height, say for a sweet picture, but you can quicksort them. (Ok this is about as contrived as you can get but programmers have a hard time thinking of places most people don't see programming but we do. Because we see it everywhere).
Finally, sure we should focus on illiteracy, debt, oppression etc. We are working, though, on a lot of these problems programmatically.
You have to be a pretty good programmer to write a multi-page scraping script fast enough that it beats the tradeoff of just doing it by hand. Or you need to solve the problem another way. I guess that's what I'm getting at... the problems you're highlighting are real, but I don't think the solution is "learning about programming."
10 PRINT "I AM THE MAYOR"
20 GOTO 10
If everybody on the planet could write and understand that program, the average level understanding of computer science on the planet would have increased exponentially.
The amount of learning resources we have in this day and age due to the Internet makes the question 'Should I learn (blank)' egregious. If curiosity hasn't compelled you to look up an intro tutorial/book, then just forget about it. The first question you ask on the internet should not be 'Should I learn to code?', it should be 'Why won't my hello-world program run?'.
"That which interests us in a given situation, that which we are likely to grasp in it first, is the side by which it can respond to a tendency or a need. But a need goes straight to the resemblance or quality; it cares little for individual differences. To this discernment of the useful we may surmise that the perception of animals is, in most cases, confined." - Bergson from Matter and Memory
Constraints on what we broadly know and understand are constraints on our contact and perception of the world. We can't live in a digital world and be blind to the recursions and graphs in the furniture.
Hell, just learning to spell better than the average HNer.
Now think how many monotonous office jobs are there that could be at least partly automated by a few lines of script?
Also when I was at school we had compulsory music classes as well as compulsory design/technology classes that involved using power tools.
decomposing large problems into smaller ones is math. we all took 10 years of math in high school and college.
a broad education is good. coding, in particular, may or may not be relevant, but certainly more and more schools include a year or two of programming in high school or college. that's probably plenty. no need to get all worked up about this.
Programming provides a practical hands on may to introduce logical problem solving. It's something that could be used to supplement Math class.
I find it much easier to understand Mathematical stuff if I have written a program that implements it.