What schools should really teach

A video, "What most schools don't teach," circled the Internet this week, particularly among my developer friends. In it, a stream of famous figures in the software world make a compelling case for why you–everyone–should learn how to program. As a software developer and lover of code, I was excited to see such a great job of showing good reasons to support coding education.

Halfway through, however, someone says "jobs".

It immediately cuts to over-the-top offices and handsome employees relaxing on chaise longues in the sun, and it sucks. This turns the discussion from "programming is an amazing, accessible thing everyone should want to do" to "programming is a trade like being a mechanic," important only "in the right context, for some people". These comments come from the people who seem as though they would support this type of education.

Taking the idea that you should know how to make a computer do your will, then framing it as something intended merely for a job, does a massive disservice to the discipline. It bogs down the conversation with ideas of what, specifically, is worth teaching, or the products that students will make, instead of the concepts and fundamentals that can be applied anywhere in life. Listen instead to Gabe Newell at the very end: Even the most basic understanding of programming makes you a wizard. It is the most direct conduit between knowledge and power.

Understanding computers and programming enables you to talk to people around the world, conjure fantastic images from nothingness with a few well-placed keystrokes. You can pull just the things you're most interested in from an endless torrent of wonderful new things people create constantly or scry deep into the past. You can make your own art or stories or tools faster and easier than you could before, and share them with everyone you know and millions you don't and change all their lives as well as your own. You can do things no one has ever done before on a daily basis. Why everyone isn't clamoring to access all this I'll never know.

So don't learn about coding or software because it'll get you a nice job in an office full of toys and free food, or because you have some vague notion of wanting to play with robots. You can do those things, too. But understanding how to make computers do what you want is far more than that. It's the freedom to turn what you know into anything you want.

Nope. Not at all. I learned to code because I could do anything with the machine, and when I was 20 that seemed like POWER. I was awesome when coding became something that was part of my job, but I never lost my love of making the machine do what I wanted it to. If I never got paid for any code I wrote, it would still be the greatest thing I ever learned to do.

It is disappointing that they added the montage of some of the nicest places to write code in the middle. So many of the messages in the video are important. I want my daughter to learn to code so she will understand that computers are not magic boxes. If she goes on to be a professional programmer that would be fine. But if she goes on to do something else… at least I’ll make sure she can switch out the fan on her graphics card when it fails by her self, along with other important skills like fixing a kitchen sink or drive a car.

There are some bits of knowledge that are so vastly specialized that they are only relevant for some specific employment, but programming is not one of them. Programming skills are like math skills, or literacy – basic skills with broad applicability.

I couldn’t agree more that programming is like math or literacy. One of the most important things to realize about programming is that it changes the way you think even when you aren’t sitting at a computer. Practice with programming is practice with problem solving, with logically organizing ideas, and with breaking down processes into easy-to-accomplish steps. You can apply what you learn when you learn to program almost anywhere.
And as for jobs, programming is extremely useful in any job where you spend all day working with computers, whether your job is to program them or not. Back to the literacy/numeracy thing, imagine you were the only person in your office who knew how to add. Honestly, if you know hot to program and others don’t sometimes it’s just like you are a wizard.

for this to be an argument that promotes programming, you first need to demonstrate that the “change in the way you think” is actually a positive thing.

the problem of course is that its not just a positive or negative (or even neutral) thing – whether this programming-inspired way of thinking is better or worse than other approaches depends on the context. many human relationships are not known to flourish under the application of this kind of thinking, for example.

there is a meta-level too: programming can be such a powerful tool that it leads to a belief by its practitioners that not only is “the way of thinking” incredibly powerful, but that other “ways of thinking” are weaker or even wrong. there is a hint of this even in Dean’s original post. the gushing notion that programming-as-organizing-any-and-all-problems can be salvation is a dangerous one, if only because there are a lot of domains in which it really is true – thus leading us to tend to overlook the important domains in which it is not.

its far from unheard of to hear programming geeks rail about the fact that even if politics, for example, is not a domain where programming-inspired thinking is useful, it really should be.

the right tools for the right tasks. programming (and the kind of thinking it helps develop) is one tool, right for some tasks, that is dangerously seductive as “the right tool for all tasks”.

