Hacker News new | ask | show | jobs
by danilocampos 4870 days ago
Every time this is brought up, there's pearl clutching and handwringing from technical and non-technical folks alike. The fretting goes, "What about the people who don't like it? What about the people who have no aptitude for it?" And to this I ask:

What makes programming so special that we should shield people without aptitude from learning it?

Many have no aptitude for language – we still require english classes. Many have no passion for the sciences – we still require studying chemistry and biology. Some could care less about history – but every year of high school typically includes a history class scoped to one period or region.

So why should programming be different? Why should we shield people from learning a subject which has ubiquity equal to language or mathematics, and infinitely more lucrative application? Why should we accept a substantial chunk of our population being illiterate on a discipline whose misunderstanding can have terrible consequences for both individuals and society at large?

Understanding how a computer works, in a world dominated more and more by technology, places you at great advantage. Ignorance of the same leaves you at the mercy of those who are technically proficient and, more and more, limits your lifetime income potential.

7 comments

I'm largely of the opinion that aptitude has little to do with anything. It seems that a much bigger problem is our tools for teaching conceptual material are simply terrible. (I'm actually tempted to argue that our tools for teaching a wide variety of material are terrible, but conceptual stuff is especially bad.)

http://www.npr.org/2012/01/01/144550920/physicists-seek-to-l...

The link above is an article about how college level students in introductory physics classes have/are failing spectacularly to learn the basic principles of physics. The key parts:

> While most physics students can recite Newton's second law of motion, Harvard's Mazur says, the conceptual test developed by Hestenes showed that after an entire semester they understood only about 14 percent more about the fundamental concepts of physics. When Mazur read the results, he shook his head in disbelief. The test covered such basic material.

> "I gave it to my students only to discover that they didn't do much better," he says.

> The test has now been given to tens of thousands of students around the world and the results are virtually the same everywhere. The traditional lecture-based physics course produces little or no change in most students' fundamental understanding of how the physical world works.

Mazur notes later in the article that after making major changes in his teaching methods and moving away from lectures and towards student group discussions, the students' learned roughly three times as much material. This is a hilariously large increase, and I suspect it to be the low-hanging fruit as far as potential improvements.

A hundred years ago, Maria Montessori developed methods of teaching that are largely the opposite of traditional lecture-based education systems. Students pursue goals largely independently and at their own pace. She developed materials that grounded complex concepts in the real world - my favorite examples of which are the binomial and trinomial cubes. Here's a link that explains how and why the binomial cube, which represents an algebraic (and fairly complex!) concept, is a material provided to 4-5 year old students: http://www.montessoriworld.org/sensory/sbinoml.html

Today, we have computer games that allow us to discard the limits of physical reality. We can create interactive software to teach or prepare students for concepts that might not be possible with physical materials. Why explain the principles of ecology when you could create a simulated, manipulable world that teaches the user simply by interacting with it? Why not have discussions and lectures following this, once the core material has already been presented and experimented with so that the students can begin with at least a partial understanding?

Learning to program doesn't strike me as any more difficult than learning any other subject. Occasional posts show up here about how someone is teaching their child to program - often well before their teen years. What separates those children from the average child other than economic situation and available opportunities?

+1 to exactly this. Just because a field is new doesn't mean it isn't pervasive.

We had a required "computer skills" class at my high school (over a decade ago) that was, by all measures of the term, useless. Any of my friends who were proficient enough to merely browse the web at the time were already too advanced to learn anything from it. Mind, it was also taught by someone laughably inept. And yet, there we have it, a 'required' computer course.

These days, toddlers use iPads. The web is beyond pervasive. I have no idea what my old high school is doing, but I can't imagine it's changed much.

Most kids will never use this skill, but then that's what all teenagers say. Some will! By no means will they be writing iOS apps. Or talking efficiency or language design any of what the naysaying comments suggest. If we can teach that computers are not 'magic' and help them understand some of the bare minimums of control flow, logic, and so on (however that may be achieved; Scratch-like, JS, whathaveyou) -- that computers only do what you tell them -- it'll make a dent in society.

I don't understand this sentiment. Lots of people get through life just fine, and in fact are immensely successful in life, without knowing how to program. The fact is that the HS flavor of all of those classes are basically recite and regurgitate with a different name attached to it. The other difference is that there are different levels of classes for different levels of students, unless things have changed drastically from 15 years ago, this was the pallet of choices in math for a senior:

Pre-Algebra

Algebra

Trig

Geometry

Algebra 2

Pre-Calc

Calc

And sciences were similar (and all elective):

Chemistry

Biology

Physics

etc...

I really don't get why "computer skills" should be conflated with learning how to program completely. The world is very large and needed skill-sets change very fast. I guess that we should, since it is the current trend, force students to learn about handling large amounts of data and working through statistics and probability courses as well?

