Nobody ever expected me to be able to learn to do surgery, plant stuff, design buildings or whatever. Programming is not basic literacy. Let's stop pretending it is.
Some reasons that teenagers I know have chosen to program are:
- To make video games
- To make web sites
- Because programmers make money
Some reasons that programming is a decent career choice:
- It’s extremely transferable. The number and types of companies that need programmers is increasing every day. You can find good jobs almost anywhere, plus working remotely is now an option.
- Nearly all fields of science, math & engineering now involve programming, even including many soft sciences. Research of all kinds has moved into computing environments for statistics. (As a small example, I help my brother who’s an anthropologist write software to do things like measure & categorize rabbit bones.)
- There are many interesting problems to solve, and pretty much all businesses are interesting in automating expensive processes.
Compelling reasons for me:
- Making digital art. Using procedural techniques to make pictures is one of my favorite things ever.
- Working out algorithms and solving problems and optimizing code is like doing puzzles, it’s a ton of fun.
- I’ve helped make movies and video games, as well as web apps and other production software that millions of people have seen & used. Programming can be a good way to get involved in projects that feel important or culturally relevant.
It's important because it allows us to instruct computers to do things on our behalf. The only infinitely versatile tool in human history.
Why should they only use their computer for browsing & word processing?
I overuse 'flossing' as an analogy for anything that takes a long time to appreciate the value of. I've tried to promote flossing with various narratives - that its prideful, that it steals money from dentists, that it's the last people do but the first they should.
I always figure that the floss analog is falling flat, that it's not amusing or easy to understand or relevant as an analog, but I always come back to ulterior, that I just have no clue how to instill a value with a person that can only appreciate through decay.
Anyways I have no idea how to transfer these ideas to young people and since its the only way to 'give back' that I know, I'm feeling really useless.
However, learning to use computers for relatively simple tasks and as an aid in other areas makes a lot of sense. Take the concept of compound interest - an important notion for anyone who ever wants to buy a house. Learning how to write a simple script in a language like Python to calculate compound interest is going to be a useful life skill. Similarly, learning to write a simple script that backups all your stored photos to some storage media or other is a useful skill to have.
Notice this is very different from the old 'computer literacy' class concept that was all about teaching students that they needed to use Microsoft Office for everything, and that ideally they'd run Office on an Apple computer for all their needs. That was just a corporate marketing game.
For most teens the thing they grate against the most is lack of control over themselves and their direction. Programming puts you back in control. You can make a general purpose computer do anything you can imagine.
This were the breakthrough sparks of enlightenment for me, even if at first I only groked them viscerally... only decades later I found the words for this.
Programming is a tool for thought, a tool for thinking in a very peculiar, rare and valuable way. It doesn't matter if you'll rarely/ever use it to actually write usable software. In other kinds of thoughts, we can always glance over stuff and be misleading or imprecise without even realizing it. When you put something into code and something really dumb, eg. a computer, executes them, you have a rare chance to actually se how incredibly bad your thinking and your instructions and your communication in general are!
(And that it's good at making you feel stupid... this alone is good reason to make everyone learn it, most people think themselves way too smart and don't understand how complex everything is around them! Math used to feel this niche, but programming makes it more visceral - when you've learned a programming language well enough, have access to a powerful computer, have a known to be solvable problem in your face - but just not succeeding to get at a working solutions and realizing it's only of how bad the shitty chunk of jelly in your head is at thinking, that's enlightening. Making you lose some of that self-confidence engendered by your otherwise rich education and artistic taste and developed culture and whatever not... realizing that no, neither that nor anything else will make you less dumb.)
Learning about computation helps up think better and helps us better model other people in our heads.
This is why I think computer science + practical programming should be mandatory for majoring in literature, linguistics, psychology or philosophy!
- artists - you should be able to automate blender, photoshop, etc as needed
- finance - python increasingly required
- science - juptyerhub notebooks for data analysis
You don't have to know computer science, algos, and "correct" software arch. but you should definitely start getting comfortable with programming.
* Lots of work is done on computers and programming is a way of automating that work
* If you don't code, you may well work with others that do and having some exposure to what on earth it is some people are/aren't doing is valuable. One of the most useful things I ever did was fail to run a business as it forced me to understand that sales/etc aren't easy, as many techies like to presume, and require skills I lack
* You can build things. Building things is fun, at least to me
However... the parts of programming that are useful to everyone are applied logic, critical thinking, and 'debugging'. Being able to break down a problem, find a metaphor for a problem, evaluate what you know and don't know about a problem, etc are useful skills that apply everywhere, and that programming teaches really well. When something isn't working, being able to ascertain why by changing things one at a time, or by knowing that you can iterate to a solution instead of jumping to the last step, are immensely powerful ways of thinking about things.
There may be other ways to teach those skills instead of abstracting them to programming but I've not encountered any good ones yet.
But yeah I don't know if "should" is real here. If you're greatly compelled to do something else, go do that.
Supposedly, he answered: "If you have to ask, you'll never know."
Programming is not exactly like that, but every programmer I know of has spent hours and hours programming for fun, because there is a particular pleasure to it akin to writing, where you sit for hours and create/debug (puzzle solve).
Perhaps not everyone feels that way, but I think anyone can feel that way. It is worth giving a teenager a shot at that feeling.
It just so happens that this feeling is a gateway to making lots of change in the world, making money, participating in society and many other good things! This just happens to be such a great added benefit to this feeling that it should give you confidence that this would be a "good habit" for young people.
Yes, being exposed to a variety of fields in order to choose one and get a job is an important part of school. But I think giving kids a sense of how the important aspects of our lives / society work under the hood is where the true value of education lies.
For the same reason, I think film/media studies should be standard high school curriculum.
Invoke regex to search through or fix thousands of pages of documents. Instantiate a daemon to help you around the house. Cast a bot army to do your bidding. Prove an idea true or false by creating a simulation of it. Create the app that no one would ever make because only you in particular need it.
Programming is a way to learn a new language that allows you to build something...ANYTHING...that you can easily tear down, upgrade, keep, or share.
There is nothing like the feeling of trying to build something, getting stuck, having the AHA moment, then seeing it work!
I don't focus on a particular language, stack, or goal. I push them to think about what they want to build, break, and poke around with, find an example online, then open it up and try to modify it.
I've found that most teens want the ability the explore, on their own terms. Programming is too often told from the perspective of working adults who focus on productivity, profit, or protection against obsolescence (you better learn it b/c it will be needed in your future). At that age, most kids aren't motivated by that because it's not their context.
I completely disagree with the notion that one has to "just like it" or "find your own motivation or its not for you". This is not a pipeline problem. This is an incentive problem and the industry is mostly incentivized by efficiency, speed, and profit. I try to focus on the value.
2) It promotes logical thinking and problem solving skills. This is much the same reasoning why everyone must take math/science classes. So, if we took some of the less "relatable" classes (e.g. geometry) in the mandated general curriculum, and replaced them with basic programming/data-science classes, that might be an improvement. Especially since it is probably easier to many students interested in creating a Minecraft mod that pulls in statistics related to the real world, than it is to get many students excited about acute vs obtuse angles.
P.S. I say this as someone who LOVED math classes in general and geometry specifically. I really did get excited about writing Q.E.D. at the end of a tough proof. But, I know I am seriously in the minority there.
- want to do something with computers no currently existing program allows them to,
- want to create something with artistic value (games, websites, computer graphics),
- enjoy it for the sake of it.
I can't come up with any other reason why they should.
I watch my wife perform a lot of tasks with spreadsheets to accomplish things her coworkers can't do (or would require a lot of manual work). Being able to import CSVs, do calculations, mail merges and other simple data processing may allow you to skip a lot of tedious manual work.
Programming is the next step. She would benefit from being able to write scripts to query different systems and then process more data than is practical in a spreadsheet, or do more complicated processing than a spreadsheet allows.
It's not something everyone needs (just like spreadsheets, or even calculators), but it can let you get a lot more done in many non-tech professions.
But moving past that, Excel. Just a little bit of programming knowledge can really up your spreadsheet game.
Basic logic is part of this, as is process decomposition, as is just learning a new way of communicating and many other things.
Learning new ways of thinking makes us flexible individuals. It fosters creativity. These are skills we all need in society, but the modern economy especially.
This is actually, I think, a compelling argument (aimed at adults who are deciding what children will do, less so the children themselves) for almost any subject.
- Because it's good for their personal culture to know that this field exists and have a rough idea of how it works, and programming is the type of job that everyone knows it exists but not many people really know what it really is.
- Because it's the type of knowledge you don't get to build on your own unless your parents work in that field so many kids might actually enjoy it but would never know it until they try it. I see many comments saying "if they're not interested then they shouldn't do it", but how can they know they're not interested if they've never tried it ? They can't, they'd base their assumptions on stereotypes, which learning programming would help breaking and maybe encourage more people, especially girls, to give it a go if they like it instead of thinking it's just dark magic for nerds.
- Because in the age of everything-computers and everywhere-internet, understanding basic code and basic algorithms helps demystify the myth of "it's all the Algorithm, that magic black box that nobody can control" that companies love to use to not have to explain to their customers what they do with their data. I'd argue knowing the basics of how a computer works in 2022 is as important as learning how to pay taxes or how to cook (which we also do not learn in school), because it's everywhere in your life and you WILL interact with it no matter what.
Learn how to program is in fact learning how to formalize a large problem, think about it in a structured way, and if the problem is too large as a whole, divide it into manageable parts, that solve parts and together solve the problem as a whole. Additionally an individual that has learned how to program also learned about importance of precision of instructions.
Being able to do this, and being able to think about systems and processes in a structured way is helpful in a lot of disciplines beside tech industry.
Therefore it also doesn't matter how children or young adults learn to code, this is more a question about how to get someones motivation and focus.
And especially this is not about getting a job in tech industry. Learning this type of problem solving (which is not exclusive to programming) and thinking about systems etc. will help you with/in most of the jobs out there, e.g. kitchen chef, event/wedding planner, car mechanic, musician,... you name it - even if you don't write a line of code anymore in your life.
I don't think we need to force every kid to learn to code. We ought to expose them to it, though. Kids who show interest ought to have a way to learn more.
The answer is if you have an appropriate IQ and big 5 personality traits (high conscientiousness, low anxiety, etc) it can be a lucrative career.
Tightly coupling programming to video games is going to scoop up too many kids who will be fucking miserable as a programmer.
So, let's rephrase that question. "What's a reason that might compel young people the most to learn how to program?"
Subtle difference, but makes for a far more interesting debate.
For instance, there will be kids who become inspired by video games and will be wanting to make their own. Some will start to scour the Web for resources and experiment with tools like, maybe, Unity or Godot, on their own. Others might be interested, but be entirely put off by the idea once they realize what the subject matter entails. And that's, actually, totally fine and valid.
Even so, I think general curriculum should at least provide a few lessons of basic computing to anyone. Enough to get everyone the basic idea and demystify what happens behind the curtains in broad strokes.
As computers+algorithms become increasingly ubiquitous and powerful, being able to understand and use them effectively is as important as reading and writing -- not understand this is equivalent to being illiterate in an information society. Modern society/civilization considers literacy & numeracy so damn important that it is (at least nominally) willing to sit all its youth in an educational environment for 8 hours a day, 5 days a week for 10+ years in the hope that enough of the three Rs (Reading, wRiting, aRithmetic) rub off on them. IMHO, computing is right up there in importance -- only we as a society might take decades to come to terms with that and learn how to equip people well.
Naturally, there will always be someone who likes a given topic and there will be someone absolutely loathing it.
So people came up with different education systems (for the sake of discussion I keep it at two):
1. Let kids choose themselves what they want to learn [0]
2. Conventional education, where everyone gets to see a broad spectrum of topics, whether they like it or not
Personally, besides domain specific arguments for the importance of topics, I think showing kids different topics and letting them work in as many different fields as possible is important. And I don't just mean passive consumption of knowledge, but applying it.
There are definitely kids who know for certain what they're gonna do when they grow up, but for most people life isn't a straight line and age 13-18 is THE best time to try them out IMO.
As for domain specific arguments:
1. Applying logic is obviously going to benefit anyone, just like learning math. Surely, with a kid this argument won't fly, but it's directed towards HN so I'm pretty sure you guys know what I .
2. As many have pointed out and to point out the obvious once more: Computers are everywhere and everyone is using them. I honestly think people should know, at least on a surface level, how computers and networks actually function. This isn't necessarily an argument for programming, but programming goes hand in hand with what I'd call "tech literacy", so why not kill two birds with one stone.
It's hard to explain to someone who can't code how it would make their lives better, as I assume it once would have been difficult to explain to a farmer the value of reading, but there are societal benefits to everybody knowing how to read. We can post public information like highway exits and store hours and "beware of dog" signs and know that the majority of people will be able to read them.
* Information technology is important enough that it's worthwhile having at least a passing understanding of how it works internally.
* It's important to learn how to be rigorous when organizing information and procedures. Learning to program can help with both.
However, forcing people (if that's the context; it's not clear), especially young ones, to learn something they don't have any interest in, is a surefire way to make them hate the topic in first place, and forget it after.
There are other means though, that could be tailored to one's interests, e.g. other engineering areas, or other science branches, or games (chess comes to my mind).
(of course, there's a small part of people who will find out they're actually interested, but that is the exception)
Maybe they end loving History, or Linguistics, os Maths or Philosophy or whatever they like.
When I was 9 I wanted to be a cartoonist, but my dad, who was computer illiterate, bought a ZX Spectrum because he saw a sale, and I fell in love with games and programming at 10 by myself. If someone had tried to force programming on me I think I'd ended being a cartoonist (well, if I were talented enough).
I think we need to teach how to use computers as tools for an end, like the majority of us use a water tap whiout knowing plumbing. And the rest will come by itself, if it has to come.
There is very little reason to learn something you aren't going to use. They should invest their time in what they find compelling and they will be successful.
If you think they need to learn to code to be "future proof" that day has past. In the future there will be millions of coders it won't pay well and they will have spent their energy, money and time doing something they don't enjoy and have no use for.
You can make good money as a builder or electrician etc don't try to fit a role you aren't made for.
If they want to work with words or numbers, some basic programming will let them automate repetitive tasks and eliminate lots of boring work. Examples include simple calculations in spreadsheets, formatting writing for publication, filing work email, and automating invoices. It's a useful skill like being able to touch-type.
In any case, they should not be forced to program for its own sake, since that has a narrow appeal. Instead, they should program only to do things they actually care about.
As someone said, in the future only three professions will be left: a stripper, a programmer and a taxi driver. Little did they know the latter is about to be gone.
When I was 13, I found the process of web development incredibly fascinating AND had a teacher (who happened to be 14) who helped me get over the initial cognitive speed bumps. Those ~50 hours changed the course of my life.
If they want to make music, explain how programming can be used to generate electronic music.
If they want to make and edit videos, tell them how EMCA script can automate things in Adobe, or point them to wrappers around ffmpeg
If they want to make art, point them to the various libraries that can be used to draw.
I find kids in that age range like to either tinker with hardware or like to make video games.
That said, a child can learn these things using Scratch or Logo, and it is better to learn these things at a much younger age than 13! For teenagers I would look at algorithmically-generated 3D models (for printing) and robotics.
It's like asking why kids should study chemistry or literature - they don't have to but it's probably a good idea. I don't think programming is more special in any way (even though personally I might like it more than those other fields).
I know someone who has a lot of tedious work to do. If they could program they'd be able to do it much more efficiently. They can use that time saved to do anything else they want to do, perhaps they could have earned a promotion rather than slaving away on a repetitive task.
The world moves forward through efficiency, and automation is one of the major factors in that.
To see if the tech is interesting it might not hurt to have an introductory course though.
That ability gives you power, money, respect, but most importantly it lets you influence the world around you.
If you want any or all of those things study computers.
Not everybody needs to know how to build technology. It's probably good enough to make sure they at least know how to use it.
I think too many managers/execs sign off on software that's of such low quality because everything is magic to them and they don't know to dream bigger.
There aren't any other reasons to learn it.
At all.
If they don't think it's fun, maybe they should do something else.
At the very least it can give you some added analytical abilities. Like learning Excel.
But engineers have more fun
You learn programming language to talk to computer