no, understanding and creating algorithms is precisely what i was talking about. and more generally, the idea that algorithms are good ways to approach many different issues in many different domains, which tends to follow once you realize how powerful they are within the domains in which you first learn to use them.

@twitter-91727271:disqus In disciplines such as the arts or social work, where there isn’t a single, clear solution, much an algorithm for achieving one?

Which isn’t a problem with learning to code so much as a problem with how people often think about code, or how code is typically taught. If coding is seen simply as a mechanical tool or a trade (like the mechanic analogy above), then not only does that make many folks thing “that’s not for me,” but also means that folks who do embrace it may embrace a form of it that is actually somewhat limiting.
Just as with the literacy analogy, simply teaching the syntax doesn’t really empower students. It’s when you demonstrate to them (and give them the opportunity to demonstrate) how writing (or code) can be a meaningful, expressive medium that it becomes both relevant to their lives in a broader way and also opens up the potential uses of programming in a way I feel is more empowering.

There’s some interesting stuff going on at the university level (thinking MIT and Carnegie Mellon) about teaching coding as an artform rather than a technical discipline, but I don’t know how much of that sort of pedagogy is making its way into secondary (or elementary, where relevant) education.

Sure, there are disciplines where understanding computers will not help you. It’s much the same as disciplines where calculus or how many great works of literature you’ve read will not help you.

My point is that the basic concepts of how computers think and what you can do with them should be in the very earliest parts of education just so that the general public has an understanding of those tools and can use them appropriately when the situations warrants it.

Problem solving skills are unequivocally good. I look around me and see all these people who don”t have good science and computer literacy and that’s why the world is the way it is. Coding teaches you to go from “Start” to “End” in a logical, step-by-step way that helps figure almost anything out.

Once you wake up from the “l33t 5p33k” and realize that real hackers, people who really code and code well are expert at “figuring things out” in addition to knowing programming languages, this will be clear to you.

The most adept problem-solvers, including hackers and great coders, aren’t terribly linear, step-by-step thinkers, though, in my experience. Just because the program that ultimately gets made is some sort of step-by-step state machine doesn’t mean that the type of thought that went into it was step-by-step.

Great programmers are the types of folks who will engage in some mode of lateral thinking, approaching a problem – hunting and addressing bugs, circumventing security measures, etc. “Figuring things out” requires creativity AND systematicity, and programming can foster both, though often its instrumentalized in a way that favors the latter over the former.

“Coding teaches you to go from “Start” to “End” in a logical, step-by-step way that helps figure almost anything out. ”
It does? Hmm, well not for me. For me coding is about hacking an issue into smaller issues, and smaller issues, and smaller issues, and along the way figuring out the solution to some issues while constantly keeping a million balls in the air, trying not to drop any, and trying to figure out what I missed. Because I missed something. Oh, and asking my users what they want and need instead of what I want to make. And fixing stupid stuff I did. And a mad dash at the end trying to get every lose end tied, and again hoping to heck that I didn’t miss or forget anything. But it sure isn’t any linear step-by-step process.

The other problem with the ‘jobs’ shtick is how often it is dubiously honest even within the petty, sordid, confines of its premises….

You don’t have to go far in techie circles before reports start piling up that the ‘zOMG Unfilled Jobs!!!!’ are often legally-required postings that need to age for a few weeks or months so you can import an H1-B indentured servant, not something you actually apply for, or that the alleged demand (amazingly enough) isn’t driving up the price very much for anybody except perhaps a few serious guru-level experts, and that you can still get fired for being over 35…

The ‘STEM’ disciplines certainly deserve respect on their own merits, as pursuits that are fascinating, powerful, and do much to improve our lives; but damn does the situation RE: salaries and unemployment Not. At. All. reflect the alleged catastrophic shortage…

Talking about languages in this kind of education is a red herring and to some extent a link back to the whole jobs thing I’m suggesting we avoid.

Kids in high school should learn basic concepts like boolean logic, loops, and data structures. They should understand what a database is and how it’s used. They should be able to access an API and make a simple mashup. They should understand what kinds of things can be automated and how they might go about doing that effectively.

These are things that can be very broadly applied to pretty much any field or discipline. They’re tools that should be in everyone’s toolbox.

