Programming in schools - opinions?

Hello,

Government in my country wants to introduce programming as mandatory subject of all children starting from 1st year of elementary school until the end of high school education.
First 3 years of elementary school are meant to familiarize children with the computers, while “actual” programming (programming languages like C/C#/Java) will be introduced in the last 2 years of high school.

This made me think about one question…
What do you think about teaching programming to everyone and starting with a very young age? I would like to focus about teaching programming in general, not in the specific countries (but examples of good/bad working solutions are very welcome).

My personal opinion (in different post to avoid blending it with the main topic - sorry for double post :)):

I think that - while showing young people that programming exists and how it looks like could be a good idea if executed well - trying to teach programming to everyone is rather bad idea. Why? Three most important reasons:

  • Most people lack enough logic/math capabilities to be able to even actually learn programming
  • Programming is much more specific than, for example: physics, biology or geography
  • Finding good programming teachers can be a very difficult task

Most people lack enough logic/math capabilities to be able to even actually learn programming - this point is pretty obvious.
I remember I had a few very basic HTML lessons back in the last year of high school - despite new topics being introduced very slowly, almost everyone from the class had difficulties with using even the most basic HTML tags. Situation was looking slightly better on the separate science subjects faculty, but even there most students were struggling with basic subjects like C language variables, “for” loops or conditional statements.
I can’t imagine improvement of this situation even with additional “programming” subject being introduced next to “informatics” and not instead of it. Learning programming requires lots of learning on your own, and most people refuse to self-improve in the areas they are not interested with.

Programming is much more specific than, for example: physics, biology or geography - learning physics, biology or geography can lead to lots of potential future jobs and various interests/hobbies. Programming leads to just one.

Finding good programming teachers can be a very difficult task - I don’t think many schools will employ additional teacher(s) just to teach programming - this leads to situation where current math or/and informatics teachers will teach programming as well, in most cases not knowing it earlier, so their knowledge will be not good enough to be able to teach programming at any reasonable level. Of course there are exceptions, but I doubt there are many of them. I think that the basic requirement to teach anyone programming is to actually know it well enough (the same can be said about any other field of study as well).

I’m the freak who thinks teachers ought to be able to assess their students and determine what they believe needs to be taught the most. But I guess that’s another topic for another time… >.>

General computer principles (This is a power button. This is the internet. This is a keyboard) are essentially a must (and where I live it’s already done).

For programming though, I’d have to pretty much echo Mac’s comments. Especially the second one. Most every subject you learn in your pre-college courses is a gateway to something bigger. Math allows you to be a mathematician, a programmer, a scientist, etc. History (depending on the branch) allows you to become more specialized in certain tasks (war strategy historian could very easily transfer some of that knowledge into a military job) a historian with a focus on an ancient civilization could become an archaeologist. The list goes on and on for most of these subjects. Programming on the other hand, is really the end of it’s path. Sure, you can refine yourself into a different language or focus (ie Web/Desktop App developer), but really there isn’t much of a difference there.

Also, like Mac said, programming requires a very logical though process, I’m not sure of the origin, but I heard a quote that said, “Anyone can write code, but only good developers can write good code.” The actual process of typing out “public static void main…” would only be a problem if you couldn’t read the letters on a keyboard; that’s writing code. But understanding how to take execute a specific task requires a logical thought process, that’s what makes a good programmer good, not how fast they can type, but how well they can solve a problem.

In math, you are either right or you are wrong. In history, you are either right or you are wrong. In science, you are either right or you are wrong. In programming, you could have a solution that works, but doesn’t work as well as it could. That in itself produces a problem for highschool teachers. Technically, the student accomplished the task, they even did it without there being any hacks or any code that will break, but it’s not as fast as it could be. Did they pass? In a college class, a teacher could fail that assignment, you signed up to take that class, because you want to practice in that field. But outside college this class would be forced upon the students and most people don’t have the skills required. I fail to see how that falls under “general education”. You could make the argument that “school’s hard, you need to learn to do hard things, and those hard things will better you” but I think that fundamentally misses the point of education.

Programming is logical problem solving; it’s an essential life skill for everyone.
It can (and should) be taught to all young children.

Coding on the other hand (and which I suspect is what the OP is actually talking about?), is a far more specialised discipline that not everyone can grasp to the same level.
So while you don’t anticipate every pupil who is taught coding at school, will go on to use it in their professional life, they will know of its existence & thus have an understanding of how computers & technology work.

The parallel would be the car; everyone uses them, most know how they work, but very few would dare attempt anything but the most superficial of servicing.

Thankfully both programming & coding have been a part of the national curriculum here in the UK for some time, so I guess someone in authority knows where society & technology are headed.

If I understand the new law correctly, it will be focused on programming as a whole, but with the intention to use this knowledge to teach students coding as the primary task of this new subject.
The intention is to bring new programmers into the job market.