> I really don't get why "computer skills" should be conflated with learning how to program completely.

Speaking as someone who has been on both sides, you do not fully understand how a computer works until you understand how to write code for it in some form. Do they need to know how to write a compiler? Absolutely not. But knowing how to write a script with conditional outcomes is probably a worthwhile exercise.

> The world is very large and needed skill-sets change very fast.

If you believe that computing is going to go away in the next 30 years, that would be a fair point. But we both know that computers are creeping further and further into everyday life. Having a basic grasp on how to direct and control them is an obvious advantage.

Your litany of courses does nothing to counter the reality that we are already forcing kids to learn certain subjects. What about computing makes it less valid than history, science or mathematics as a required field of study? We can say with certainty that students are more likely to encounter a computer than they are to encounter Henry VIII, Schrodinger's Cat, or a sperm whale.

If you wanted to teach computer science by rolling it into mathematics curriculum, I would be all for that. Throw in some basic discrete and you would have yourself a very solid class that could be reasonably taught by teachers you can already find in school districts. Make it one of the elective mathematics, like it should be.

Required coding courses though? That would be like a required shop class. I wouldn't support anything of the sort because it won't be useful to people who are interested in it (it would be far to basic) and it would almost certainly poison the minds of the people who have no interest in it.

Furthermore, I think your perception of what highschool course loads are like is very out of date. When I was in highschool in the early 00's we didn't have required sciences, required history courses, or even required maths (with the of a single algebra course, for those who had not already taken it). You would have to take N out of M offered science courses, but you could easily get through highschool without taking any particular line of class. For example, I have never taken a single course on biology. Not in highschool, not in university. Why? I had no interest in it. Similarly, while I did take history courses, I could have just as easily not taken them and loaded up with other sociology courses instead.

So in answer to your query, "What makes programming so special" I am going to answer with a question: What makes you think programming is so special? Can you really claim that programming is more essential than a rudimentary grasp on physics, chemistry, or the human body? It makes perfect sense to make it a track to choose, but it has absolutely no business being required. It is not special.

> Furthermore, I think your perception of what highschool course loads are like is very out of date. When I was in highschool in the early 00's

I graduated in '03.

It was required that I have X credits in the sciences, Y credits in language, etc. I took biology, but dodged physics. But there was no way I could choose not to learn language. No way I could choose not to take science classes.

> What makes you think programming is so special? Can you really claim that programming is more essential than a rudimentary grasp on physics, chemistry, or the human body?

I'm amazed I need to point this out on Hacker News.

Everyone in the developed world needs a computer to be competitive. Not understanding how it works – and I do not believe you can understand the workings of a computer fully without a rudimentary grasp of logic and control flow – leaves you at the mercy of people who do.

Between your mobile device, your desktop, and all the mechanisms that control your data, there are few other disciplines with a more 24/7 impact on your life than computing.

Understanding the human body is probably the only other subject approaching the same 24/7 impact, and in the United States, we acknowledge this with a physical education requirement.

You know, everyone, in the developed world or otherwise, has a human body... You know what you really need to compete though? Professional writing courses. Forget coding, just teach kids how to write a proper business proposal. I don't see anyone suggesting that they be mandatory though.

Since we are on HN after all, I think you should keep in mind that it is very easy to ascribe undue importance to what you know and do. You can code, so it is inconceivable to you that anyone could succeed without that. I am sure accountants are just as baffled that any adult can get through life without accounting classes. Should we make those mandatory too?

But by all means, make a required "computer skills for the workplace" class that actually targets what computer skills the majority of students will actually need.. It will be a complete waste of time for everyone involved.

The skill of writing is already covered by English classes. Whether or not those English classes do a good job is a different discussion.

You also seem to be making the mistake of thinking that writing and coding are mutually exclusive.

> it would almost certainly poison the minds of the people who have no interest in it

