Answers.Body: <h2>General Purpose Programming Skills</h2>
  <p>General purpose programming skills can also be called <strong>Computational Thinking</strong>. Computational thinking has four cornerstones¹:</p>
  <ul>
  <li>Decomposition - breaking down a complex problem or system into smaller, more manageable parts</li>
  <li>Pattern recognition (data representation) – looking for similarities among and within problems</li>
  <li>Generalization (abstraction) – focusing on the important information only, ignoring irrelevant detail</li>
  <li>Algorithms - developing a step-by-step solution to the problem, or the rules to follow to solve the problem</li>
  </ul>
  <h2>Computational Thinking: What It Is, and Isn't</h2>
  <p><a href="https://en.wikipedia.org/wiki/Jeannette_Wing" rel="noreferrer">Jeannette Wing</a>, formerly head of the Computer Science at Carnegie Mellon Univ., Pittsburgh, PA, USA published an article in <em><a href="https://en.wikipedia.org/wiki/Communications_of_the_ACM" rel="noreferrer">Communications of the ACM</a></em> where she covers, rather nicely, the ideas of computational thinking, and how it differs from computer programming.²</p>
  <blockquote>
  <p><em>Conceptualizing, not programming</em>. Computer science is not computer programming. Thinking like a computer scientist means more than being able to program a computer. It requires thinking at multiple levels of abstraction;</p>
  <p><em>Fundamental, not rote skill</em>. A fundamental skill is something every human being must know to function in modern society. Rote means a mechanical routine. Ironically, not until computer science solves the AI Grand Challenge of making computers think like humans will thinking be rote;</p>
  <p><em>A way that humans, not computers, think</em>. Computational thinking is a way humans solve problems; it is not trying to get humans to think like computers. Computers are dull and boring; humans are clever and imaginative. We humans make computers exciting. Equipped with computing devices, we use our cleverness to tackle problems we would not dare take on before the age of computing and build systems with functionality limited only by our imaginations;</p>
  <p><em>Complements and combines mathematical and engineering thinking</em>. Computer science inherently draws on mathematical thinking, given that, like all sciences, its formal foundations rest on mathematics. Computer science inherently draws on engineering thinking, given that we build systems that interact with the real world. The constraints of the underlying computing device force computer scientists to think computationally, not just mathematically. Being free to build virtual worlds enables us to engineer systems beyond the physical world;</p>
  <p><em>Ideas, not artifacts</em>. It’s not just the software and hardware artifacts we produce that will be physically present everywhere and touch our lives all the time, it will be the computational concepts we use to approach and solve problems, manage our daily lives, and communicate and interact with other people; and</p>
  <p><em>For everyone, everywhere</em>. Computational thinking will be a reality when it is so integral to human endeavors it disappears as an explicit philosophy.</p>
  </blockquote>
  <hr />
  <p>1: Source: BBC Bitesize - KS3 Computer Science - <a href="https://www.bbc.com/education/guides/zp92mp3/revision" rel="noreferrer">Introduction to computational thinking</a></p>
  <p>2: <a href="https://www.cs.cmu.edu/%7E15110-s13/Wing06-ct.pdf" rel="noreferrer">Source</a>: Jeannette M. Wing &quot;<a href="https://drive.google.com/file/d/1hRnNjUTyBwQu3kadX3unljw-iCZKEuk0/view?usp=sharing" rel="noreferrer">Computational Thinking</a>&quot; <em>Communications of the ACM.</em> <a href="https://dl.acm.org/citation.cfm?doid=1118178.1118215" rel="noreferrer">49 (3): 33.</a></p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-13T02:52:08.137Z
