Cause last time I checked a crazy numbers of them lack basic skills after they got out of high-scool. That's is a terrible and grave problem we should try to solve in an emergency before doing anything else fancy.
Stuff that anybody should be able to do WAY before being able to code:
- make the summary of a text
- calculate % of something
- understand correlation is different from causality
- read graphs and maps
- follow instructions in a book to do a simple task
- write a letter explaining directions in a clear way
- being able to demonstrate causality on a simple system they just witness working without using an example in their demonstration
- calculate the cost of buying a car or having a baby when given the proper metrics and projecting on that
Those are stuff our system is supposed to succeed in teaching at a very young age and many adults don't even have such basic skills.
We have a problem here.
Reading is a man made system of information conveyance. To master reading, you master the rules of it, while understanding the intent and purpose. Writing is the same - a man made system of information conveyance, except for creation rather than consumption. It has rules, and you need to understand intent and purpose to master it.
Math is the patternized structural implementation system of the universe. Again, to master math, you learn the rules, and understand the intent and purpose.
Code is a man made system of information conveyance meant to implement math for practical applications. You need to learn the rules and understand the intent.
All of your examples just demonstrate that fundamentally, education starts and ends with the ability of someone to understand a system - to interpret it rules, understand its intent, and use that knowledge for purpose to apply the rules with intent.
That fundamental abstraction is horrifying, because it becomes so obvious that these stills are never acquired. I'd postulate a majority of public school graduates in the US cannot use structured logic to adopt new ideas and structural systems in a consistent way, which belays the fundamentals of what education is meant to accomplish.
More punctual orators call this "learning to learn". It is a lacking subject in almost all educations, something you are meant to hopefully acquire on your own, but the absence of which is worse than any other failure of development. Living without critical thinking is akin to a failure to thrive.
This is what we are supposed to do.
This is not, however, what we do in school.
School is now doing :
- baby sitting
- killing creativity and autonomy
- blending all kids into on uniform bowl
- giving them examples on how to avoid admiting your are wrong, using fear, cheating, power abuse, bad food, fact distorsion, memorizing and forgetting...
- ranking kids against each others according to arbitrary yet not objective metrics
- teaching kids to pass, and fit a disfonctional system, at all cost, or be ashamed
I have been a student to 11 schools due to my father moving a lot for his work, from the worst in the hood to the best private ones. None of them prepared me for my life. Most of the kids that went in there came out without required basic skills, and yet passed. The most expensive ones are the less evil, so money is an issue.
Nonsense.
However, the fact that this is often considered a valid view shows how little philosophy/ethics are part of common education..
Once someone realizes it is their duty to learn, and that learning is a virtue that is rewarding on its own and brings benefit to themselves and others, the 'skill' is rapidly acquired.
What? I have university-level calculus (up to multi-variable integration etc), and can't think of the last time I needed it for coding.
Teachers, especially here in France it seems have taken to the notion that one teaches better through abstraction and unrelenting positive encouragement. I don't want to be the grumpy old fart, but maybe a stricter enforcement of realistic & basic requirements like those listed in your parent are a good first step.
Let those who want a diploma/certificate work for it and encourage students by all means, but sometimes not good enough is just not good enough and that should be OK for national education to recognise and adapt to.
This is our problem here. When the system fails, it has no way to react in a sane maner. If a kid, 3 years in a row, cannot aquire the skills he/she should, the system then will pass her/him automatically.
Because the current society is claiming being smart is unpopular, kids have no insensitive to apply themself to learning. The new generation of parents doesn't commit to make them to. And teachers are not allowed to. This leads to a very tricky situation.
Not all will go on to become professional coders. Not all will be very good at it, just as some people aren't great at spelling, or basic maths. But this lays the groundwork for logical thinking with a scientific approach to validating assumptions.
Getting this down at an early age, when kids are learning fundamentals like counting and spelling, will give them a really strong foundation for developing advanced thought-based skills later. That is far more important than the specifics of knowing how to code.
It does not work other way round. In my experience, it is precisely the difficulty with breaking tasks into step by step instructions that makes difference between people who have easy time learning it vs hard time learning it.
In other words, you might learn how to code in order that you then know how to give clear instructions.
The real programing would mean teaching them how computer really works or network protocols or html,css,javascript etc -which makes less sense for kids and muddles what was supposed to be lesson in technical details.
Just as reading and writing is part of current ordinary jobs like consultancy or plumbing, in the future everyone will be working so closely with the machines they need basic skills:
- How do various UIs work? This is more of a "power user" type skill but nonetheless it's worth practicing. You'll also need an idea of how things work from the user side to write the UI later on. For example you could learn how iOS and Andriod work by playing around with it, and then having a go at making your own apps.
- How does networking work? Stuff will break, just like your plumbing and bureaucracy. You'll need to know at least how to diagnose why you have no internet connection.
- Superficially, how does a given algorithm work? The kids don't need to know everything about DNNs but they have to have the overview of what image recognition does, so they can form expectations about how they will interact with it.
- Security. There's going to be more and more stories about breaches. Just as we teach them sex ed, they need some basic knowledge about how a password is stored, what encryption is, and so on.
Early age computational thinking is not about using computers, like how to use various operating systems or setting up networks or what is a good password or things like that. When I talk to teachers/school administrators but also other parents they are all excited and give these things as examples of how the curriculum (at my kids' school) could be extended. I think this is because to them, that's 'advanced computing' so that's what children need to know. As to you - I presume since you're here that you work as a programmer, so in that sense you're kind of throwing off my theory...
Either way, what is being done in this sort of programs, is teach elementary thinking skills. For many, you don't even need a computer. It's about the concept of breaking down a task into very small subtasks that you can describe exactly, without ambiguity, and while still covering corner cases. That is 'computational thinking', and it's so far removed from the everyday world of current adults (who are not at least somewhat programmers) that they usually have a very hard time even understanding what it's about. How you configure your internet connection is nothing like that, and such menial skills have no place in elementary school classrooms. There are only so many hours in each day, we need to make optimal use of them.
Teaching these fundamental skills can be done e.g. using robots like Beebot or Cubetto or similar; using simple programming environments like Scratch; or on paper / in real life like getting someone to describe how to sort other children from small to large in a generic way (and having it play out in front of them); or with board games that incorporate elements of it. There's a lot of experimentation being done how to best teach these things, and the things you'd think of as the 'obvious' way is quite often wrong (for example, getting a 5 year old to drive a robot and introducing conditions and iterations is quite easy and can happen in a few hours; but usually they won't be able to generalize that knowledge. So you need to dress it up into something immersive, to 'soak' them into this way of thinking essentially, and not just a trick they know how to do).
I don't think anyone would suggest something they believe to be 'advanced computing' as part of elementary school education. Rather, I think they see these practical skills of interacting with computers and the internet as something useful directly related to their day-to-day lives, so that's why they think they are important.
I do think that everyone who goes through the school system should take away at least some basic understanding of these directly applicable aspects of computing.
And computational thinking? Compare it to mathematics: If I had to sum up mathematical thinking, I'd say that it's all about logical deduction, working your way from assumptions to the conclusion.
But the maths curriculum is not directly focused on teaching that, the topics covered are more like simplified versions of applied maths problems, roughly ordered by decreasing probability of usefulness (most people will find some use for basic arithmetic, but even solving linear equations is quite unlikely). If the kids pick up mathematical thinking along the way, great, and they will have an easy time with the problems, but even those who get through by memorizing formulae will take away something useful.
I think something similar will happen to computational thinking. Although teaching it to everyone is certainly a noble goal, I doubt that everyone will be able to fully generalize what they are taught. Lessons will have to be tangibly applicable for the students, so that even those who can only memorize the specific and not abstract into the general will have learned something useful, even if it is just a "menial" skill.
Examples of such lessons might involve navigating the menu structure of some program, but then this is essentially tree-traversal, so you can talk about different ways to explore all available options, and "breaking down a task into small subtasks" could be practiced by describing how to move through the menu to perform some action and so on. The point being, you can do a lot of stuff that is related to some aspect of computational thinking, but even if the kids don't generalize what they learned, at least they can find specific items in a menu, and maybe even use hotkeys if they aren't doing it on a touchscreen.
I couldn't agree more.
The curriculum for our kids should be based around building the mental machinary that will enable intuitive, creative and analytic problem solving. Learning a specific language, or some specific design pattern / method seems a little backward to me; this knowledge can be layered on top of this way of thinking in later years.
Focus on building the right hardware (brain) before writing the software for it (knowledge).
The thing is most of those things are practical skills that everyone is going to need. And just like when there people who couldn't read, there are now people who don't know what the little X in the top right corner of Excel does. Sure, school should teach you "elementary thinking skills" but a lot of what goes on is just practical.
I also think not having those practical skills is going to demotivate people. How often do kids give up on something because of mundane reasons? If you're comfortable with using the machine, maybe you'll find it easier to persevere through tougher material. Ideally you'll pick up something useful as well as a reasonable idea of what lies down the line.
I am asking because your comment makes impression of someone who already studied it or have experience.
For that reason I think it'd be misguided to lean too heavily on testing their performance — kids learning chess aren't required to reach certain level at the end of the year, the goal is to go through the training itself.
Two ideas come to mind. First, maybe this is because electricity has gone far beyond "pervasive" into "fully invisible". Second, maybe this is because software is inherently more complex and can't be made fully invisible.
Maybe both ideas are actually the same, but playing on different points of their lifecycles - will software become so industrialised and standardised within a century that it will become as invisible as electricity?
Thinking about early car owners, who needed some non-trivial understanding of how it worked just to be able to use it, or how you needed to know some trivial amount of BASIC to do anything at all with the 80's home computers (<3 ZX Spectrum).
If you can automate some portion of your desk job, you're a much more valuable employee.
The same is theoretically true for factory workers and mechanical/electrical engineers, but the barrier to creating your own factory automation is extremely high. And no one is going to let a random factory worker tweak/augment expensive machinery in a novel and untested way.
Whereas an Excel macro or quick Python script for parsing some data and doing some computations or sending some emails is very accessible and totally acceptable in many environments.
I think your second point is the correct one.
Software eats itself as much as it eats anything else. This is the purpose of compilers and high level languages. To someone coding in a high level language, C code, assembly, and the electronic hardware itself are all reduced to invisible infrastructure. (That's the idea anyway, leaky abstractions notwithstanding).
So, I would argue low level software is often already invisible in the sense that it is hidden behind the abstraction of higher level languages or user interfaces. But the definition of "low level" changes as more advanced software is created, so it's forever a moving target.
And some people still die because they used that interface wrongly.
Unfortunately the corporations seem determined to put a stop to that sort of pervasive knowledge, if only for the purpose of controlling and monetising their users. They don't want people to know how easy it is to do things like strip DRM or remove artificial limitations from software. [See Stallman's famous story, or the Cory Doctorow articles on the demise of general-purpose computing.]
And thus most of the "learn to code" efforts I've seen have seemed to focus on some ultra-high-level language, removed from reality and often sandboxed, so that while people do learn the very-high-level concepts of how computers work, they are no less unclear about the functioning of the actual systems they use daily --- or how to use them fully to their advantage. In some ways, they're trying to teach how to write programs without understanding existing ones.
The document said children should be writing programs and understand how computers store information by their final years of primary or intermediate school.
However, this sounds more promising. Especially if they're starting more along the lines of this book: https://www.amazon.com/Code-Language-Computer-Hardware-Softw...
Does everyone need to write code for a living? No, just like we don't expect everyone to be a professional writer or mathematician. But software is so pervasive that within a generation or two, not understanding how it works will put you at a severe disadvantage.