My brother is a programmer and immigrated to Germany, He had met a German national in SF and married her–they decided to make Germany their home. They decided to not expose their daughter to computers until into her teenage years. Instead she spent her extracurricular time learning things like origami, juggling, playing flute, horse-back riding, gymnastics. This year, though, I received a pretty slick Calendar she made herself, presumably with the assistance of a computer graphics program. AFAIK, waiting until she was into the equivalent of Junior High before getting into computers and the Internet has worked out just fine. I don’t know if this is common in Germany or not, to limit exposure to computers until after social and intellectual skills have had a chance to develop.

I wouldn’t be so strict about the no-computers rule if I were a parent. (They also severely limited TV time.) But in her case, it certainly seems no harm was done by waiting.

I don’t know that trying to teach “logic” at an early age is necessarily going to take. “Logical thinking” may have requirements that don’t develop right away, kind of like trying to teach a kid about “object permanence” before they’ve recognized that Peek-a-Boo is a playable game.

Efforts were made to make Mathematics more about abstract principles and higher thinking (“new Math”) and success was definitely mixed at best. Since computers are everywhere, a certain amount of computer literacy and ability makes perfect sense. There’s nothing like running experiments, trying different teaching strategies and seeing what actually works, as opposed to getting stuck on an ideal or notion of what is best and pushing that on everyone.

Learning spreadsheets like MS Excel is more useful than programming in a low level language like Java or C.

On a related note, I always think it’s incredibly dumb how students are forced to use such limited calculators in exams. All exams in math related subjects should allow spreadsheets or mathematica or Google or a programming language on a laptop.

[quote=“CommanderKeith,post:7,topic:58281”]
At what level are you talking about?

No highschool student would ever need access to such powerful tools to solve the problems they’re being examined on.
Moreover, having access to such tools would change the focus of the examination; you’d no longer be testing them on their understanding of the topic, but on their ability to use the tools.

I agree with Abuse, I believe that the younger the children are, the easier is

Their minds are young and “unshaped”… they’ll lack theory, but you can start giving them a first touch of programming

I’d compare programming to any other subjects… if you start teaching math & language, I don’t see why you shouldn’t do also programming

My 2p… forcing everyone to learn how to program computers is a bit like forcing everyone to learn how to service car engines or plumb gas boilers. Very useful if you want to be a car mechanic or gas fitter, marginally useful if you one day find yourself in a situation where you can’t afford one, but for most people, a total, utter waste of time.

With a RPi available for peanuts there is no real obstacle to any kid wanting to play with programming to trying it at home using old bits of castoff peripherals. We’re back in a golden age the likes of which we’ve not seen since 1980.

Cas :slight_smile:

Schools tend to take the fun out of everything when they teach it. I think all they’d accomplish is raising a bunch of kids who hate programming.

Just to be clear, when I say “teaching programmin” in an elementary school, I expect to make it accordingly, that means no gradle or complex projects, but simple exercises, like moving an character through a 2d tiled-map. Something that also attract their attention and is, somehow, fun.

Teaching programming should be, indeed, teaching how to elaborate and process algorightms

I my vision the school should be more like a vine fair. You go there you taste a bit of everything and then you choose what you actually like and what you are going to purchase. I agree that it might not be very beneficial for those people who’s traits are not exactly good for engineering to be forced to be one. At some point it might also not be bad to give some introduction to programming, but later, when the logical thinking starts forming (reminded me this)

Precisely.

I introduced my 5 year old nephew (mad on Minecraft) to code.org’s Minecraft Hour of Code, and he found it incredibly rewarding.
Programming (in all its guises) is already prevalent throughout our society, and will be even more so in the future; introducing it early as a ‘play thing’ is vital for future learning.

It’s hardly a new concept; anyone remember this:

Or this:

I think computer science should be required like foreign languages are in some places. But as far as actual coding classes, I don’t think that’s a good idea. You have to be pretty motivated to want to learn how to code, and be smart enough to grasp the concepts. I think if they’re forced to code, it would just be like another math class where 75% of the kids don’t want to be there.

I always wanted to try and squeeze in a computer language into a foreign language class. “Look, Java isn’t English, and it’s a language.” :stuck_out_tongue:

I don’t know exactly how every school functions, but a lot of schools have AP classes. I feel like programming should be on of those, or even teach kids logic classes (very basic logic in early grades, and then slowly more advanced) and have programming be a subset of those logic classes. So, maybe start off by asking very simple questions, as time goes on transfer to things like the two paths/doors riddles, after that go into lateral thinking puzzles or something, and finally get into basic problem solving with programming.

@Abuse, I think all tests should allow laptops and spreadsheets, mostly for the ability to easily save and see intermediate results which is hard in a calculator, and to be able to see the history of working in prior cells’ working to spot an error. Also laptops have their faster keyboard input and regular * not x and / not ÷ symbols which are encountered all over the workplace and in everyday life.

Suitable ages to use spreadsheets on a computer might be from 10 years up? But I’m not a school teacher so that’s just a guess.

Edit: another big factor is laptops’ bigger readable screens. Calculators’ screens are ridiculously small and hard to scroll left and right and select symbols

