Should a programming course be mandatory for high school students?

Is programming key to digital literacy, or are there more important skills we need to instilling in tomorrow's leaders?
201 readers like this
201 readers like this
question mark in chalk

TeroVesalainen via Pixabay CC0

Should kids be technically literate? Of course! Is the best way to teach them this skill by turning them into programmers? Well, that's a tougher question.

First, to be blunt, in much of the world, even in affluent areas, schools are not equipped to handle this task. Aside from lacking the physical technology, many also are lacking in adequate staffing resources in order to teach programming courses.

Second, it's important to note that computer science and programming are not the same thing. Both are valuable, but in an academic program, it may actually be equally useful to teach computer science and formal logic, depending on what course of study a student wishes to pursue.

Third, programming and computer literacy are not the same thing, either. It's entirely possible to be a computer power user without knowing how to program, and equally possible to be a programmer who doesn't really know very much about the system that he or she is working on and how to optimize it for their use.

And fourth, instructional time is limited. Not everyone will end up using computer programming in their day jobs, so is taking time away from other subjects really going to lead to the best outcome?

That said, there's still an argument to be made in favor.

The future is digital, and software is eating the world. To understand fundamentally how the world operates when algorithms are making decisions instead of humans requires some basic understanding of what an algorithm is and how it is created. Programming isn't just about making things, it's about understanding how things are made.

And the world frankly needs more programmers. There's simply more and more code that needs to be written and managed than ever before, and while AI and automation might change what programmers are working on, it won't change the need for them.

But further, understanding at least the basics of programming is important to being able to fully reap the benefits of open source. Having the code available to review, edit, and share under an open license is important, but can you really make use of the full power of an open license if you're locked in by your own inability to make the changes you wish to make?

There are plenty of good reasons to take both sides.

What do you think? Should every kid today be learning to program? Why or why not?

 

Jason was an Opensource.com staff member and Red Hatter from 2013 to 2022. This profile contains his work-related articles from that time. Other contributions can be found on his personal account.

17 Comments

If we consider that education ought to be about developing young minds, there is a lot about programming that helps you learn to think and plan in a logical way. It starts with analyzing a problem by translating it to a step-by-step process, then sorting out the logical stepping stones to assemble the solution.
The biggest difficulty is that it's likely that few teachers have any experience with programming, and one wonders if they would have any interest in learning it.

Greg, I agree. Well said. Arguments can (and have) been made for different reasons and different aspects of technical knowledge... but the ability to articulate a need and develop a plan for solving it is a MUST that many people cannot display. While the skill is derived from the IT industry, it is valuable across all aspects of our lives, not just when dealing with computers. Sadly, the world has become a place where emotions and gut reactions rule and the 'solutions' tend to be short-sighted at best and completely wrong in many cases. Being able to effectively find a quick tactical solution as a stepping stone to a sustainable solution is more valuable than most people realize.

In reply to by Greg Pittman

"It starts with analyzing a problem by translating it to a step-by-step process, then sorting out the logical stepping stones to assemble the solution."

That sounds what is sometimes called computational thinking. Learning to program in BASIC fosters such a mindset; CS students have to unlearn it to think logically and program by decomposition, rather than sequentially. How would you teach parallell programming?

In reply to by Greg Pittman

I voted no for a couple of reasons. First, I'm skeptical in general of using secondary education as a means of vocational training. Second, as you point out, programming is the not the same as computer literacy. Computer literacy is a vital skill in 2018. Programming is not. I'd rather see a logic class as a requirement than a programming class.

Shameless self-promotion: I wrote a longer version of this comment on my blog a few months ago https://funnelfiasco.com/blog/2018/06/07/everyone-needs-programming/

"Computer literacy is a vital skill"

What is computer literacy anyway? That sounds like having to learn several programming languages and then doing your Ph. D. thesis by studying the life of Bill Gates and reading all the programs that he wrote. Less useful than Shakespeare.

Informatics (Computer Science) is a branch of applied mathematics and programming is a large part of it. I am absolutely for mathematics in secondary education and maths might be more fun if the teacher taught just a little programming on the side.

"And the world frankly needs more programmers."

What the worlds needs is fewer programmers, but what it does need is computer science graduates who can program. The problem is that the current crop of so-called programmers cannot produce bug-free code, therefore their code should be illegal. While CS professors claim to have a method of programming, they have so far been unable to teach the IT industry.

In reply to by Ben Cotton

Computer literacy should absolutely be universal in the adult population and hopefully universally under development in the entire juvenile population. I'm not sure programming literacy is the most important component of this literacy. While there's more than a little truth to the old saw "program or be programmed," I'm currently more concerned about the level of data literacy in the public. Public policy discourse around counterterrorism, law enforcement and so much more is full of talk about "inter-agency information sharing," while consumer issues getting a lot of airplay include things like "privacy policies," "data brokers" and datasets said to have been stripped of "personally identifiable data." As an inoculation or public health measure I would recommend a high school course, strongly encouraged if not required, that introduces database concepts, perhaps using SQL (which seems to me to have a gentle and intuitive learning curve, but my mileage may be atypical). I would want this introduction to take the students at least as far as the concept of a table join. That is because this is (in my opinion) where the "magic" of SQL happens. This is why having access to two datasets confers more than twice as much informational power (and Information *is* power) than having access to one dataset. Exercises for the kind of data literacy course I'm proposing would ask questions such as,

* How would you go about trying to infer individual identities from records in this dataset which has been stripped of identifying information?