...what exactly do you mean by "poison the minds"? I think "rolling it into mathematics curriculum" is the best way to make a large portion of students averse to it! In my country, we had a pretty advanced chunk of probability and statistics rolled into the math curriculum - it was a disaster, even the teachers tried to skip it because they thought it ate away precioud time that could be spent delving deeper into calculus (yeah, we had what you in the US would call "college level calculus" put into the high school curriculum but that's a different story...).

...now, for example, if those probability and stats courses would have been a different course or maybe some kind of "workshop", maybe someone else besides the "math geeks" would have gotten something useful out of them! Lots of high school kids hate math, but if you chip away chunks of it and present it as something else they tend to love it. On the other side, if you want them to viscerally hate something, teach it to them as part of "math"!

>> it would almost certainly poison the minds of the people who have no interest in it

> ...what exactly do you mean by "poison the minds"?

Not the OP, but I think he's afraid that the level of education provided for coding will be like the level of education currently provided for english or math. How many people do you know who claim to hate classical literature? Many of those are probably because they were forced to churn through and regurgitate about grommets instead of just enjoying a book. How many people claim to hate proofs because they were forced to write down "a straight line is straight" a million times in basic geometry?

So, one must know how a car works in order to drive?

I'm really torn on this topic. I'm a programmer, and I can understand how understanding how a computer works can be useful. And if I were to be extreme, I would demand that every programmer should not only learn assembly, but write one non-trival program in it. I mean, it's not hard. Tedious, yes, but not hard. But I'm realistic enough to know that not everyone will agree with that sentiment. What worked for me won't work for everyone.

Back in high school (August 1983 to May 1987) I took two classes that taught programming---Advanced Computers (Pascal on Apple ][ computers, each with a single floppy drive, during the 85-86 school year) and Drama (84 through 87). The Advanced Computers is obvious, but Drama?

Yes. Drama.

I preferred working backstage, with a specialization in lights. And at my high school we had a programmable light control board. So, working with a numeric keypad, you would type in a typical "program:"

    1@1
    2@1
    3@1
    4@1
    5@2
    6@3
    7@3
(and so on) The first number is the light number (technically, the outlet the light was plugged into) with the second being a dimmer switch (dimmer slide? I'm not sure what to call it). You slide dimmer number 1 up, and lights 1 through 4 would light up. That was the program (I think there were up to 50 or 60 outlets, and 32 dimmers---it's been quite a few years). And I wasn't the only one who knew how to program this (some might argue that this isn't "programming." I would counter---I am instructing the computer on what to do (you could also program a timed transition between multiple settings). Yes, it is not Turing complete, but than again, pure regular expressions aren't either).

And let me say, that computer was more relevant to the students using it, than the Apple ][s. Let's see ... 1985---the computer that year was the Amiga, a 32 bit multitasking computer, followed by the Atari 1040 (also a 32 bit computer, although I'm not sure if it had a multitasking operating system or not); The first 386s had just come out so most PCs where either 286s (mid range) or 8088 (mid to low range) and all 8-bit computers were fading by then. Technology was highly volatile then.

I don't know. The technology has changed too much to really settle one what needs to be taught. Heck, even the concept of a "file" is going away these days.

Would we require people to know the basics about car mechanics if 90% if out jobs were depending on driving a car and if people had about 50 of them on average? I think yes, Sir.
Unless the work from rate is vastly higher or mass transportation vastly better where you are than me, 90% of jobs requiring a car is a huge understatement. People own several cars over their lifetime and it's one of the largest purchases they will ever make. Mistakes in a car are far more dangerous and expensive than mistakes with a computer.

You know, maybe bringing back driver's ed wouldn't be a terrible idea after all.

I wasn't able to find exact numbers, but several sources hinted that the vast majority of the population, in the US at least, do depend on driving a car for work (notably for getting there).
People always bring up cars in these discussions like it's a counter argument, when they're actually a perfect example.

You don't necessarily need to know how a car works to drive one, but if you don't you're completely at the mercy of those who do when something goes wrong. Even when things are going okay, you can only do magic rituals to your car, with no understanding. That's how most people interact with computers. It's a bad thing.

What to teach? The very basics. Some idea of processors, machine code, compilers and interpreters. Skim over computability, Turing completeness, the halting problem. Designing an algorithm to catch edge cases. Conditionals, loops, variables. Strings. I think that's enough to start off with. If they're still interested, set them loose with some real coding classes, or just point them to the Python tutorial.

>> Speaking as someone who has been on both sides, you do not fully understand how a computer works until you understand how to write code for it in some form. Do they need to know how to write a compiler? Absolutely not. But knowing how to write a script with conditional outcomes is probably a worthwhile exercise.

Oh, good, now people think I came out of the womb with a computer in my hands. You're barking up the wrong tree with this argument since I'm probably much "younger" than even you are.

I ask again:

What about computer literacy, at the level of understanding the software that makes such devices work, makes it less valid than history, science or mathematics as a required field of study?

Put your fingers in your ears if you'd like, the crucial point is that we've already got a system where you have to learn things you don't necessarily want to learn. What is it about the most important growth subject of the next century that exempts it from such an externally-imposed curriculum?

I'm not arguing against teaching students to use their computer as a tool. I'm arguing against programming specifically...

When people that spend thousands of dollars to learn programming can't even do simple coding exercises, what makes you think a high school student struggling under the current workload will do?

http://www.codinghorror.com/blog/2007/02/why-cant-programmer...

I don't think learning to code is fundamentally more difficult than learning Spanish. I taught myself both and they took about the same amount of time and effort.