I got into programming much early than most of my college pals here, almost 8 years earlier than when they started learning that they can also program computers, and they came to know about languages. The case of studies is different here in India, where you join school when you are 6 years old (play schools aren’t a thing when I was young, but they came nowadays and are even admitting in 4 year olds). Then you study all the types of subjects until you get 16 and come out of school. We all had English, Telugu (our state language), Hindi (our national language), Science (biology, physics and chemistry), Social Studies (history, geography, civils and economics), and if the child wants to, they also teach Sanskrit (the oldest language from which all the Indian languages derived).

Okay, but that is a lot? You might feel so, but no. The syllabus they teach is very small, and they are present to let the child know the different available fields that they can get into. Till here, computers are only a basic education, children will learn to use computers, play games, create art works using paint, create presentations, taking printouts, sending and receiving emails, etc., Nothing more. And I can bet 90% of my friends haven’t seen a computer until they are 12 or 14. Even schools lacked faculty who can teach computers, so even though the government sponsored the hardware, they had to take rest here.

I and a friend of mine, taught computers to ourselves, by experimenting with them. We used to see what makes what, that we actually opened up hardware and refitted them, and by reading their manuals, we came to know about operating systems, software, and all. We made games (using Game Maker 5.1) when we are 12, and we showed most of my friends what a computer is, by using games.

Then after school, we had two ways, the diploma (work based courses) and the intermediate (maths, physics, chemistry, botany, zoology, history, geography, economics, and civil). I went the intermediate way and chose Maths, Physics and Chemistry as my preferred subjects. Additionally, here, English, Telugu and Sanskrit are a must. No programming or computers here again.

Then there are two major streams, Engineering and the Medicine, but there are also Arts, law, etc.,

Coming to Engineering, the guys who chose to intermediate will be taken into the first year, while the diploma guys join directly in the second year. There are five major branches, which are as follows:

[]Computer Science
[
]Electronics & Communications
[]Electronics & Electrical
[
]Mechanical
[*]Civil Constructions

It is in engineering that most students here take their first glance at computers. However, the first year of engineering is the same for all the streams. We have to study Applied Mathematics, Applied Chemistry, Applied Physics, Computer Basics, Programming in C, Engineering Mechanics, Mechanical Drawing. English comes additionally here as one of the language subjects. There are no needs to keep Telugu, Hindi and Sanskrit, we will be well versed in them because they are our native languages.

When I got into engineering at the age of 18 in 2013, I already know of C, C++, Java, C#, VB.Net, Haxe, JS, PHP, and some basic Ruby. I already knew the languages, how to debug programs, (I had written my first game engine back in 2009 in Java) so I assumed that it will be very very easy, but alas, it isn’t.

Why?? Faculty are interested in completing the subjects (as increasing the students marks, not knowledge), and didn’t care about the thought process. I mean, they didn’t teach the students how to understand a problem and find the cause for it. And next, the colleges here are affiliated to universities, and had to teach the never updated syllabus that is designed by some very experienced faculty (experienced in teaching and academics, not in the emerging technologies).

There is also a drawback in my own self. I always thought that computer science was nothing but programming, commanding computers to do what we want, but then it actually is all about learning lessons from others inventions, and finding the logical solutions to the real world problems. With the subjects we had, and with that decade old syllabus, we are only going to learn the real basics which are just enough to survive in the everyday’s programming job.

We are taught design patterns, and it is our part to learn about when to use a specific pattern. We are taught about data structures, and again, we have to learn to find the correct datastructure to use on our own. The same goes to computer organisation, operating systems, linux programming, and a lot of subjects.

With all these things said, I came to know that a teachers part is very limited, and in fact, it is the part of the students that has more weight in the complete learning process. Teaching to kids is, yes, fine, but it will only be effective when the child is also interested in the outcomes. At such a young age, I don’t think children in schools need high programming, because they don’t know how the problems will be, and all. Instead, tell them how to think.

Games are a wonderful tools for that, and most of the young people today are well capable of playing games. Teach them to programming by teaching them to make games. Giving some presentations with some code snippets will only make them yawn in class and makes them sleep.

There is an old adage… those who can, do, and those who can’t, teach. Anyone with any serious skill or ability in computer science will be doing computer science, and being paid 3x as much. This leaves a rather small pool of actually talented people altruistically prepared to sacrifice their financial status to teach kids programming.

Cas :slight_smile:

Are we imagining different examination techniques?
I’m still imagining paper examinations where the calculator simply supplements the written word; it’s the responsibility of the student to record their working on the examination paper.

What you’re suggesting sounds like a transition to completely digital examination, and while that paradigm shift is in the works, it’s yet to become mainstream here in the UK.
I do agree though; digitally recording all intermediate working would be a much better way of evaluating a student’s level of understanding, but spreadsheets are not the ideal tool for that purpose.

[quote]and regular * not x and / not ÷ symbols which are encountered all over the workplace and in everyday life.
[/quote]
Mathematical operator symbology is indeed a mess, and the pervasiveness of competing Computer Science symbology has only muddied the water further.
That’s a whole different topic though.