Answers.Text: I deleted my last comment as it came across differently to what I'd intended, sorry. I really appreciate this answer, and upvoted it, as it contains a lot of useful, relevant information. That said, the issue really is to do with programming specifically, rather than computational thinking, which is much more general. The issue we're having is that every child will spend five years learning to program (typically with Python or JS), and most will not become professional programmers, and it is not obvious what programming skills they need. We don't really know what an ideal outcome looks like.
Answers.UserDisplayName: Carl Younger
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-13T03:40:00.410Z
Answers.Text: @CarlSmith Don't think of programming as the goal, think of is as the vehicle. Learning to program engages a different mental mode of analysis that is useful in _any_ endeavor. Read the entire [paper from Wing](https://drive.google.com/file/d/1hRnNjUTyBwQu3kadX3unljw-iCZKEuk0/view?usp=sharing), not just my excerpts, and it _might_ help with the "teaching programming to non-programmers" issue. Programming is replacing the now absent courses on rhetoric.
Answers.UserDisplayName: Gypsy Spellweaver
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-12T04:57:45.763Z
Answers.LastActivityDate: 2018-04-12T04:57:45.763Z
Answers.LastEditDate: 2020-06-18T08:36:57.023Z
Answers.UserDisplayName: Gypsy Spellweaver
Answers.Body: <p>I would assume that when you are saying child, you mean under 10 year old. </p>
  
  <p>Then as @Gypsy Spellweaver says, they would need to know how to break down problems into smaller problems, which would very beneficial for there way of solving problem in the future. That's a very big skill a lot of people are lacking.
  There's also one thing you need to learn is how to find your way out, this is a very important skill to learn from programming as a child : how to solve the problem using the tool you have. </p>
  
  <p>Theory is fine, but how to achieve that :</p>
  
  <p>I think the programming learning curve will be very deeply related to the child's math curve. So what could be a good way could be to show children how to implement what they are learning in math.</p>
  
  <blockquote>
    <ul>
    <li>you're learning addition, then a good problem to give them would be : How to do any addition only using +1 addition and a loop, you'll teach them the understanding of the for loop but also the very deep meaning of the addition</li>
    <li>Same goes with multiplication, how can you do it only using '+' and loops ? </li>
    <li>There's geometry that would be harder to do at the early start, but you can still use math lab and do some easy geometry problem, for instance drawing lines and gives them parameters so that they would find how to make them parallel or perpendicular, then automate that</li>
    </ul>
  </blockquote>
  
  <p>You can do that technique even at higher stage of the curriculum :</p>
  
  <blockquote>
    <p>When learning trigonometry, just show them how it's working exactly by having animation where they can move around the trigonometry circle</p>
  </blockquote>
  
  <p>I think that people needs to reconnect with the very low level approach of science. Most of the time I see students just giving up in front of the problem they are offered, whereas most of time it's just a matter of thinking bigger and resolving problem one at a time with the tools you have. And I believe this is a critical skill in today's world, if you're not a problem solving person I don't see how you can fit in science jobs. </p>
  
  <p>I believe there's a lot of way to learn children the deep meaning of science using programming. You'll be surprised about how older teenager (over 16) don't even know the meaning of things like multiplication, addition and so on. Don't even thing about equations and in-equations. I believe programming will really help them understanding these concept for what they truly are. </p>
  
  <p>Then student would be able to break down all of those problem by using programming, which is very mechanical and that would help I guess with almost all abstraction behind math for at least the early levels. Then it would get more complicated but they will have the tools to cope with those problem. </p>
  
  <p>General purpose skills are just as GPIOs (general purpose inputs outputs) in embedded systems, in a way that it's only tools and skills and way of thinking that will help you deal with problems you're going to face. And programming and math are one of the best way to sharpen your critical way of thinking. In the end that's just teaching you're brain how to take a step back and analyze the situation/problem/project for what it is.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-13T02:17:16.810Z
Answers.Text: The question regards children aged between 10 and 16. I was actually corrected on that point though. The children are 11 when they start programming. I don't think this answer really addresses the question.
Answers.UserDisplayName: Carl Younger
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-13T08:25:50.373Z
Answers.Text: I edited  my answer to stick a little bit more to the question.
Answers.UserDisplayName: YCN-
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-13T08:27:11.090Z
Answers.Text: "to study computer science from age 4", I don't really see the difference you do between computer science and programming, to me that's only to side of the very same coin.
Answers.UserDisplayName: YCN-
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-12T08:32:53.913Z
Answers.LastActivityDate: 2018-04-13T08:25:20.427Z
Answers.LastEditDate: 2018-04-13T08:25:20.427Z
Answers.UserDisplayName: YCN-
Answers.Body: <p>There are three basic building blocks of programming: simple sequence, decisions, and iterations (loops).</p>
  
  <p>Any program can be built from these three basic constructs. They are like the six simple machines.</p>
  
  <p>The simple sequence is exactly what it says: statements executed in order. Decisions are (usually) prefaced with the word "if": if it is sunny, I will go to the skate park. Lastly, iterative constructs repeat the same code over and over, stopping based on a certain condition or a number of times: while the driver presses the gas, send fuel to the injectors. </p>
  
  <p>Children can learn and practice these constructs without writing code. For example, they can write directions on how to get from their school to their home.  Food recipes are also good practice, to read and to write.</p>
  
  <p>These things, written instructions telling how to do something, are called algorithms. Once children become proficient at writing algorithms (and since they are starting so young, several years could be spent on just that aspect, using the spiral pedagocial model), then they can move to writing code. If they have made the algorithm development part of their thinking, then it will transfer easily to coding.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-13T13:01:32.810Z