High school students take Spanish. Why not programming?

> force students to learn about handling large amounts of data and working through statistics and probability courses as well

Basic probability and an understanding, at least intuitive, of statistics should be thought to everybody - it's gonna help you even if you end up writing poetry or painting for a living, trust me! Imho this is more important that teaching coding, as it's quite easy to for anyone to pick up a well written programming tutorial, but much harder for an artistically oriented person to gain an intuitive understanding of probability - you need a good teacher for this, a teacher that when he sees you can't grasp the formula has the idea to bring some dice and poker cards to class and teach it to you this way!

To be fair you can probably find plenty examples of people who were successful in life without understanding huge amounts of high school skills.
> I really don't get why "computer skills" should be conflated with learning how to program completely.

Well I really don't get why "math skills" should be conflated with learning how to program completely. Why don't we just teach kids how to use a calculator?

My view would be that people that are interested, the most likely to pursue it as a career, don't need a requirement to drive participation. Those forced to do it like they are forced to take <insert many other subjects here> are not really likely to learn anything terribly useful, or remember it. They may cram for a test and be able to pop out a half-working FizzBuzz implementation (You're hired!!), but I suspect a year or two down the line anything learned will be forgotten and what will they have truly gained? I am all for the availability of these kinds of classes, my high school certainly did not have them, but the idea of making it required stinks of a ham-fisted way to solve the 'we don't have enough STEM graduates to compete with <insert foreign boogie-man country here>!!'. I have lots of friends outside the tech sphere, of various levels of understanding of computers. I don't know if any of them would be immediately advantaged by doing some deep dive learning course in programming over any other topic in which they lack depth. As a techie I would like to scream YES, but as a realist I am not so sure.
I got into computer programming comparatively late, because it wasn't taught that it was even a thing.

I didn't know it was a career option, an academic discipline, anything. Computers were just the thing this boring woman taught us to do spreadsheets on.

At home my old C64 was something that could be programmed, sure, but I was under the impression that was basically a toy. If I hadn't had a parent who were at least interested in this stuff I would have been completely unaware.

In fact worse than that, the boring 'computer proficiency' type courses actually put me off investigating anything to do with this area. Beyond that, with the proliferation of consumption devices, the actual machine and code part of the computer is more hidden than ever before.

Computers run more and more of everything, we owe it to our kids to at least tell them that they can be programmed, and give every kid at least a small intro into how to do it.

Yep, that why I said I supported the availability of the courses. My high school had none, as in 0, optional or not. My scepticism is around forcing kids to do things they are not interested in and the beneficial outcomes thereof. I took a lot of required classes in high school that I did not pay any attention in and could tell you basically nothing about them today. I think tech folks have a hard time understanding people's ambivalence around programming. I have a friend who is a geologist, spends his day, to the best of my understanding, studying rocks. That sounds terribly boring to me, but then again I am not a geologist, and my job probably sounds terribly boring to him. Forcing me to take that class in high school is unlikely to have changed that or given me much more of an appreciation of it.
So no compulsory classes at all in school? How is one to find out which subjects are stimulating and which are not without some introduction to them?

Whilst rocks are fascinating to some, I'm not sure the analogy holds as rocks are not (more than they ever have been before) becoming a part of everyone's everyday life.

If we were living in the stone ages I would be arguing for compulsory intro-to-rocks courses :)

Programming has been taught by the public education system in my jurisdiction going all the way back to my father's time (using punch cards in his day), so maybe I'm biased, but I don't see why programming should be singled out specifically. There are a lot of industries hidden in much the same way that would be equally valuable to learn about.
I believe the whole "all kids should code" bandwagon is over the top, mainly because to me coding at its most basic form is a skill that is acquired through equal parts of learning and experience, very similar to the likes of plumbing or car maintenance.

My biggest issue is that most people for mandatory programming often believe that it will make kids "programmers" and will make them understand computers. For starters, I know a load of working programmers that don't really understand computers that well, and programming for an hour or two a week for a few months isn't going to make you a programmer, no more than me cooking dinner every night makes me a chef, or fixing a leaky pipe makes me a plumber.

I do think that programming should be taught in schools, as people need to learn the production side of the tools that society relies on so much. I also think that schools could go much further in teaching kids rudimentary skills for life as well, like fixing things around the house, basic car maintenance and basic money skills. In my mind programming is no more important than any of these skills, and if programming is to be taught in schools then so should these skills.

oops, ignore downvote, my mouse slipped. Yeah, totally the mouse's fault.
It's not even about aptitude or utility. It's about teaching people to think differently. Programming teaches people to think in a way that's helpful to every day life. It teaches people how to solve problems logically. That is a big deal.
Most people don't have a strong aptitude for trig, but you still learn it.