I think this is a fundamental problem with current concepts of education. What kids in high school “should” learn has always been very different than what lots of kids in high school can or, more importantly, want to learn.

Like science and history (two of my favorite subjects), the kind of basic programming concepts you describe above should be taught in high school to every kid who’s interested in learning them. But lots of kids won’t be interested in learning them and most of those kids will go on to lead perfectly fulfilling and happy lives.

Because what kids “should” learn is highly subjective and the kids know it better than the adults ever have.

It really is like music – nobody becomes a great player by thinking about all the money it’ll bring them. NOBODY!

I get why all the job bullshit is upsetting. I think I’ll write my own post about it, even. But no matter what, no matter who holds the power or who’s making the viral videos, anyone who picks up any kind of instrument (including computers) and dedicates themselves to craft will be empowered to kick all kinds of ass!

Not always. Fatalism can get in the way of identifying and fixing or fighting the causes of the increasingly utilitarian demands placed on education in the US. The trend has existed at least since the 1930s, but it has intensified dramatically since the 1980s and its twinned focuses on back-to-the-basics and winning the “culture wars.” The problem has been exacerbated by the push for outcomes-based education and increased standardized testing; this took off under Clinton in the 90s and has gotten progressively worse under both Democrats and Republicans.

There’s also something to be said for allocation of public funds in this, but that’s very hard to extricate from the so-called culture wars.

There are quite a few articles on this, but one good book on this that provides some useful historical background is Chad Hanson’s The Community College and the Good Society: How the Liberal Arts Were Undermined and What We Can Do to Bring Them Back.

Let’s broaden this a bit more to talk about the Internet. We’re all having a pretty nice discussion here about some important things, and none of us really know anything about the others. All the valid, well thought out comments are welcome and appreciated (I’m certainly reading all of them).

Writing software is equally empowering in a social sense. A really useful piece of software can be made by basically anyone, alone or in a group, and deeply loved by millions of people. People who just weren’t even on the table before are real players now, and the final product can be grabbed onto by anyone or everyone in the community.

Somewhat relevant to the discussion of empowering people to code – http://www.kickstarter.com/projects/1755283828/open-source-edition-of-livecode. It’s funded (the most successful open source project ever on Kickstarter by a large margin) and it’s working on stretch goals.

I’m not sure if that’s a quip or not, but it can be taken seriously. Sanford Ungar is one of many educators who claim that education should be about teaching the ability to learn; the shortest argument he makes is in an essay called “Seven Misperceptions about the Liberal Arts.” David Foster Wallace’s speech at the Kenyon College commencement in 2005 seeks to make the same point. It’s called “This Is Water” and is available online transcribed and on YouTube. I highly recommend it.

I intended it as a multivalent statement.
I couldn’t bear to sit through all of the video, but I found it ironically self-defeating: I’m pretty sure none of the [bm]illionaire talking heads used to promote the teaching of programming have their third grade JavaScript teacher to thank for where they are now.

If everybody were to learn to code, then there wouldn’t be nearly as many jobs in the field as there are now.

Coding is (or should be) a skill like driving a car. If a comparatively few math whizzes were trained to drive cars, it would ensure profitable employment since everyone else would be dependent on them. There would be little pressure to standardize the controls of those cars, since the operators could be expected to learn them case by case.

When was the last time a computer language was included in the base price of a home computer? The software consumer is no more expected to code, than a restaurant guest is expected to cook, or an airline passenger is expected to fly.

I suppose the idea that everyone should code is no more farfetched than the paperless office. There’s no technical reason why that couldn’t be so. But the will to actually make it happen just isn’t there. We’d have to change the way that computers and software are sold, and that would mess with the way things are done.

I think the point is that the mere act of learning to code teaches valuable logical thinking.

Most of us who learned calculus in high school or college don’t use it. (Personally, I’ve forgotten all of it.) But the capacity for abstract thought is important.

It’s a bit like taking a geometry class or a logic class. You may never be asked to do a “proof” in your daily life. The ability to organize your thoughts, though, will serve you well in whatever you do.

“If everybody were to learn to code, then there wouldn’t be nearly as many jobs in the field as there are now.”
Nah… there would be equally many jobs. Knowing how to code is far from actually doing anything with it. That takes skills and practice, like anything else. Or… would we have less musicians if everybody could play an instrument? And even if you have the skills, that still doesn’t mean that you would do anything with that skill. I can program, I get payed to program, I still buy my programs apart from my own (small!) hobby projects.