Answers.LastActivityDate: 2018-04-13T19:32:18.103Z
Answers.LastEditDate: 2018-04-13T19:32:18.103Z
Answers.UserDisplayName: Java Jive
Answers.Body: <p>I don't think that the new UK curriculum is intended to create professional programmers, certainly not among 10 year old students. Perhaps the focus of this question here is too narrowly focused on programming rather than the more general "computing." Certainly, in today's world, where even young people carry mobile devices of exceptional computing power and whose applications can threaten their privacy, everyone need to know something about the details of this world and how a citizen should react to it - and govern it. </p>
  
  <p>The post here by <a href="https://cseducators.stackexchange.com/a/4617/1293">Gypsy Spellweaver</a> already presents a larger framework for thinking that is excellent in every regard. So let me mention another aspect that is often forgotten. </p>
  
  <p>I think programming at some level can be valuable to any "scholar" at any level. If you are studying $X$  then being able to write simple (we hope) scripts that let you automate some of the aspects of $X$  can be very enlightening, not as a programmer, but as a student of $X$. Replace $X$  with any field you like; music, art, philosophy, chemistry, maths....  Literature today has aspects that can only be successfully studied by examining very large data sets. Obviously the same is true of Astronomy. You don't need to be a professional Java programmer to write programs that are useful to you in your work. Even a spreadsheet can be of great use. </p>
  
  <p>Purpose-built (bespoke) programming languages for, say, Psychology research would be valuable to many researchers, but those researchers need at least the background to understand and modify their programs. Otherwise they need to depend on professionals even for relatively simple things. </p>
  
  <p>Even beyond the realm of scholarship, every citizen faces relatively small problems that they could solve with a bit of Python or, dare we say, Scheme. It also, of course, gives insight into the limitations of computing systems and, one hopes, the dangers of misuse. </p>
  
  <p>With the above in mind, it is probably necessary to teach programming in a different way than if you were teaching it to someone with a formal CS focus. Rather than traditional CS topics, such as searching, sorting, optimization, algorithm efficiency, etc., <em>applications</em> can be stressed. And they should be applications in the other fields that the students are beginning to study; their science courses, for example. This also opens the possibility of collaborations with the instructors of those other subjects which can, in itself, be a useful thing for all parties to the collaborations. The physics teacher is a good source of ideas about what physics issues might be informed with a bit of computing. </p>
  
  <p>Biology is an especially fruitful field since students often do field work, tallying up fish and frogs and birds, etc. Some simple programs to help them do the tallying and especially simple statistical analysis is helpful. Teachers can organize multi-year projects in which a new class carries on a study started by earlier students. It has scientific merit as well as generating learning and enthusiasm for the field. </p>
  
  <p>But the question is deeper than programming as I noted at the start. Every citizen needs to be able to digest what is going on in the wider world of captured data as exemplified by the current (early 2018) discussions and debate about Facebook and Cambridge Analytica and the misuse of personal data. These are big questions that require an informed citizenry. </p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-12T17:23:03.680Z
