Answers.Body: <p>As I indicated in <a href="https://cseducators.stackexchange.com/questions/3881/is-there-some-meaningful-percentage-of-students-who-cant-learn-to-program">my other question</a>, I have found that there are always a few students who don't seem to <em>get</em> it.  This leads me to suspect that there may well be some small number of persons who are so disadvantaged that it may be effectively impossible for them to become strong programmers.</p>
  <p><em>However</em> here are a few words of cautions:</p>
  <ol>
  <li><p>Even if this is true, what of it? The fact that I have not figured out how to teach Johnny how to code does not necessarily mean Johnny is incapable, and I am still obligated to keep trying to find new ways to reach him.  If, in fact, he really is incapable, I will ultimately fail, but I have no way to distinguish between him and Samantha, who is entirely capable, but has yet to have some key piece of information <em>click into place</em>.</p>
  </li>
  <li><p>The number of people should be quite small.  For me it has run around 5-10% of students.  I work with a &quot;gifted&quot; population, so that number <em>might</em> be a little smaller than would be found in other populations, but it shouldn't be wildly different.  As you have pointed out, general brightness is a poor indicator.</p>
  <p>If you're finding that &gt;25% of your students are seriously struggling, then there are additional factors beyond &quot;student ability&quot; that you need to be examining.</p>
  </li>
  </ol>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-02-23T20:22:34.360Z