“When was the last time a computer language was included in the base price of a home computer? ” OS X comes with Ruby / Python / PHP an Apache Webserver, and probably a few other things.

Kids want to be rock stars / celebrities / sports stars . I think the pitch is pretty good to at least give them the idea that if you can’t be one of the above, you could be the next Jobs / Gates / Zuckerburg

“If everybody were to learn to code, then there wouldn’t be nearly as many jobs in the field as there are now.”

Everybody (more or less) has learned how to write, yet there are still plenty of jobs where professionals can be paid to do so, and those of us who can write still find reading others’ writing valuable enough to support authors (of blogs, of books, etc.).

I think there are some very useful benefits to introducing people to programming. (Our middle school, in the 90s when richer schools had Internet-connected PCs, nonetheless had a computer lab where they taught us the basics of LOGO and BASIC.) In particular it encourages people to think sequentially, a very useful skill when working with technology, even just as a user (at least with today’s user interfaces). But I think programming IS a trade, requiring specialized training and a certain amount of genetic skill and personality to be successful. Not all skills need be mastered by all people (multivariate calculus, for example). You can do things with programming besides being a trades-person (there have always been tinkerers and hobbyists alongside the engineers of the world, and some have even been great inventors). But how does it detract from the creative/inspiration argument to also point out it will help people find jobs? Is it not reasonable for schools to consider future employment when advising students and designing the programs to educate them?

I’ve always been curious to learn how to code, but nearing 40, and being stuck in a bit of an admin-nightmare, long-hours job, it has remained that – a curiousity, unfulfilled. Is it a steep learning curve? Any recommendations from the BB community of coders as to what to start with? I’m ready to sate my curiousity.

Not to repeat my earlier post, but take a look at this – http://www.kickstarter.com/projects/1755283828/open-source-edition-of-livecode. It’s a very easy to learn language that will let you do pretty much anything you can think of (that doesn’t involve 3D graphics, at the moment). But if you just want to learn how to make a computer do things, it’s an excellent option. You can get access to it in June by supporting the kickstarted, but the whole world will have access to it very soon in any case now that the kickstarter have funded. The syntax is very english like and the learning curve is the smallest I have run across in 37 years of screwing around with computers. I use it every day to create complex desktop and web applications for my work.

and some of those things I have created were specifically created to reduce admin-nightmares. I’ve put together some stuff that has automated spreadsheet and reporting type work that took a human hours to do down to seconds…

Processing. Start by modifications of simple and instructive example programs (included). Read a bit of the descriptions of how the functions work. Keep at it and ask questions.http://www.processing.org/

Yeah, if you’re in Chrome or Safari (and maybe others), right click anywhere on this page and select “Inspect Element”. That’s the visualization for how this page works. Poke through it, watch things highlight as you hover over them. Change stuff.

Then go try it on other web pages. Load up that inspector before the page loads and watch the way things trickle in. It’s not really coding yet, but it should give you some questions and areas you might want to explore.

Statistics are often used in news and politics, often manipulated or misinterpreted. Learning at least enough statistics to sanity check these uses would be very useful.
For basically the same reason, plus managing personal finances, I think everyone should be learn at least basic economics.

I started my undergraduate education as a computer engineer and left for mechanical thinking since I didn’t fully understand programming I should leave the field. Few years later after jumping around a bit, I’m doing UX/UI design and interned at Apple, after rediscovering that programming is fun! I’d jumped back into it for making art with Processing and scripting within Rhino, and realized the reason I’d gotten lost before was because the friends I had who were programmers could program but didn’t get the power that existed in this concept. In the end, the biggest thing i try to get across to people now is that programming is like drawing is like writing >>> they’re all forms of communication that come with their own forms of super power.

I see a number of problems with both ‘everyone can learn to draw’ and ‘everyone can learn to code’. A primary problem is everyone cannot, in fact, learn to draw or learn to code. For a great many skills, like drawing, coding, speaking a foreign language, map-reading, doing non-rote mathematics, and so on — all very useful for those who can do them well — there are a large number of perfectly intelligent people who for some reason cannot learn the skill. I know this from direct experience (trying to teach people how to code and to draw) and from observation and report. I don’t think this phenomenon, like a great many other phenomena seemingly involving the brain, is well understood. There are also a great many people who can learn the skills in a rudimentary way, but only with great difficulty, so that for them (and those who may be supporting their effort) there is no payoff. The cost is higher than the reward.