Answers.Text: I think the purpose behind the emphasis given by the UK curriculum isn't programming as such, rather that learning to program creates mental patterns of analysis useful to life, as well as education.
Answers.UserDisplayName: Gypsy Spellweaver
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-13T02:39:12.593Z
Answers.Text: The idea of focussing on *applications* is interesting, and I especially like the idea of integrating the stuff students are studying in other subjects. I'm not sure this answers the exact question asked, but I understand it's not a simple question, and that it's difficult to even know where to begin. Other answers wonder quite far from the specific issue, so I'll mark this as correct.
Answers.UserDisplayName: Carl Younger
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-04-12T17:03:21.137Z
Answers.LastActivityDate: 2018-04-13T16:16:01.977Z
Answers.LastEditDate: 2018-04-13T16:16:01.977Z
Answers.UserDisplayName: Buffy
Body: <p>The UK introduced its <a href="https://www.gov.uk/government/publications/national-curriculum-in-england-computing-programmes-of-study/national-curriculum-in-england-computing-programmes-of-study" rel="nofollow noreferrer">National Computing Curriculum</a> a couple of years ago, which requires all children to study computer science from age 4, and programming from age 10. Children can opt out of the subject aged 16.</p>
  <p>Schools are struggling to implement the curriculum, mainly due to a lack of teaching staff that can program, but the hope is that things will improve over time.</p>
  <p>The UK National Curriculum defines three <em>key skills</em> (English, Mathematics and Science) that must be studied. Computing is defined as one of the four sciences (along with Physics, Chemistry and Biology), which is why British children must now learn to code.</p>
  <p>Some people argue that traditional computer literacy is a specialist skill, and do not think the subject should be mandatory. The counter is that the curriculum is not designed to teach specialist skills, insisting that there is a core subset of programming concepts that every educated person should understand.</p>
  <p>The <a href="https://www.gov.uk/government/publications/national-curriculum-in-england-computing-programmes-of-study/national-curriculum-in-england-computing-programmes-of-study" rel="nofollow noreferrer">official guidance</a> does not make it clear which programming concepts should be taught, instead offering vague recommendations. This is about as good as it gets:</p>
  <blockquote>
  <ul>
  <li><p>use 2 or more programming languages, at least one of which is textual, to solve a variety of computational problems; make appropriate use of data structures [for example, lists, tables or arrays]; design and develop modular programs that use procedures or functions</p>
  </li>
  <li><p>understand simple Boolean logic [for example, AND, OR and NOT] and some of its uses in circuits and programming; understand how numbers can be represented in binary, and be able to carry out simple operations on binary numbers [for example, binary addition, and conversion between binary and decimal]</p>
  </li>
  </ul>
  </blockquote>
  <p>I understand this is not the place for a debate or discussion, so would like to ask if anyone could define what <em>general purpose programming skills</em> are, with any clarity?</p>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-04-12T09:55:14.583Z
