Don't learn to code. Learn to think
brikis98.blogspot.com
brikis98.blogspot.com
However, for the vast majority of people, this is not enough to build the mental models of how computation and logic really operate. You see this in the sheer number of people who graduate and don't know how to code. We learn best from tight feedback loops which an algorithms text book simply cannot offer. Writing that code, on the other hand, will give you a deep insight into how it really works and build a lasting mental model.
It is coding which ultimately changes the way you approach a problem and think through it.
http://coding2learn.org/blog/2013/10/10/computing-is-much-mo...
I struggle to find a simple example of where CT applies to everyday life, outside of the sphere of programming. Kids should experience code first, and then realise how it can simplify their lives as they begin to understand CT.
You say
> We’re teaching programming, network infrastructure, databases, communication protocols, markup. We’re teaching these things because these technologies are so ubiquitous and important, that it will benefit everyone to have a little understanding of them.
I don't know what your computer science education was, but the fundamental idea in mine was "learning how to take an idea in your head and turn it into a program." The principles were not networks, databases, and protocols, but rather modularization, reuse, clarity, and algorithm analysis. You think refining these tools is not important?
You give an example:
> If I was to shuffle a pack of fifty-two playing cards and hand them to you, then asked you to sort them, you’d do what any sensible person on the planet would do. You’d sort them into suit order first, then into value order.
The point of computational thinking is that you can concretely analyze how good this method is and compare it with others (I'm sure you know the tradeoffs involved in sorting!). Of course everyone knows how to naturally decompose things, but reasoning about it and handling adversarial cases, that's where computational thinking comes in.
Computational thinking (forget the Popular Title, just the idea of applying computational ideas elsewhere in life) is extremely valuable, and I'll give you two prominent examples: the first in the design of fair markets, which has revolutionized more than one industry [1], and the design of new computers, such as quantum computers and DNA computing [2]. I can continue: computational thinking is applied in designing fun games (not just in programming them!), art and product design, literally every optimization problem in every industry, cognitive psychology, the study of evolution, political analysis, information and security, and so on. I can give you references and examples if you want.
You would rather call Computer Science "what it is" and omit these opportunities for people who don't want to be software engineers their entire life? It sounds more like you're in a bubble where the only thing to aspire to is Steve Wozniak and browser design and "realistic flag fluttering" in games. The truth is that computational systems are everywhere in life, and being able to recognize, formalize, and analyze them are what makes computational thinking useful. It's not just about writing programs.
Maybe your point is that we should separate the two fields: instead of one big Computer Science degree we should have Software Engineering which is just about programming and Theoretical Computer Science which is just about the mathematics and Applied Computer Science which is about the other stuff. I wouldn't be opposed to that, but your argument rather suggests we throw everything out but protocols and databases, and if someone told me I were going to get that and only that from a computer science education, I'd have run far far away.
[1]: http://jeremykun.com/2014/04/02/stable-marriages-and-designi... [2]: http://en.wikipedia.org/wiki/DNA_computing
As an arbitrary example, take Quick Sort. Trying to explain the algorithm to someone who doesn't know how to code is exceptionally difficult. Once they practically understand recursion, then it becomes simple.
I completely agree with you that CT is exceptionally valuable. My issue is with the timeline. I personally feel (and I am completely open to the idea that I might be wrong, given my inexperience), that we should be teaching kids to code first and then CT afterwards. CT, without the benefit a knowledge of programming or University level mathematics, is a little pointless.
That being said, I think Quick Sort is a lousy sorting algorithm for teaching. Mergesort and Treesort are much better.
I would strongly recommend against the second ;)
[It's relevant because all the "communities" mentioned in the post promote girls as deserving special treatment that is not offered to boys. Either overtly or less conspicuously - code.org and coderdojo make special notes on how to encourage girls but no special notes on how to encourage boys that I can find (please correct me).
I'm not saying you shouldn't consider that some children might prefer a story-based approach (boys and girls); a specific active/physical approach might be preferred by some children, or ... ]
Some people, when confronted with a problem, think "I know, I'll use a computer." Now they have two problems. [1]
If you don't understand the problem, you're going to have a hard time "coding it".
--
i run into so many situations where people want to identify their task, put their heads down and do it regardless of whethertheir task is actually bringing real effective value to the process.
and more situations where people refuse to change the way they do things even when its proven to them that theres a better way to do things. PHDs tend to be the absolute worst about this.