* How would you go about devising a system for calculating a numeric "score" for each of the [people, products, locations, etc.] in this dataset, where your goal is that higher scores might be predictive of higher probabilities of [a crime taking place, a loan going into arrears, a consumer making a purchase, etc.]

* How would you go about building a recommendation engine? Again, I'd like to see the emphasis less on the coding and more on the choice of what data, and data relationships, to work into the recommendations and in what way.

One more thing: Far too many of the programming courses I have taken (in conventional colleges and universities) rely far too heavily on quasi-business problems that are grossly oversimplified and unrealistic. I seem to remember a "write a simple reservation system for a simple hypothetical airline" or something. No wonder there's no such thing as an entry-level job. I would hope that for the data literacy course the datasets would be empirical, which is to say, real world data. I would also hope that at least some of the datasets would be large-ish. Keeping in mind that (unfortunately for my purposes) information does NOT want to be free, some class assignments may be data collection assignments, perhaps sending the students out to conduct some surveys, or keep a food diary, or do some GPS-surveying or what have you.

I think basic understanding of what programming is, and the ability to do some simple (application level) programming is important. I think trying to turn everybody into a systems programmer is pointless.

For comparison, consider another field - auto mechanics. There's no point in trying to make every high school student into an ASE certified mechanic. But everybody should understand the basics about how cars work and how to perform basic repair/maintenance jobs (e.g. how to change a tire, how to change the air filter, change a headlight or a tail light, etc.) Even if the person grows up to be someone who calls the auto club to refill the washer fluid, the understanding that it's nothing magical and that he could do the work if he wanted to is important.

I think this is especially important when our day-to-day technology is so advanced that to many people it is indistinguishable from magic. I don't want people thinking that there are completely incapable of understanding how a computer or a mobile phone or the Internet works. They don't need to be able to design a device or a network, but they should be able to understand the basic principles of operation and how to perform routine tasks (e.g. how to set up a home LAN router, or know where your packets go when you load a web page).

This will necessarily include a small amount of programming, but I think that is a good thing - it demystifies the technology and demonstrates that it is something anybody is capable of understanding.

And of course, it also will inspire some to want to learn the tech in depth - and these kids will be the next generation of inventors and developers.

We need to make Constitution and Law Mandatory classes again. We need to make banking, how interest rates work, how money works mandatory classes. Codeing will change before the class is useful.

You've hit the nail on the head. The root question here is what our children need to be effective citizens. Much as I enjoy programming, civics is a better us of limited classtime.

In reply to by Marty Buchaus (not verified)

I voted 'it depends' because I see some knee-jerk responses in the teaching of programming in K-12. I believe that a curriculum that emphasizes critical thinking and problem solving and uses programming whether Scratch, Python, Javascript or whatever is a good approach. I think there has to be a context for the programming. I believe that schools that tie programming to mathematics, science and more specifically data science are performing a real service for their students but too many schools just teach programmign without a context and for its own sake. Using Python to make mathematics, science or even language arts come alive would be cool. Using Scratch to teach animation. Teaching game development with Python and or Minecraft. Just a few ideas of mine. Great article and great question and a great discussion.

I think there's a lot of value in learning about programming. I don't care if you work in IT later on, but learning a bit of programming removes the "it's magic" impression a lot of people carry about technology.

I talked about the topic one month ago, in a speak about human-machine symbiosis.

Here you can find a transcript with link to slides and video: http://www.tesio.it/2018/10/06/the-intelligent-symbiosis.html

Being able to program is a precondition of citizenship RIGHT NOW.

Our politicians are continuously manipulated through their ignorance.
So are our sons.

We need to grow a generation of hackers that can be active members of the of the cybernetic world we live in.

I voted no. I believe it is more important to develop critical thinking skills. If one a able to think critically and logically about a problem it becomes much easier to teach someone how to express the thoughts or possible solutions to a problem in the syntax of a particular language.

It seems if one learns a programming language before learning to think critically, it becomes harder to realize the programming language learned may not be suitable for all problems. Everything is not an object. Functional programming won't solve all the world's problems. If all you have is a hammer, everything is still not a nail.

I see several comments about critical thinking/problem solving. Thats what basic programming teaches. I am a huge proponent of teaching logical programming as a first step in any computer science curriculum. It teaches the student how to find a solution to the problem rather than just learning syntax. In fact the first programming course I took started with pseudo code. Years later I still meet college age students who can't grasp the concept of the solution. So they will never be able to code it. Another good course for learning problem solving is physics.

Yes, along with many other topics, Like overviews of contract, family, and consumer law, and the legislative process that creates those laws, The purpose of education is to provide you with skills to navigate your society, not just get a high-paid career.

There's a big difference between "education" and "training". My wife, a retired IT trainer, asks people "Do you want your daughter to get sex education, or sex training?"

I'm purposely refraining from discussing the rats' nest of "values education", as that can be a synonym for brainwashing no matter which side you're on.

Computer Science is not only programming.
I'm an old-school Computer Science Engineer (5 years degree), obviously I know coding principles and some older languages but I recently never wrote more than 40 rows of code :-)

First, the result of this poll will likely favour programmers since most people subscribed to opensource.com are inclined towards Information and Computer Technology. Second, As much as programming is essential in today's technology driven world, there are many aspects of life where that level of computer science is optional -- so, I think candidates should make that choice in the end. Although I find that its getting increasingly harder to solve problems without some automation (which eventually requires programming/scripting skills)

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.