The idea that some new kind of language or interface will magically enable all and any non-programmers to program has been repeatedly advanced in the past. If you are old enough you will remember COBOL being hyped in exactly that way. The problem is that programming necessarily involves breaking a problem down into very tiny parts that do not look at all like the problem and then putting them together to solve the problem, just as with drawings one creates the illusion of the subject with little marks that look nothing like the subject but are almost miraculously brought together by the draftsman. For many people, these are procedures that have long since been banished to the unconscious mind and can’t be easily recovered, if at all. A new language does about as much for coding as a new kind of pencil does for drawing.

Young people should certainly be learning how to use computers and other gadgets of our age and culture, but they can almost certainly do this without learning to program. If they can learn it, great, but I don’t see the point of torturing those who can’t.

As for the idea that learning to program, to draw, to speak Russian, etc., will necessarily lead to a job, I think that’s pretty dubious. I’d like to see some evidence from the bloody fields of the job market.

Unfortunately the same thing happens for algebra, trigonometry and even lower levels of math. Word problems are often arbitrary and irrelevant to the student, only putting them off more than the abstract concepts rather than giving them a reason to want to understand and be able to apply the subject. This leads to categorizing the subject as advanced trade specialization without having seen its everyday potential.
Students, even some professionals, don’t see the daily life use cases of these supposedly trade specialized skills; being unable to take advantage in their daily lives; and worse, not recognizing when they could be taking advantage of such skills. “If all you have is a hammer, everything looks like a nail” isn’t just about trying to make due with the tools you have at hand, it’s also about recognizing the nature of the problem and required tools.
I think young professional programmers should mostly recognize the usefulness of programming outside of trade, as the hobbyist tools that sparked many of their interest are much more capable and more accessible than those of previous generations, who are more likely to have first used a computer when taking a programming class for their degree. Of course, ever since computing started to look profitable, there have been those less imaginative who entered the field only for the money. And there are those who dread a future of commoditized programmers; who, whether or not they see programming as a useful skill for everyone, wish to protect their status and level of pay; these people may be tempted to be malicious about advertising the nature and usefulness of programming. Some people see it, some just don’t, and some want to hide it.
It’s a common struggle that happens over skills, knowledge, products, markets…unfortunate that it could be diluting valuable PR at this stage for programming.

The whole post really reads like a snob too in love with their career trying to convince the rest of us. I think computer knowledge is pretty fundamental at this point almost on the level of basic literacy. Everyone needs to know what a computer can do and have some idea how it works. But actual coding isn’t required knowledge for a fullfilled life and career.

I think we’re both on pretty much the same page. I’m just trying to add a few things to what people might consider “computer knowledge”. I don’t think everyone should try to be a Serious Programmer, but they should at least understand the basics of little-p programming.

Even doing simple sketches in Processing would probably be a WAY more productive use of a middle/high school intro “computer class” than the typical, passive “intro to the MS Office Suite” most kids seem to get.

What should be taught, even before programming is basic issues in philosophical logic. That will provide two helpful and important features to society: 1. the recognition that just because somebody disagrees with you, it does not mean that they are “stupid” or “crazy” (etc.), and 2. the ability to critically evaluate actual arguments (premise-conclusion type arguments) correctly.
Not to mention the benefit that learning logic would have when it comes to programming.

I’m a programmer… and I don’t agree. Sure, I think programming should be offered in schools, and in a way that makes it fun to learn! But _should_ everybody learn programming. For what? To make your own super duper program that does everything you want? That won’t happen… sure, some will be able to reach the skill level to be able to do meaningful programs, but for most they will become disillusioned very fast with just how little they actually are able to do.

Teach children in school how to use the computer to reach knowledge, learn how to use knowledge, and the thirst to acquire more of it? Yes! But “just” programming? Why?

You don’t expect every child who learns how to write to “write their own super duper novel that addresses everything they want,” but I imagine you still see value in teaching them how to do so.