Comments.Text: Excellent first question. I thought you were going someplace really open-ended right up until the end. :) Also, welcome to [cseducators.se]. Why in the world haven't we seen more of you until now?
Comments.UserDisplayName: Ben I.
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-04-12T11:10:06.417Z
Comments.Text: The first clause if from keystage-3 (≈11year old to 14 year old). For keystage2 (< 11year old) “at least on of which is textual” is missing. So I assume that this is about >11 year olds.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-04-12T11:12:04.920Z
Comments.Text: Have a look at cs-unplugged. They have a lot of resources for teaching computer science without a computer, and suitable for specialist and non-specialist teachers.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-04-12T16:28:50.347Z
Comments.Text: Do you really want to focus _just_ on programming or on Computing more generally. There is much more to computing than programming, which is only a tool for a larger purpose.
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-04-13T02:13:08.070Z
Comments.Text: Thanks guys. CS Unplugged looks really interesting. Buffy, I was thinking more in terms of *programming* than *computing*. I do agree with your comment, but don't expect too many problems establishing which CS concepts should be taught in school. With programming, I'm struggling to define what is and isn't generally useful. I'm also concerned that the Banana Gorilla Jungle Problem will make it difficult to teach a useful subset of any current language, but that's a separate issue.
Comments.UserDisplayName: Carl Younger
Tags: <secondary-education>
Title: What are "general purpose programming skills"?
ThreadText: # What are "general purpose programming skills"?
  
  (Asked by: username_0 on 2018-04-12)
  
  The UK introduced its [National Computing Curriculum](https://www.gov.uk/government/publications/national-curriculum-in-england-computing-programmes-of-study/national-curriculum-in-england-computing-programmes-of-study) a couple of years ago, which requires all children to study computer science from age 4, and programming from age 10. Children can opt out of the subject aged 16.
  
  Schools are struggling to implement the curriculum, mainly due to a lack of teaching staff that can program, but the hope is that things will improve over time.
  
  The UK National Curriculum defines three *key skills* (English, Mathematics and Science) that must be studied. Computing is defined as one of the four sciences (along with Physics, Chemistry and Biology), which is why British children must now learn to code.
  
  Some people argue that traditional computer literacy is a specialist skill, and do not think the subject should be mandatory. The counter is that the curriculum is not designed to teach specialist skills, insisting that there is a core subset of programming concepts that every educated person should understand.
  
  The [official guidance](https://www.gov.uk/government/publications/national-curriculum-in-england-computing-programmes-of-study/national-curriculum-in-england-computing-programmes-of-study) does not make it clear which programming concepts should be taught, instead offering vague recommendations. This is about as good as it gets:
  
  > * use 2 or more programming languages, at least one of which is textual, to solve a variety of computational problems; make appropriate use of data structures [for example, lists, tables or arrays]; design and develop modular programs that use procedures or functions
  > * understand simple Boolean logic [for example, AND, OR and NOT] and some of its uses in circuits and programming; understand how numbers can be represented in binary, and be able to carry out simple operations on binary numbers [for example, binary addition, and conversion between binary and decimal]
  
  I understand this is not the place for a debate or discussion, so would like to ask if anyone could define what *general purpose programming skills* are, with any clarity?
  
  **Tags:** secondary-education
  
  > **Comments:**
  > **username_1**: Excellent first question. I thought you were going someplace really open-ended right up until the end. :) Also, welcome to [cseducators.se]. Why in the world haven't we seen more of you until now?  
  > **username_2**: The first clause if from keystage-3 (≈11year old to 14 year old). For keystage2 (< 11year old) “at least on of which is textual” is missing. So I assume that this is about >11 year olds.  
  > **username_2**: Have a look at cs-unplugged. They have a lot of resources for teaching computer science without a computer, and suitable for specialist and non-specialist teachers.  
  > **username_3**: Do you really want to focus _just_ on programming or on Computing more generally. There is much more to computing than programming, which is only a tool for a larger purpose.  
  > **username_0**: Thanks guys. CS Unplugged looks really interesting. username_3, I was thinking more in terms of *programming* than *computing*. I do agree with your comment, but don't expect too many problems establishing which CS concepts should be taught in school. With programming, I'm struggling to define what is and isn't generally useful. I'm also concerned that the Banana Gorilla Jungle Problem will make it difficult to teach a useful subset of any current language, but that's a separate issue.  
  
  ---
  
  ## 4 answers
  
  ### Answer by username_3 on 2018-04-12. Score: 2 | Accepted answer
  
  I don't think that the new UK curriculum is intended to create professional programmers, certainly not among 10 year old students. Perhaps the focus of this question here is too narrowly focused on programming rather than the more general "computing." Certainly, in today's world, where even young people carry mobile devices of exceptional computing power and whose applications can threaten their privacy, everyone need to know something about the details of this world and how a citizen should react to it - and govern it.
  
  The post here by [username_4](https://cseducators.stackexchange.com/a/4617/1293) already presents a larger framework for thinking that is excellent in every regard. So let me mention another aspect that is often forgotten.
  
  I think programming at some level can be valuable to any "scholar" at any level. If you are studying $X$ then being able to write simple (we hope) scripts that let you automate some of the aspects of $X$ can be very enlightening, not as a programmer, but as a student of $X$. Replace $X$ with any field you like; music, art, philosophy, chemistry, maths.... Literature today has aspects that can only be successfully studied by examining very large data sets. Obviously the same is true of Astronomy. You don't need to be a professional Java programmer to write programs that are useful to you in your work. Even a spreadsheet can be of great use.
  
  Purpose-built (bespoke) programming languages for, say, Psychology research would be valuable to many researchers, but those researchers need at least the background to understand and modify their programs. Otherwise they need to depend on professionals even for relatively simple things.
  
  Even beyond the realm of scholarship, every citizen faces relatively small problems that they could solve with a bit of Python or, dare we say, Scheme. It also, of course, gives insight into the limitations of computing systems and, one hopes, the dangers of misuse.
  
  With the above in mind, it is probably necessary to teach programming in a different way than if you were teaching it to someone with a formal CS focus. Rather than traditional CS topics, such as searching, sorting, optimization, algorithm efficiency, etc., *applications* can be stressed. And they should be applications in the other fields that the students are beginning to study; their science courses, for example. This also opens the possibility of collaborations with the instructors of those other subjects which can, in itself, be a useful thing for all parties to the collaborations. The physics teacher is a good source of ideas about what physics issues might be informed with a bit of computing.
  
  Biology is an especially fruitful field since students often do field work, tallying up fish and frogs and birds, etc. Some simple programs to help them do the tallying and especially simple statistical analysis is helpful. Teachers can organize multi-year projects in which a new class carries on a study started by earlier students. It has scientific merit as well as generating learning and enthusiasm for the field.
  
  But the question is deeper than programming as I noted at the start. Every citizen needs to be able to digest what is going on in the wider world of captured data as exemplified by the current (early 2018) discussions and debate about Facebook and Cambridge Analytica and the misuse of personal data. These are big questions that require an informed citizenry.
  
  > **Comments:**
  > **username_4**: I think the purpose behind the emphasis given by the UK curriculum isn't programming as such, rather that learning to program creates mental patterns of analysis useful to life, as well as education.  
  > **username_0**: The idea of focussing on *applications* is interesting, and I especially like the idea of integrating the stuff students are studying in other subjects. I'm not sure this answers the exact question asked, but I understand it's not a simple question, and that it's difficult to even know where to begin. Other answers wonder quite far from the specific issue, so I'll mark this as correct.  
  
  ---
  
  ### Answer by username_4 on 2018-04-12. Score: 7
  
  ## General Purpose Programming Skills
  
  General purpose programming skills can also be called **Computational Thinking**. Computational thinking has four cornerstones¹:
  
  * Decomposition - breaking down a complex problem or system into smaller, more manageable parts
  * Pattern recognition (data representation) – looking for similarities among and within problems
  * Generalization (abstraction) – focusing on the important information only, ignoring irrelevant detail
  * Algorithms - developing a step-by-step solution to the problem, or the rules to follow to solve the problem
  
  ## Computational Thinking: What It Is, and Isn't
  
  [Jeannette Wing](https://en.wikipedia.org/wiki/Jeannette_Wing), formerly head of the Computer Science at Carnegie Mellon Univ., Pittsburgh, PA, USA published an article in *[Communications of the ACM](https://en.wikipedia.org/wiki/Communications_of_the_ACM)* where she covers, rather nicely, the ideas of computational thinking, and how it differs from computer programming.²
  
  > *Conceptualizing, not programming*. Computer science is not computer programming. Thinking like a computer scientist means more than being able to program a computer. It requires thinking at multiple levels of abstraction;
  >
  > *Fundamental, not rote skill*. A fundamental skill is something every human being must know to function in modern society. Rote means a mechanical routine. Ironically, not until computer science solves the AI Grand Challenge of making computers think like humans will thinking be rote;
  >
  > *A way that humans, not computers, think*. Computational thinking is a way humans solve problems; it is not trying to get humans to think like computers. Computers are dull and boring; humans are clever and imaginative. We humans make computers exciting. Equipped with computing devices, we use our cleverness to tackle problems we would not dare take on before the age of computing and build systems with functionality limited only by our imaginations;
  >
  > *Complements and combines mathematical and engineering thinking*. Computer science inherently draws on mathematical thinking, given that, like all sciences, its formal foundations rest on mathematics. Computer science inherently draws on engineering thinking, given that we build systems that interact with the real world. The constraints of the underlying computing device force computer scientists to think computationally, not just mathematically. Being free to build virtual worlds enables us to engineer systems beyond the physical world;
  >
  > *Ideas, not artifacts*. It’s not just the software and hardware artifacts we produce that will be physically present everywhere and touch our lives all the time, it will be the computational concepts we use to approach and solve problems, manage our daily lives, and communicate and interact with other people; and
  >
  > *For everyone, everywhere*. Computational thinking will be a reality when it is so integral to human endeavors it disappears as an explicit philosophy.
  
  ---
  
  1: Source: BBC Bitesize - KS3 Computer Science - [Introduction to computational thinking](https://www.bbc.com/education/guides/zp92mp3/revision)
  
  2: [Source](https://www.cs.cmu.edu/%7E15110-s13/Wing06-ct.pdf): Jeannette M. Wing "[Computational Thinking](https://drive.google.com/file/d/1hRnNjUTyBwQu3kadX3unljw-iCZKEuk0/view?usp=sharing)" *Communications of the ACM.* [49 (3): 33.](https://dl.acm.org/citation.cfm?doid=1118178.1118215)
  
  > **Comments:**
  > **username_0**: I deleted my last comment as it came across differently to what I'd intended, sorry. I really appreciate this answer, and upvoted it, as it contains a lot of useful, relevant information. That said, the issue really is to do with programming specifically, rather than computational thinking, which is much more general. The issue we're having is that every child will spend five years learning to program (typically with Python or JS), and most will not become professional programmers, and it is not obvious what programming skills they need. We don't really know what an ideal outcome looks like.  
  > **username_4**: @CarlSmith Don't think of programming as the goal, think of is as the vehicle. Learning to program engages a different mental mode of analysis that is useful in _any_ endeavor. Read the entire [paper from Wing](https://drive.google.com/file/d/1hRnNjUTyBwQu3kadX3unljw-iCZKEuk0/view?usp=sharing), not just my excerpts, and it _might_ help with the "teaching programming to non-programmers" issue. Programming is replacing the now absent courses on rhetoric.  
  
  ---
  
  ### Answer by username_5 on 2018-04-12. Score: 3
  
  I would assume that when you are saying child, you mean under 10 year old.
  
  Then as @username_4 says, they would need to know how to break down problems into smaller problems, which would very beneficial for there way of solving problem in the future. That's a very big skill a lot of people are lacking.
  There's also one thing you need to learn is how to find your way out, this is a very important skill to learn from programming as a child : how to solve the problem using the tool you have.
  
  Theory is fine, but how to achieve that :
  
  I think the programming learning curve will be very deeply related to the child's math curve. So what could be a good way could be to show children how to implement what they are learning in math.
  
  > * you're learning addition, then a good problem to give them would be : How to do any addition only using +1 addition and a loop, you'll teach them the understanding of the for loop but also the very deep meaning of the addition
  > * Same goes with multiplication, how can you do it only using '+' and loops ?
  > * There's geometry that would be harder to do at the early start, but you can still use math lab and do some easy geometry problem, for instance drawing lines and gives them parameters so that they would find how to make them parallel or perpendicular, then automate that
  
  You can do that technique even at higher stage of the curriculum :
  
  > When learning trigonometry, just show them how it's working exactly by having animation where they can move around the trigonometry circle
  
  I think that people needs to reconnect with the very low level approach of science. Most of the time I see students just giving up in front of the problem they are offered, whereas most of time it's just a matter of thinking bigger and resolving problem one at a time with the tools you have. And I believe this is a critical skill in today's world, if you're not a problem solving person I don't see how you can fit in science jobs.
  
  I believe there's a lot of way to learn children the deep meaning of science using programming. You'll be surprised about how older teenager (over 16) don't even know the meaning of things like multiplication, addition and so on. Don't even thing about equations and in-equations. I believe programming will really help them understanding these concept for what they truly are.
  
  Then student would be able to break down all of those problem by using programming, which is very mechanical and that would help I guess with almost all abstraction behind math for at least the early levels. Then it would get more complicated but they will have the tools to cope with those problem.
  
  General purpose skills are just as GPIOs (general purpose inputs outputs) in embedded systems, in a way that it's only tools and skills and way of thinking that will help you deal with problems you're going to face. And programming and math are one of the best way to sharpen your critical way of thinking. In the end that's just teaching you're brain how to take a step back and analyze the situation/problem/project for what it is.
  
  > **Comments:**
  > **username_0**: The question regards children aged between 10 and 16. I was actually corrected on that point though. The children are 11 when they start programming. I don't think this answer really addresses the question.  
  > **username_5**: I edited  my answer to stick a little bit more to the question.  
  > **username_5**: "to study computer science from age 4", I don't really see the difference you do between computer science and programming, to me that's only to side of the very same coin.  
  
  ---
  
  ### Answer by username_6 on 2018-04-13. Score: 1
  
  There are three basic building blocks of programming: simple sequence, decisions, and iterations (loops).
  
  Any program can be built from these three basic constructs. They are like the six simple machines.
  
  The simple sequence is exactly what it says: statements executed in order. Decisions are (usually) prefaced with the word "if": if it is sunny, I will go to the skate park. Lastly, iterative constructs repeat the same code over and over, stopping based on a certain condition or a number of times: while the driver presses the gas, send fuel to the injectors.
  
  Children can learn and practice these constructs without writing code. For example, they can write directions on how to get from their school to their home. Food recipes are also good practice, to read and to write.
  
  These things, written instructions telling how to do something, are called algorithms. Once children become proficient at writing algorithms (and since they are starting so young, several years could be spent on just that aspect, using the spiral pedagocial model), then they can move to writing code. If they have made the algorithm development part of their thinking, then it will transfer easily to coding.
  
  
  ---
  
  