Answers.Text: Let me note that the "other" question here is specifically about programming. There is a lot more to CS than programming. Most CS folk do program, but there are a lot of other things. Say, theory.
Answers.UserDisplayName: Buffy
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-02-23T19:50:42.123Z
Answers.LastActivityDate: 2018-02-23T19:50:42.123Z
Answers.LastEditDate: 2020-06-18T08:36:57.023Z
Answers.UserDisplayName: Ben I.
Answers.Body: <p>I think this long running buzzword-laden alchemy metaphor is getting in the way of the issue, so you'll forgive me if I simply scrap all that and talk frankly.</p>
  
  <blockquote>
    <p>Can they and their students be mass-produced?</p>
  </blockquote>
  
  <p>No.</p>
  
  <p>Humans are terribly complex creatures. You can't just create one single process that would somehow magically be able to teach all people a skill.
  All you can ever do is to try to find a way that conveys the significant knowledge and concepts to them.</p>
  
  <p>Sometimes there will be techniques that work for multiple people, but given a room full of 30 random people, you will always need to try several different techniques before everyone can have some understanding of a subject, and even then some will comprehend it better than others.</p>
  
  <p>It's not an exact science, and it's not magic either, if anything it's closer to psychology.</p>
  
  <blockquote>
    <p>If we cannot dig it up, or transmute it from other material
    (schooling) or find a substitute, then what can be done?</p>
  </blockquote>
  
  <p>Autism doesn't make you magically good at programming, nor does being simply good at English or Maths, nor does overall intelligence. (Generally being intelligent does help somewhat, programming involves a lot of problem solving.)</p>
  
  <p>What really matters (in my eyes at least) are how much a person enjoys programming, how much drive they have to do it, and whether they have the skills to be good at it.</p>
  
  <p><strong>Enjoyment:</strong></p>
  
  <p>A lot of programmers are self taught*, i.e. they read books and articles and don't have a teacher directing them. Part of the reason for this is because most programmers enjoy programming and actively choose to do it, much like artists and writers often choose to do art or to write.</p>
  
  <p>You can't make someone enjoy programming. Some people simply won't find it enjoyable. If someone doesn't find it enjoyable or get any kind of satisfaction from writing a program, that's fine, maybe programming isn't what they should be doing. You can try to make it a bit more enjoyable for people who aren't as interested, but that's about all you can do. You can try to make a subject more relevant to them (e.g. I had no interest in maths until I needed it for programming) but there's no guarantee.</p>
  
  <p>Others will probably refute it, but I dare say that geekiness - being interested in video games, scifi and the like - does help here. That geekiness can be a powerful resource because it makes being able to program seem even cooler than it would otherwise.</p>
  
  <p>*  (According to StackOverflow's annual census/questionnaire.)</p>
  
  <p><strong>Drive:</strong></p>
  
  <p>One of the key differences between a good programmer and a bad programmer is what they do when they encounter a difficult problem. The bad programmer will say "I give up. This is stupid. I can't do this." or they'll just stare blankly into space. The good programmer will try harder, they'll try to tackle the problem from a different angle, they'll ask for someone else's insight and really think things through.</p>
  
  <p>Teaching students to relish the challenge and to not give up or run away is difficult. Especially when some students will take longer to solve certain problems. But even if they have to change their way of thinking about the problem or ask for some hints, that's ok. As long as they haven't just given up and avoided the problem, they'll make progress.</p>
  
  <p><strong>Skills:</strong></p>
  
  <p>Programming is a mix of many different skills and abilities.</p>
  
  <p>Abstract thought, problem solving, a bit of mathematical ability, a reasonable degree of linguistic ability and many other things.</p>
  
  <p>You don't have to be a master of all these things, but it helps to be particularly good at at least one of them and to be reasonably good at the others.</p>
  
  <p>I've seen programmers who are good at solving problems but always write messy code or get syntax wrong becuase their linguistic ability isn't as good. I've seen programmers who can write code and solve problems but are really bad at any kind of mathematical problem. I've seen people who can understand code but always write monoliths because they struggle with thinking in terms of class hierarchies and splitting the problem up into classes.</p>
  
  <p>All of them are capable of getting a job done, all of them are capable of programming, but those areas of weakness are what tips the scale enough to hold them back from being even better. I dare say even the most critically acclaimed programmers have their weaknesses in certain areas.</p>
  
  <p>But with all that said, programming has never been an exact science. There's usually more than one solution to a problem, some solutions are better than others, and some solutions are only subjectively better. There's a lot of debate around what's good programming style and whether style even matters if a program gets the job done, and I doubt that will ever stop.</p>
  
  <p>What this means in terms of teaching is that it helps to be able to recognise which aspect a student is lacking in so you know how to tackle their insufficiencies. If a student can explain the problem but can't put it into code, that's what must be tackled. If a student can explain a program shown to them or write a program that's described to them but can't come up with a solution when presented with a problem then that's what must be tackled. Et cetera.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-02-23T23:42:22.827Z
Answers.LastActivityDate: 2018-02-23T23:42:22.827Z
Answers.UserDisplayName: Pharap
Answers.Body: <p>One of my best CS students ever did her undergraduate work in Art. Another was, as a sideline and avocation, a ballet dancer. The best indicator is <kbd>D</kbd>esire. If a student wants something bad enough they will find a way to be a success at it unless circumstances make it impossible. </p>
  
  <p>Every student is different, so the question of <em>mass production</em> probably has a negative answer. </p>
  
  <p>At its best, teaching is a relationship between two people, a teacher and a learner. We make compromises for economic reasons, but there are negative consequences to all of the compromises. Socrates did it best. </p>
  
  <p>If you want to teach you have to work toward that ideal as much as can be managed. Even the massive classes (CS50) require a couple of hundred staff people, mostly tutors, to manage it. </p>
  
  <p>If you want to increase <kbd>D</kbd> in another you need to make things interesting and you have to give them a creative outlet as they define it themselves. Fear is a poor motivator, of course. </p>
  
  <p>Intelligence is overrated. An IQ of 150 and three dollars buys you a cup of java in most places. You/they/all can learn and can prosper if they see rewards that are worth spending the effort on and dedicating your <kbd>Li</kbd>fe to. </p>
  
  <p>A couple of other students who did some of the best work I saw that year  struggled for every idea - over and over - until success. </p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-02-23T19:16:22.947Z
Answers.LastActivityDate: 2018-02-23T19:16:22.947Z
Answers.UserDisplayName: Buffy
Body: <p>After a long search a colleague says that the only 'predictor' of computing ability seems to be <strong>Au</strong>tism, and that only with a low correlation (60%, whatever that means). But in our experience of teaching students with various disabilities, including mild forms of Asperger's, we find that even this is all over the map: One student was an amazing programmer but could not finish assignments because the temptation to always add more was so high, another could not see past tiny details that became fixations. Another could not generalize past results to new slightly different situations. Another could easily do the work, but was bored and uninterested.</p>
  
  <p>So it seems that this element <kbd>Au</kbd> is not the gold that it would seem to be, yet no other elements have turned up to predict success.</p>
  
  <p>My observations over 4 decades have been that many people can learn to do tasks involving computers which amount to <kbd>c</kbd>onfiguration or customization within a limited domain, but that conceiving of algorithms or new data types is not going to come to them easily. (And if work or school is far too hard, one will not be successful.) In fact, a lot of my early programming career was devoted to converting tasks from programming to customization, just so that we could free up our programmers to do the complex stuff. What causes or indicates this difference in people - some easily learn programming, others not? Is there another element at stake, like <kbd>In</kbd>telligence? But there is no definition or agreement on that either...</p>
  
  <p>I am thinking that 'real' programming ability is a "rare earth", and not something widely found, yet the modern world seems to require increasing numbers of this material (so many jobs going unfilled, projects failing, etc.) If we cannot dig it up, or transmute it from other material (schooling) or find a substitute, then what can be done? This site itself seems to be faltering from lack of participation, which suggests that <kbd>Te</kbd>achers are unusual also. Can they and their students be mass-produced?</p>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-02-23T18:18:28.347Z
Comments.Text: Sorry, but I'm not sure I understand the question. What are you asking? Can you summarize it in one or two sentences?
Comments.UserDisplayName: Kevin Workman
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-02-23T18:22:26.440Z
Comments.Text: Possibly related: https://cseducators.stackexchange.com/questions/3881/is-there-some-meaningful-percentage-of-students-who-cant-learn-to-program
Comments.UserDisplayName: Kevin Workman
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-02-23T19:57:45.097Z
Comments.Text: Welcome to CSEducators. A thought provoking question - assuming it _is_ a question.
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-02-23T21:14:25.300Z
Comments.Text: It would be great, also, if you would register for the site and come visit with the regulars in the chatroom: https://chat.stackexchange.com/rooms/59174/the-classroom
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-02-24T02:51:25.013Z
Comments.Text: I've voted to close this question because, as other commenters have mentioned, it's not very clear what you're asking. As far as I can tell, you're asking about what good predictors of programming sucess, which is quite broad. As @Buffy mentioned, we'd be happy to help you clarify in [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom).
Comments.UserDisplayName: thesecretmaster
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2018-03-13T16:35:34.667Z
Comments.Text: Maybe this will answer your question: https://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve
Comments.UserDisplayName: ctrl-alt-delor
Tags: <student-motivation>
Title: The Fifth Element or What Elements Are Correlated With CS Success and Does It Matter?
ThreadText: # The Fifth Element or What Elements Are Correlated With CS Success and Does It Matter?
  
  (Asked by: username_0 on 2018-02-23)
  
  After a long search a colleague says that the only 'predictor' of computing ability seems to be **Au**tism, and that only with a low correlation (60%, whatever that means). But in our experience of teaching students with various disabilities, including mild forms of Asperger's, we find that even this is all over the map: One student was an amazing programmer but could not finish assignments because the temptation to always add more was so high, another could not see past tiny details that became fixations. Another could not generalize past results to new slightly different situations. Another could easily do the work, but was bored and uninterested.
  
  So it seems that this element `Au` is not the gold that it would seem to be, yet no other elements have turned up to predict success.
  
  My observations over 4 decades have been that many people can learn to do tasks involving computers which amount to `c`onfiguration or customization within a limited domain, but that conceiving of algorithms or new data types is not going to come to them easily. (And if work or school is far too hard, one will not be successful.) In fact, a lot of my early programming career was devoted to converting tasks from programming to customization, just so that we could free up our programmers to do the complex stuff. What causes or indicates this difference in people - some easily learn programming, others not? Is there another element at stake, like `In`telligence? But there is no definition or agreement on that either...
  
  I am thinking that 'real' programming ability is a "rare earth", and not something widely found, yet the modern world seems to require increasing numbers of this material (so many jobs going unfilled, projects failing, etc.) If we cannot dig it up, or transmute it from other material (schooling) or find a substitute, then what can be done? This site itself seems to be faltering from lack of participation, which suggests that `Te`achers are unusual also. Can they and their students be mass-produced?
  
  **Tags:** student-motivation
  
  > **Comments:**
  > **username_1**: Sorry, but I'm not sure I understand the question. What are you asking? Can you summarize it in one or two sentences?  
  > **username_1**: Possibly related: https://cseducators.stackexchange.com/questions/3881/is-there-some-meaningful-percentage-of-students-who-cant-learn-to-program  
  > **username_2**: Welcome to CSEducators. A thought provoking question - assuming it _is_ a question.  
  > **username_2**: It would be great, also, if you would register for the site and come visit with the regulars in the chatroom: https://chat.stackexchange.com/rooms/59174/the-classroom  
  > **username_3**: I've voted to close this question because, as other commenters have mentioned, it's not very clear what you're asking. As far as I can tell, you're asking about what good predictors of programming sucess, which is quite broad. As @username_2 mentioned, we'd be happy to help you clarify in [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom).  
  > **username_4**: Maybe this will answer your question: https://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve  
  
  ---
  
  ## 3 answers
  
  ### Answer by username_5 on 2018-02-23. Score: 6
  
  As I indicated in [my other question](https://cseducators.stackexchange.com/questions/3881/is-there-some-meaningful-percentage-of-students-who-cant-learn-to-program), I have found that there are always a few students who don't seem to *get* it. This leads me to suspect that there may well be some small number of persons who are so disadvantaged that it may be effectively impossible for them to become strong programmers.
  
  *However* here are a few words of cautions:
  
  1. Even if this is true, what of it? The fact that I have not figured out how to teach Johnny how to code does not necessarily mean Johnny is incapable, and I am still obligated to keep trying to find new ways to reach him. If, in fact, he really is incapable, I will ultimately fail, but I have no way to distinguish between him and Samantha, who is entirely capable, but has yet to have some key piece of information *click into place*.
  2. The number of people should be quite small. For me it has run around 5-10% of students. I work with a "gifted" population, so that number *might* be a little smaller than would be found in other populations, but it shouldn't be wildly different. As you have pointed out, general brightness is a poor indicator.
  
     If you're finding that >25% of your students are seriously struggling, then there are additional factors beyond "student ability" that you need to be examining.
  
  > **Comments:**
  > **username_2**: Let me note that the "other" question here is specifically about programming. There is a lot more to CS than programming. Most CS folk do program, but there are a lot of other things. Say, theory.  
  
  ---
  
  ### Answer by username_6 on 2018-02-23. Score: 6
  
  I think this long running buzzword-laden alchemy metaphor is getting in the way of the issue, so you'll forgive me if I simply scrap all that and talk frankly.
  
  > Can they and their students be mass-produced?
  
  No.
  
  Humans are terribly complex creatures. You can't just create one single process that would somehow magically be able to teach all people a skill.
  All you can ever do is to try to find a way that conveys the significant knowledge and concepts to them.
  
  Sometimes there will be techniques that work for multiple people, but given a room full of 30 random people, you will always need to try several different techniques before everyone can have some understanding of a subject, and even then some will comprehend it better than others.
  
  It's not an exact science, and it's not magic either, if anything it's closer to psychology.
  
  > If we cannot dig it up, or transmute it from other material
  > (schooling) or find a substitute, then what can be done?
  
  Autism doesn't make you magically good at programming, nor does being simply good at English or Maths, nor does overall intelligence. (Generally being intelligent does help somewhat, programming involves a lot of problem solving.)
  
  What really matters (in my eyes at least) are how much a person enjoys programming, how much drive they have to do it, and whether they have the skills to be good at it.
  
  **Enjoyment:**
  
  A lot of programmers are self taught\*, i.e. they read books and articles and don't have a teacher directing them. Part of the reason for this is because most programmers enjoy programming and actively choose to do it, much like artists and writers often choose to do art or to write.
  
  You can't make someone enjoy programming. Some people simply won't find it enjoyable. If someone doesn't find it enjoyable or get any kind of satisfaction from writing a program, that's fine, maybe programming isn't what they should be doing. You can try to make it a bit more enjoyable for people who aren't as interested, but that's about all you can do. You can try to make a subject more relevant to them (e.g. I had no interest in maths until I needed it for programming) but there's no guarantee.
  
  Others will probably refute it, but I dare say that geekiness - being interested in video games, scifi and the like - does help here. That geekiness can be a powerful resource because it makes being able to program seem even cooler than it would otherwise.
  
  \* (According to StackOverflow's annual census/questionnaire.)
  
  **Drive:**
  
  One of the key differences between a good programmer and a bad programmer is what they do when they encounter a difficult problem. The bad programmer will say "I give up. This is stupid. I can't do this." or they'll just stare blankly into space. The good programmer will try harder, they'll try to tackle the problem from a different angle, they'll ask for someone else's insight and really think things through.
  
  Teaching students to relish the challenge and to not give up or run away is difficult. Especially when some students will take longer to solve certain problems. But even if they have to change their way of thinking about the problem or ask for some hints, that's ok. As long as they haven't just given up and avoided the problem, they'll make progress.
  
  **Skills:**
  
  Programming is a mix of many different skills and abilities.
  
  Abstract thought, problem solving, a bit of mathematical ability, a reasonable degree of linguistic ability and many other things.
  
  You don't have to be a master of all these things, but it helps to be particularly good at at least one of them and to be reasonably good at the others.
  
  I've seen programmers who are good at solving problems but always write messy code or get syntax wrong becuase their linguistic ability isn't as good. I've seen programmers who can write code and solve problems but are really bad at any kind of mathematical problem. I've seen people who can understand code but always write monoliths because they struggle with thinking in terms of class hierarchies and splitting the problem up into classes.
  
  All of them are capable of getting a job done, all of them are capable of programming, but those areas of weakness are what tips the scale enough to hold them back from being even better. I dare say even the most critically acclaimed programmers have their weaknesses in certain areas.
  
  But with all that said, programming has never been an exact science. There's usually more than one solution to a problem, some solutions are better than others, and some solutions are only subjectively better. There's a lot of debate around what's good programming style and whether style even matters if a program gets the job done, and I doubt that will ever stop.
  
  What this means in terms of teaching is that it helps to be able to recognise which aspect a student is lacking in so you know how to tackle their insufficiencies. If a student can explain the problem but can't put it into code, that's what must be tackled. If a student can explain a program shown to them or write a program that's described to them but can't come up with a solution when presented with a problem then that's what must be tackled. Et cetera.
  
  
  ---
  
  ### Answer by username_2 on 2018-02-23. Score: 4
  
  One of my best CS students ever did her undergraduate work in Art. Another was, as a sideline and avocation, a ballet dancer. The best indicator is `D`esire. If a student wants something bad enough they will find a way to be a success at it unless circumstances make it impossible.
  
  Every student is different, so the question of *mass production* probably has a negative answer.
  
  At its best, teaching is a relationship between two people, a teacher and a learner. We make compromises for economic reasons, but there are negative consequences to all of the compromises. Socrates did it best.
  
  If you want to teach you have to work toward that ideal as much as can be managed. Even the massive classes (CS50) require a couple of hundred staff people, mostly tutors, to manage it.
  
  If you want to increase `D` in another you need to make things interesting and you have to give them a creative outlet as they define it themselves. Fear is a poor motivator, of course.
  
  Intelligence is overrated. An IQ of 150 and three dollars buys you a cup of java in most places. You/they/all can learn and can prosper if they see rewards that are worth spending the effort on and dedicating your `Li`fe to.
  
  A couple of other students who did some of the best work I saw that year struggled for every idea - over and over - until success.
  
  
  ---
  
  