With programmed systems becoming increasingly ubiquitous, programming is a useful type of literacy to have. Even for people who grow up to mostly use opaque, pre-packaged programmed systems (like blog sites, Facebook, or MSOffice), basic programming skills can increase their expressive potential and make those systems less “opaque.”

Someone who has basic html knowledge (or has encountered it in school and doesn’t blanche in horror when they switch to the ‘code’ view of the blog post interface) can better customize their cookie-cutter blog, making it more idiosyncratic and expressive – more representative of their own aesthetic sensibility than that of some employee at WordPress.

Someone who has made a simple sketch in Processing that produces an image and saves screen-captures might realize how trivial and easy a function it is to program, and be inherently more critical when they discover that their packed-in DVD-playing software deliberately omits that functionality.

Someone who has coded a simple string replacing algorithm has already jumped mentally through enough procedural hoops that when they use MSOffice, they might be less daunted at expanding the ‘advanced’ tab on the search Window and using more sophisticated search and replace tools that increase their productivity and mastery over the tools they’re using.

Productive literacy is just as important as receptive literacy, and if we want students to “read” digital systems in a way that empowers them as participants in and creators of culture, we should introduce them to the ways people “write” digital systems, too.

… but I still don’t see _why_ every child _should_ be taught programming. I can come up with a lot of other stuff I would favor instead (how to find information and sift through for the relevant bits… and apply critical thinking! being the main one… heck, I would settle for just critical thinking.). What would you drop out of the school curriculum in favor of teaching programming?

My middle school students have one-on-one computing. I use a social network called Edmodo and posted the video and a link to codeacademy. Told them coding lessons were allowed during Advisory and with permission when other work was complete. Within minutes, Nick came up to me and said “how’d that get there?” He’d created his first project, by naming it “Nick is awesome,” and suddenly can’t get enough.

I would incorporate it into the curriculum in an integrated way rather than “in place” of a different subject. For instance, students in language arts classes could write/code an interactive narrative using Twine, visual arts classes could do a unit using Processing to explore procedural artwork, and math classes could use Processing to rapidly visualize geometric and trigonometric principles (or do graphing in Algebra) etc. This would necessitate perhaps “dropping out” specific assignments or units, but not whole subjects, and in some cases wouldn’t “drop out” any subject matter, but teach it through a different methodology or activity.

Many elementary and secondary schools already have supplementary “computer classes” outside of the normal curricular subjects, but those largely teach receptive skills rather than productive ones (playing edutainment games, using MSOffice, etc.). Those could be more extensively retooled to incorporate programming, I think, since the types of skills and literacies associated with programming fall more explicitly within the curricular aims of those classes.

I find some evidence in this thread that programming ability (or maybe only enthusiasm about programming) does not necessarily indicate an understanding of how humans managed to conduct their affairs before computing devices were invented. Or that “programming” is not a unique activity but is part of a family of skills and practices. Or that there are other skills that might be more fundamental to being a socially and intellectually competent person.

I am a literature Ph.D., and I learned some programming in my late thirties, right after I bought my first computer in 1978. I took enough computer science courses to get a decent understanding of what went on inside an 8-bit processor and how small computers were organized internally. I went on to write technical articles and reviews of various products, from board-level up to big business applications. I wrote user manuals. But I was never a programmer in any professional sense, nor did I need to be. 35 years on, my training in programming and related CS areas has functioned primarily as background for other activities–the environments in which I have worked not only did not require coding skills but were too complex for a non-specialist who limped through Pascal to navigate anyway. (Windows 3.1 was the last OS I could even open the hood on. Later versions, along with the applications that run on them, have become black boxes.)

“Education” gets asked to do a great deal: socialize children, teach basic literacy/numeracy skills, transmit large bodies of data (historical, cultural, philosophical), offer job training, provide a platform for the delivery of social and health services. Perhaps because of my age and background, I see the skills/data segments as crucial, with the understanding that learning how to learn (as several posters have already indicated) is the most important meta-skill. And programming in the general sense–not necessarily tied to any single language or operating system–is one of the practices that can lead to that goal. But it is not more important than literacy (which includes an understanding of rhetoric), logic, basic math (including statistics), the sciences, and the various data/content realms (history, literature, anthropology, the sciences). And my ideas about education are not new–the liberal arts (which included math) were conceived as the pursuits needed to be a free person.

