I disagree with this. I feel like the general idea of "learning to code" is simply typing commands into a machine that then get executed exactly. The coding part teaches very little, just mainly how dumb machines are compared to self-aware human beings.
Kids should definately learn how to think algorithmically and understand mathematics/physics concepts (as opposed to repeating some pattern recognition which is to often the case) and if some type of coding facilitates engraining this knowledge I think that'd be great, but as of yet I haven't read a study that showed this to be the case.
As a programmer, when I have kids I'm not going to teach them how to code. I'd much rather they spent time playing outside, building things with their hands, acting in plays, playing music, reading books, writing papers, doing science experiments etc. Computers are nice tools to help you do these things but they are not ends in themselves.
"'I have discovered something else,' I continued. 'By flipping the pages at random, and putting my finger in and reading the sentences on that page, I can show you what’s the matter – how it’s not science, but memorizing, in every circumstance. Therefore I am brave enough to flip through the pages now, in front of this audience, to put my finger in, to read, and to show you.'"
To be fair, learning to code also teaches how to break down problems into their most simple pieces which is a very useful skill.
I am myself mixed about the benefits of learning to code. I am currently leaning towards it being equal to the other activities you list, but not greater than.
When I was growing up (80s), the computer was treated like a black box in education. You'd sit at the computer, recite the incantations, and the computer performed the magic. At school, they sat you in front of the computers and you just tinkered with the software for an hour while the teacher finished grading papers. At home, chances are good your parents didn't understand much about computers, so you were mostly on your own, and computers were so expensive that you didn't dare mess with the hardware.
These days, it's a whole new game. We can give our kids a more holistic education around coding because we have things like Arduino, Raspberry Pi, Lego Mindstorms, etc. We can teach code as one among many tools to get a job done or otherwise affect the world, rather than teaching coding as an abstract end in itself.
As an example, my daughter wants to build a garden with me in the near future. Part of that project might include some Arduino-based sensors. If she's interested, I can teach her all about it. But either way, there's a lot to learn.
All of this is to say I agree with you, that code is perhaps an equal, but not superior, among many other ways to help teach a kid how to think.
I would say if your kids have an interest in learning to program, help them, let them. If they don't, don't force it. There are a lot of things kids should understand, and anything else can be learned. The guys working on computers in the 60's and 70's understood them better than most people today working on a computer, writing software because they had to, and none of them grew up learning to code.
At 40, I'm well on my way to becoming a gray beard, just the same this shouldn't be required. Maybe somewhere around 10-12yo, an rPI or similar would make sense to tinker with in school... but that should only be to introduce kids to these things.
Kids are naturally creative and curious... let them know something is possible, and let them choose to explore. I wish there were more schools that offered elective coursework earlier on the junior high school... it would let kids explore more in a semi-structured way.
I don't think anyone is advocating LEARN TO CODE STAY INDOORS. I work as in a Head Start Lab in what we call the STEM Lab. We have 250 3-5 year old children spend an hour in the lab. They do go on a HORRIBLE Literacy Program (BUT THERE ARE NO Developmentally Correct Literacy Programs I can find). Children spend about 10 minutes on the computer and I believe the ability for the kids to learn to look, listen and respond correctly is why we see a HUGE statistical advantage to children that come to my lab as opposed to the 750 children who do not have access to the lab. So that is it in terms of computers 10 minutes over a 60 minute time.
We do teach coding principles by pattern recognition (big for literacy) and to problem solve. Heck we even do engineering with a problem, come up with a plan and then a creation. The kids always blow me away with what they come up with.
You can teach the great parts of coding outside with your kids (I do) and then see where their interest lie. My daughter who is 9 wants a Robot she can program and we will go the Arduino route. My two older kids never touched a computer growing up and no real desire except to play a game or watch Netflix (They didn't become a part of our family till they were 11 and 15). My 4 year old LOVE playing programming board games (the Turtle Game? and Robo Rally) Teaching kids how to think is a lost art and we have many things we can use to help us. Learning to CODE is code to me to help children learn to think and to learn it early which is good to me. CODE for CODE sake is dumb.
> I feel like the general idea of "learning to code" is simply typing commands into a machine that then get executed exactly.
But isn't that how every skill begins? With doing very simple things, by the book?
Like in your examples:
building things - cutting out preprinted paper models and gluing the pieces
playing music - playing scales over and over again
reading & writing - reading and writing simple sentences over and over
I don't know any skill where you just "jump" to creativity. It all takes time and effort, during which you actually learn the patterns.
I think coding is worth learning for a simple reason - computers are pervasive and universal tools, therefore to know how to talk to them is a part of universal literacy, just like reading, writing and arithmetic.
Yes, even if they're not going to become programmers, coding teaches people two important skills that I see lacking:
- The ability to break up large, seemingly daunting problems into smaller manageable chunks.
- The ability to shift perspectives from the 50,000 foot view, down to the individual line of code view, and then back up to the 50,000 foot view, and then back down again!
Variances in individuals abilities can be accounted for - jack might only be mentally capable of going to the line of code level, but I can see Mary is getting bored, so she can look at the interpreter source code - they should be encouraged to seek answers themselves.
I have a close friend who is the head master of a school here in the UK, and he is really keen to get kids coding, but there's no source materials for the teachers to learn, I think there's opportunity there for anyone who wants to pick it up :)
I agree that these are two very important skills, but I have yet to see a "Learn to code" endeavour that actually focuses on teaching these skills.
Usually, these are more focused on I/O and making the machine output interesting things like visual charts and sounds (something that is more immediately satisfying and therefore keeps the student's attention).
Excellent point. There's got to be a sweet spot between visually interesting and "symbolically" useful (maybe algorithmically is a better word there)
I tried a rather ham-fisted restaurant menu example below, but that's boring as hell. I wonder if there's something better?
I really think a nice simple language like Python is a good choice - python has a few WTFs for beginners, but the more immediate visual niche languages give immediate payoff (good) but then later their impracticality re-enforces to the child that learning it was a fun intellectual exercise but ultimately useless.
Challenge: Whats the shortest, simplest, most appealing python program we could use to teach kids? I dont know the answer to that, but it's fun to think about :)
The ability to break up large, seemingly daunting problems into smaller manageable chunks.
This is an important one. We bought our first house 5 years ago and I've been busy completely renovating it. I often get asked how I dare take on such a big and daunting project with no prior DIY experience - the answer is, it's basically what I do for a living!
That's what I always say too. I built our whole house myself. The same process applies: Split project into parts, find out how to do each part, do them. And once in a while you have a code review (inspector, building code) haha :)
I don't think there should be a difference, it's just a matter of scale.
When they start off coding, it might mean an entire week spent in a single python file:
The 50,000 foot view might be "Printing Restaurant Menu", the "line of code" view, might be getting the price of pizza.
We're not talking architecture, or operating systems, or networking, or boolean circuit logic, or anything, we're just printing their favourite food menu - a practical example of shifting perspectives.
Once they can shift easily, then we expand it in both directions - Now print menus for 10 restaurants. Now find the most expensive pizza.
I think these lessons can go hand in hand with Math -- too often the main complaint with Math is that it's too abstract (When am I ever going to use this?!) whereas if the Math lesson about averages tied into the coding lesson for printing the menu (Now find the average cost of all pizzas) kids might be able to see it as useful
Let me make an analogy: we're not going to teach kids how the food industry works before we're teaching them how to bake a cookie. We're also not teaching them about city planning before they had a chance to put some lego bricks together.
I think the important thing here is that kids need to see the necessity first. Only then can they start to deal with more abstract concepts. And actually, I don't think this applies to only kids. I think it is the reason that "learning by doing" is so much more effective than anything else.
To give an example related to programming. I have seen CS students use preconditions and postconditions (i.e., assertions), on functions, without understanding why they were using them. They just wrote those assertions because the teacher said they had to do it. Of course, the assertions are useful, but only for large, more complicated, programs. But since the assignment programs were all small, the usefulness of this particular software engineering instrument completely eluded them.
100% agree. Trying to teach them to break things up into modules won't make sense to them, unless they write a 1000 line program, and then go to change it and things break. They have plenty of time to learn good software engineering practices, decades in fact. They don't need to be a genius at first strike, they just need to learn how to code. Trying to teach them perfection at the beginning is a huge mistake.
This comment seems to be missing a "for example". I don't doubt that it's true, but it seems that you have thought about the idea, so I would like to hear your complete thought :)
I spent last year on a deep dive into this field, after volunteering to spin up a coding class for our local middle school (12-14 yo students). I have a heavy software development background but not much experience in education as a "provider". I ended up spending several hours every week hands-on in the classroom with the kids, plus time outside the classroom grading, reporting bugs in the teaching site we used to the vendor, etc. One of my own sons was in the class so I got to see something of the student side of things close up too.
I learned many things from this exercise that could fill several blog posts or a book.
But no time for that, so some quick thoughts:
1. It was much (much) harder to teach coding than I expected, even in the case of the very brightest students.
2. There is a latent expectation of quite strong mathematics knowledge in all programming education. I discovered however that this knowledge is pretty much absent in students of that age. For example analytic geometry is not introduced until 8th grade (14 or so) so prior to that if you want to show programming with lines on a 2D plane with Cartesian coordinates, you will get some very blank looks from the class.
3. I had assumed that teachers would be able to pick up the ability to teach coding with my help (we're talking teachers who already handle science or computer applications subjects). This turned out to be an invalid assumption. So in order to succeed the class needed to be staffed by "programming educational paraprofessionals". Such people are by their nature very busy and as a result we were not able to run the class again this year.
Overall I'd say now that coding is somewhat like musical instrument playing or art -- something that is well worthwhile having in school, but not a subject that all students are going to take to. It requires a similar level of commitment and investment (consider for example that the school employs several full-time highly skilled musicians and requires around 8h/wk class+practice time for "band"). To provide comparable resources for a coding class would be extremely expensive.
Yes if it interests them. No if not. I feel like we might have solved this problem for X a number of times in the past.
I'd also warn against the notion that learning to code magically improves critical thinking/task management. They are accessory skills that good developers have or have learned.
In school (public school in Canada) I was forced to play soccer (among other sports), learn a musical instrument (participation in the school band was not optional), and code (a required course had an HTML/JS component). I also learned chess because, why the hell not?
I quite enjoyed the experience of public school, and I like to think all the extra things they forced us to do made me a more rounded person. Because they were required, the cost was also subsidized, as I came from a low-income family I likely wouldn't have been able to do many of those activities outside of school.
Anyhow, as far as 'coding' specifically, I do think a few basic courses in school, in an easy to learn language with a fun/easy game engine would be great. Say Ruby or Python (or even something like Scratch). I do think schools should still focus on the basics though, maths/sciences/humanities/languages, the rest is just to create well-rounded people.
Kids tend to be naturally curious and want to help... let them help, even if it slows you down. If you cook and let them help, when they are young, they will learn.
And yes, some people as adults only eat chicken nuggets and mac and cheese... though to be fair, I spent two years perfecting my mac and cheese skills (baking vs. stove top, bechamel route vs sodium citrate, sauce and cheese variations) making it about every other week.
By that I mean that learning something about programming is a prerequisite for such a wide range of things that you will be left in the dark without basic programming knowledge.
Machines have been complex for a long time, far too complex for everyone to understand. But generally, even a novice can understand any one particular detail if they care to. Engines are complex, but you can quickly read up on the cycle it goes through, and get a vague understanding.
Except how the valves are controlled, because now those are computer-controlled, so you must know how a computer works to understand. Before, you could have asked some questions and got an explanation about push rods or cams or something, and walked away feeling comfortable with that explanation.
So programming has become a fundamental dependency to understanding a wide range of things
Yes. It's almost like math or science or english at this point. They may go their entire life without using many of the more advanced concepts they learn in those subjects, but being aware of them is important.
In the same way, they might go their whole lives without doing any serious programming, but knowing that it's possible to automate a lot of little things they use on the computer and what they should look up if they ever get the urge could help empower theirs and others lives.
There have been many simple languages for kids, but Scratch appears to be the one that works.
Speaking to my daughter's teacher, it's not just the academically-bright kids getting into Scratch - the academically average and academically behind ones do too. It appears to satisfy requirement #1: get the kid interested.
The important thing learning to program does is teach kids that the code that runs their world is a humanly tractable thing: that literally everything that any computer does is a more complicated version of a dancing ballerina animation.
They don't need to become coders to benefit from having an idea of how the machinery their civilisation runs on works, and not to just think of it as unknowable wizard magic.
> Speaking to my daughter's teacher, it's not just the academically-bright kids getting into Scratch - the academically average and academically behind ones do too. It appears to satisfy requirement #1: get the kid interested.
But will Scratch make kids advance in the rat race in the long run? Because apparently that's what's important.
I've noticed lot of web developers I've worked with view hardware as unknowable wizard magic(or maybe disinterest) .
Where do you think the line should be drawn between hardware/software?
Raspberry Pi seems to have a lot of stuff for children as well.
Good question! My daughter is a little geek (a gamer in particular ... and identifies as one) and I haven't got her into hardware yet ... if I can think of something a Pi could do that would actually be interesting to her, that would be an excellent approach.
It always sounds strange to hear a developer job is future proof. I'm a developer in Switzerland and my main impression of the market is that many jobs have left to cheaper places.
As long as programming remains the single most reliable way to raise your socio-economic status, I don't think anyone can argue against teaching it to kids.
I was doing x86 assembly coding as a teenager, and certainly didn't need nudging. I also taught myself calculus, physics, and even material engineering. I don't see any problem with kids coding. It looks like other people are comparing it to chess or soccer? I would compare it to Math, which is taught to people. I'm not sure why people would feel like only certain people can do it (like soccer or chess). I don't feel threatened if more people code. Maybe I'll create (another) language to teach my kids if I have any.
Kids should learn problem solving skills. Math teachers of today are, unfortunately, quite different from those of yesterday. So, everyone believes they can do something more with programming.
I believe children should learn to think critically, logically and learn about logical fallacies. Writing software can be a means to an end but learning to type code as a rote exercise without learning to design, architect and write an application is a pointless exercise.
The article is about what Steve Jobs said, that “Everyone should learn how to program.." but Steve Jobs did not allow his kids to use a computer up to a certain age.
As I looked after children I can tell a certainty confirmed by others: "Millenials are cry babies". Nowadays children as small as a few years old want to do what their parents are doing, including to have a girlfriend, before they are able to stop using pampers..
The answer is "If they want to". Forcing a kid to learn to code is the same as learning the violin or putting them in football. If they are interested in it, great. If not, it will be like torture.
I don't get it. "Forcing a kid to learn English is the same as learning the violin. If they are interested in it, great. If not, it will be like torture." What? Coding is another language (and I should know, I created a computer language)--somewhat. I learned piano, and don't think that should be forced (I also don't think I'm threatening the jobs of concert pianists). The basics of coding should be forced, though.
It's not just learning a language. It's a tool to allow you to build computer applications. Some people simply aren't interested in building apps, just like some people aren't interested in playing music or throwing/catching a football.
Where did we get to apps? How about just command line? I'm not sure if you create apps for your job, but that's not all of programming. I work on an "app" for my job, but it's a more-or-less vertical. I really don't see how teaching a child some command line or REPL (read execute print loop) stuff threatens my job. Even if that child is in India or something. I'm secure in my own abilities.
Is knowing any of that necessary in today's world? Command of the English language is needed to function in our society and neglecting to teach a child the subject has obvious lifelong negative repercussions.
Most happy and successful people will never care about typing commands into a glorified calculator.
That's a great question. I also wonder if adults should learn to code, or my peers who would be young adults.
I'm 24. I started programming when I was 10 years old by reading a 'For Dummies' book teaching Basic. I hardly read the book because it came with a CD with the language and the language's help system had tutorials which I jumped into right away.
I spent the next four years developing video games in Basic. I learned C and continued to make games and also started working on other types of simulation. I've picked up web programming incidentally, taken courses in high school, worked as a programmer, researcher, and software engineer, majored in computer science in college, and have a steady job as a software engineer.
Earning my degree has been amazing for me because it's introduced me to highly technical aspects of the field that would otherwise be inaccessible to me or present large barriers to entry.
An interesting trend is for school systems to embrace computer programming / computer science as a skill and teach it as a class or to introduce it into the curriculum in general -
> Britain became the first ... to introduce compulsory computer science on
the school curriculum for all children aged five to 16.
Equally, though, this could be off-putting for many kids. Depending on how it is introduced, it might scare away those who would otherwise be interested in programming or less so another design field in computer science. Oddly enough:
> “One 13-year-old told me she would rather be in garbage disposal than work
in technology,”
It's really surprising that this sentiment isn't more widely felt. Maybe it is the sort of tech-bubble, get-rich-quick, new technology enthusiasm and excitement that gets people to push through the initial, `this is boring, difficult, and unfulfilling' feeling that I would really anticipate from anyone making a cold dive into code.
In fact, I've had the opportunity to mentor some kids around the ages of 10-12 and that's exactly the response I've seen to the programming or code side of development, where they will be increasingly excited to design applications in a much, much higher level way. But directing software design should really be considered a lower field than implementing it, in my very humble opinion.
And this point, about some being disaffected by being compelled to learn something, underscores another unfortunate fact - and that is no matter how someone is introduced to computer science or computer programming - something will be outside of their control.
Some start by programming in Python or JavaScript, some start with C (many engineers) or Java, others have began with Fortran or Basic or Visual Basic, and others begin to learn computer science with Scheme. There are so many vastly different programming languages and platforms that exist, and even different programming paradigms, and each is easier to use or understand to different minds.
But it would take an expert oracle to know what the best introduction is for every individual to give them the best chance of success in computer science. Some scientists can't even agree on what text editor to use.
> Puzzlingly, though, IT had the highest unemployment rate of any subject
analysed by the Higher Education Statistics Agency.
Here is another annoying fact. In the midst of a rise of bootcamps, there are still those who can't find jobs. And the fact that so many people can jump into monthly groups to learn to "program" doesn't mean that there is a stable, sustainable system for them to work in.
If it is what I believe it is essentially web design or scripting education that's going around, there's really only a few months of work for any group of graduates, and the opportunity to float along the top at any organization that takes them on.
To imply that a bootcamper will become a major technical lead in any kind of reasonable time or with anywhere near the same level of effort as a regular graduate seems extremely disingenuous, and the fact that six figure salaries are being touted as results from these camps seems to show a real economic failure.
> The coding bootcamps springing up in London and Edinburgh are essentially
a pop-up solution.
That would be an accurate description, although I might be cynical.
> ... Scratch, a computer language developed specifically for young
children.
I've seen Scratch and I think it's fantastic. Along with Logo and other platforms for introducing logic and computation, I think it's perfect for children and new-comers. Compare for example the sort of weights and blocks that some children are introduced to when learning algebra initially.
> Perhaps that is the single most honest argument for teaching
everyone to code: to give everyone an equal shot
That's definitely a fair point, but there's never going to be a way for this to be true universally and that is just a fact. The ecosystem for programming and development is varied and depending on what you want to do, it's going to require vastly different skill sets.
Another reality is that there are so many people doing so many different things and technology is such a competitive field that there is almost a guarantee that someone, somewhere is attempting to achieve the same thing in a complete different approach. Who has the fair advantage?
Then it's explained that having experience or skills with computer programming, 'knowing how to code,' or being introduced to the field results in `Aha!' moments like ...
> "‘It would be so cool if this existed,’ and then implementing it the same
day – it’s like a superpower,"
In reality, if you have a complicated idea for something that you want to see created.. it's going to take work. If you have a simple idea, then yes, it may be simple to create! And it is empowering to have the skills to create or begin to create something, or to know where to find those resources and how to begin.
Then this article ends on this point:
> "How many young people ... have what it takes to be great developers? ...
"But they won’t be, unless we give them the chance.
This is probably the core idea to education, school, training, and jobs. In order to find opportunities... they must exist, and in order to achieve skills they must be attainable or at least known to someone.
But in the same vein, how many people would make excellent astronauts if there were a much broader space program? It's something where there's always a trade-off in time and skill between anything a person might become employed doing.
Shameless plug, part of why I developed the Duck programming language was to make a very accessible programming environment, and I still intend to expand it as best I can to allow easy programming! I'm also working on a new language that is lower-level and it intends to facilitate clean, efficient and safe programming while encouraging higher-level paradigms like functional programming. There aren't a lot of functional, imperative languages out there that still avoid automatic memory management, and I think that's a loss.
Kids should definately learn how to think algorithmically and understand mathematics/physics concepts (as opposed to repeating some pattern recognition which is to often the case) and if some type of coding facilitates engraining this knowledge I think that'd be great, but as of yet I haven't read a study that showed this to be the case.
As a programmer, when I have kids I'm not going to teach them how to code. I'd much rather they spent time playing outside, building things with their hands, acting in plays, playing music, reading books, writing papers, doing science experiments etc. Computers are nice tools to help you do these things but they are not ends in themselves.
this all IMHO of course :)