I live in a house, but I’m neither an architect nor a carpenter–nor a plumber, nor an electrician. And that house was built in 1928 by people who had never heard of an algorithm. But they did understand the protocols and skill-sets necessary to construct the house, which remains sound and functional to this day. How *did* they manage?

Coding is hard because of the abstraction. Most schools don’t challenge students enough to ensure that they develop abstract thinking and reasoning abilities. We need to stop worrying about grades and start to give honest feedback to students. Consider not even grading.

We need to tell students about their mistakes, about their fumbles and about how to get over it. We need to challenge them into abstraction and not let them slouch.

If students get improved abstract thinking ability it will serve them for the rest of their life. In this world of rules, abstraction allows you to navigate these interactions. So even if you don’t learn how to code for a career, I think the abstract thinking abilities that come with it help you out a lot.

I could just as easily argue that Critical Thinking is what schools really teach. I find that most programmers lack the insight to find creative solutions to problems and instead just take the path of least resistance. In a lot of ways, the programmers I know are GIGO enablers instead of problem solvers.

Just imagine how empowered that would make you feel. You could remove moles and abscess, take out your wisdom teeth, fix ingrown toenails and take biopsies. You’d learn a bit of anatomy and could then get a job as a doctor.
What could possibly go wrong?

I think we need a license system (like what doctors have) to keep clueless people from getting employed as programmers. Anybody who has just a little intellectual curiosity can whip up a piece-of-poo adhoc program, but it takes years of studying and working to improve yourself to produce something fit for serous use.

Anecdotally, I find that some people who are quite smart, curious, creative, and easily able to pick up knowledge and craft in many other areas, still don’t seem to have whatever it takes to really *understand* programming except at a very mechanical, simplistic level. It does not seem to be a lack of either critical thinking or abstract thinking; it’s more like they’re trying to find their way around without having any sense of direction.

I’ve known plenty of programmers that sorely lack critical thinking skills outside of their programming realm. I also think it often comes with the territory of having many of their friends and family errantly calling them “geniuses” (and it goes to straight to their heads).

I know geniuses that work on motorcycles, but I never hear anyone refer to them as a “motorcycle genius”. Working with computers doesn’t necessarily make you a “computer genius” or any kind of genius at all. I wish more professional programmers knew that.

The problem with these types of arguments is that there are a million of them. Everyone thinks that their thing is something everyone needs to know and it should be taught in school.

Astronomers say everyone should learn astronomy in school, so we might know our place in the universe. Biologists say we all must learn biology, so we might appreciate nature. Chemists say we must all learn chemistry, so that we might better understand our modern world. Farmers say we should all learn agriculture, so we might know where our food comes from. Mechanics thinks kids should learn how to change their brakes in school because it will help them be better car owners. Literature people think everyone should read more, film people think there should be film classes, etc etc on and on.

Heck, there was even a lady on TTBOOK.org (radio show) last weekend talking about how learning penmenship is the key to kids learning.

The problem is THERE IS NO TIME to do this. There is about 5.5 hours of time a day in school to learn things. (You could argue that we need longer or more school days.)

Mostly though no one wants to pay for it. Finding pols and citizens who want more money for education are easy to find. Find a politician who is going to raise taxes 10% for education. Find a citizen who feels they can afford a few grand more a year in taxes.

I (with >20 years programming experience) would advocate teaching computer programming to build one basic “social competence” that is as important as problem-solving, mathematical awareness, and technological literacy.

When you write a program, it generally doesn’t work. And to get it to work, you can’t scream at it, bully it, manipulate it, blame it (or anyone else). You have to UNDERSTAND what the program is really doing (and how that differs from what you THOUGHT you told it to do), and FIX it. You can ask others for help, you can apply scientific method (another useful skill), and you can learn from your mistakes.

It defeats helplessness, and it teaches that magical explanations are bullshit, and underlying every mysterious physical phenomenon are understandable physical explanations.

Actually… that I can get behind. And I would extend it to “build something” project work, not necessarily by programming. Build a robot, program a game, build a tree house… where you have different people who have different specialties and you all have to come together to solve the problem, and appreciate what each person brings to the table.