Related: some people believe that programming talent is very innate and people can be sharply separated into those who can and cannot learn to write code. Previously on LW here, and I think there was an earlier more substantive post but I can’t find it now. See also this. Gwern collected some further evidence and counterevidence.
It was probably mentioned in the earlier discussions, but I believe the “two humps” pattern can easily be explained by bad teaching. If it hapens in the whole profession, maybe no one has yet discovered a good way to teach it, because most of the people who understand the topic were autodidacts.
As a model, imagine that a programming ability is a number. You come to school with some value between 0 and 10. A teacher can give you +20 bonus. Problem is, the teacher cannot explain the most simple stuff which you need to get to level 5; maybe because it is so obvious to the teacher that they can’t understand how specifically someone else would not already understand it. So the kids with starting values between 0 and 4 can’t follow the lessons and don’t learn anything, while the kids with starting values 5 to 10 get the +20 bonus. At the end, you get the “two humps”; one group with values 0 to 4, another group with values 25 to 30. -- And the worst part is that this belief creates a spiral, because when everyone observed the “two humps” at the adult people, then if some student with starting value 4 does not understand the lesson, we don’t feel a need to fix this; obviously they were just not meant to understand programming.
What are those starting concepts that some people get and some people don’t? Probably things like “the computer is just a mechanical thing which follows some mechanical rules; it has no mind, and it doesn’t really understand anything”, but you need to feel it in the gut level. (Maybe aspies have a natural advantage here, because they don’t expect the computer to have a mind.) It could probably help to play with some simple mechanical machines first, where the kids could observe the moving parts. In other words, maybe we don’t only need specialized educational software, but also hardware. A computer in a form of a black box is already too big piece of magic, prone to be anthropomorphized. You should probably start with a mechanical typewriter and a mechanical calculator.
If it hapens in the whole profession, maybe no one has yet discovered a good way to teach it, because most of the people who understand the topic were autodidacts.
A lot of effort has gone into trying to invent ways of teaching programming to complete newbies. If really no-one has succeeded at all, then maybe it’s time to seriously consider that some people can’t be taught.
A claim that someone cannot be taught by any possible intervention would be a very strong claim indeed, and almost certainly false. But a claim that no-one knows how to teach this even though a lot of people have tried and failed for a long time now, makes predictions pretty similar to the theory that some people simply can’t be taught.
As a model, imagine that a programming ability is a number. You come to school with some value between 0 and 10. A teacher can give you +20 bonus.
This model matches the known facts, but it doesn’t tell us what we really want to know. What determines what value people start out with? Does everyone start out with 0 and some people increase their value in unknown, perhaps spontaneous ways? Or are some people just born with high values and they’ll arrive at 5 or 10 no matter what they do, while others will stay at 0 no matter what?
I don’t know if educators have tried teaching the concepts you suggest explicitly.
A lot of effort has gone into trying to invent ways of teaching programming to complete newbies. If really no-one has succeeded at all, then maybe it’s time to seriously consider that some people can’t be taught.
The researcher didn’t distinguish the conjectured cause (bimodal differences in students’ ability to form models of computation) from other possible causes (just to name one — some students are more confident, and computing classes reward confidence).
Clearly further research is needed. It should probably not assume that programmers are magic special people, no matter how appealing that notion is to many programmers.
Once upon a time, it would have been a radical proposition to suggest that even 25% of the population might one day be able to read and write. Reading and writing were the province of magic special people like scribes and priests. Today, we count on almost every adult being able to read traffic signs, recipes, bills, emails, and so on — even the ones who do not do “serious reading”.
A problem with programming education is that it is frequently unclear what the point of it is. Is it to identify those students who can learn to get jobs as programmers in industry or research? Is it to improve students’ ability to control the technology that is a greater and greater part of their world? Is it to teach the mathematical concepts of elementary computer science?
We know why we teach kids to read. The wonders of literature aside, we know full well that they cannot get on as competent adults if they are literate. Literacy was not a necessity for most people two thousand years ago; it is a necessity for most people today. Will programming ever become that sort of necessity?
Literacy was not a necessity for most people two thousand years ago; it is a necessity for most people today. Will programming ever become that sort of necessity?
That was the thinking at the dawn of personal computing, back in the 80s.
You think the general population the future will hacking code into text editors? That isn’t even ubiquitous in the industry, since you can call yourself a developer if you only know how to us graphical tools. They’ll be doing something, but it will be analogous to electronic music production as opposed .tk p.suing an instrument.
My bet would be on childhood experience. For example the kinds of toys used. I would predict a positive effect of various construction sets. It’s like “Reductionism for Kindergarten”. :D
The silent pre-programming knowledge could be things like: “this toy is interacted with by placing its pieces and observing what they do (or modelling in one’s mind what they would do), instead of e.g. talking to the toy and pretending the toy understands”.
An anecdatum. The only construction set I had as a boy was lego, and my little sister played with it too. As far as I know, there was no feeling that it was my toy only. We’re five years apart so all my stuff got passed down or shared.
My sister’s very clever. We both did degrees in the same place, mine maths and hers archaeology.
She’s never shown the slightest interest in programming or maths, whereas I remember the thunderbolt-strike of seeing my first computer program at ten years old, long before I’d ever actually seen a computer. I nagged my parents obsessively for one until they gave in, and maths and programming have been my hobby and my profession ever since.
I distinctly remember trying to show Liz how to use my computer, and she just wasn’t interested.
My parents are entirely non-mathematical. They’re both educated people, but artsy. Mum must have some natural talent, because she showed me how to do fractions before I went to school, but I think she dropped maths at sixteen. I think it’s fair to say that Dad hates and fears it. Neither of them knew the first thing about computers when I was little. They just weren’t a thing that people had in the 70s, any more than hovercraft were.
Every attempt my school made to teach programming was utterly pointless for me, I either already knew what they were trying to teach or got it in a few seconds.
The only attempts to teach programming that have ever held my attention or shown me anything interesting are SICP, and the algorithms and automata courses on Coursera, all of which I passed with near-perfect scores, and did for fun.
So from personal experience I believe in ‘natural talent’ in programming. And I don’t believe it’s got anything to do with upbringing, except that our house was quiet and educated.
You’d have had to work quite hard to stop me becoming a programmer. And I don’t think anything in my background was in favour of me becoming one. And anything that was should have favoured my sister too.
I’ve got two friends who are talented maths graduates, and somehow both of them had managed to get through their first degrees without ever writing programs. Both of them asked me to teach them.
The first one I’ve made several attempts with. He sort-of gets it, but he doesn’t see why you’d want to. A couple of times he’s said ‘Oh yes, I get it, sort of like experimental mathematics’. But any time he gets a problem about numbers he tries to solve it with pen and paper, even when it looks obvious to me that a computer will be a profitable attack.
The second, I spent about two hours showing him how to get to “hello world” in python and how to fetch a web page. Five days later he shows me a program he’s written to screen-scrape betfair and place trades automatically when it spots arbitrage opportunities. I was literally speechless.
So I reckon that whatever-makes-you-a-mathematician and whatever-makes-you-a-programmer might be different things too. Which is actually a bit weird. They feel the same to me.
A lot of effort has gone into trying to invent ways of teaching programming to complete newbies. If really no-one has succeeded at all,
That seems like rather a strong claim. Everyone who can program now was a complete newbie at some point. Presumably they did not learn by a bolt of divine inspiration out of the blue sky.
The sources linked above claim that some can be taught, and some (probably most of the population) can’t, no matter what you do. And of those who can learn, many become autodidacts in a suitable environment.
Of course they don’t reinvent programming themselves, they do learn it from others, but the same could be said of any skill or knowledge. And yet there are skills which clearly have very strong inborn dispositions. It’s being claimed that programming is such a skill, and an extreme one at that, with a sharply bimodal distribution.
It was probably mentioned in the earlier discussions, but I believe the “two humps” pattern can easily be explained by bad teaching. If it hapens in the whole profession, maybe no one has yet discovered a good way to teach it, because most of the people who understand the topic were autodidacts.
Bad teaching? There’s an even simpler explanation (at least regarding programming): autodidacts with previous experience versus regular students without previous experience. The fact that the teaching is often geared towards the students with previous experience and suffers from a major tone of “Why don’t you know this already?” throughout the first year or two of undergrad doesn’t help a bit.
“I can teach you this only if you already know it” seems like bad teaching to me.
Yes, that is the definition of bad teaching. My assertion is that CS departments have gotten so damn complacent about receiving a steady stream of autodidact programmers as their undergrad entrants that they’ve stopped bothering with actually teaching low-level courses. They assign work, they expect to receive finished work, they grade the finished work, but it all relies on the clandestine assumption that the “good students” could already do the work when they entered the classroom.
Related: some people believe that programming talent is very innate and people can be sharply separated into those who can and cannot learn to write code. Previously on LW here, and I think there was an earlier more substantive post but I can’t find it now. See also this. Gwern collected some further evidence and counterevidence.
It was probably mentioned in the earlier discussions, but I believe the “two humps” pattern can easily be explained by bad teaching. If it hapens in the whole profession, maybe no one has yet discovered a good way to teach it, because most of the people who understand the topic were autodidacts.
As a model, imagine that a programming ability is a number. You come to school with some value between 0 and 10. A teacher can give you +20 bonus. Problem is, the teacher cannot explain the most simple stuff which you need to get to level 5; maybe because it is so obvious to the teacher that they can’t understand how specifically someone else would not already understand it. So the kids with starting values between 0 and 4 can’t follow the lessons and don’t learn anything, while the kids with starting values 5 to 10 get the +20 bonus. At the end, you get the “two humps”; one group with values 0 to 4, another group with values 25 to 30. -- And the worst part is that this belief creates a spiral, because when everyone observed the “two humps” at the adult people, then if some student with starting value 4 does not understand the lesson, we don’t feel a need to fix this; obviously they were just not meant to understand programming.
What are those starting concepts that some people get and some people don’t? Probably things like “the computer is just a mechanical thing which follows some mechanical rules; it has no mind, and it doesn’t really understand anything”, but you need to feel it in the gut level. (Maybe aspies have a natural advantage here, because they don’t expect the computer to have a mind.) It could probably help to play with some simple mechanical machines first, where the kids could observe the moving parts. In other words, maybe we don’t only need specialized educational software, but also hardware. A computer in a form of a black box is already too big piece of magic, prone to be anthropomorphized. You should probably start with a mechanical typewriter and a mechanical calculator.
A lot of effort has gone into trying to invent ways of teaching programming to complete newbies. If really no-one has succeeded at all, then maybe it’s time to seriously consider that some people can’t be taught.
A claim that someone cannot be taught by any possible intervention would be a very strong claim indeed, and almost certainly false. But a claim that no-one knows how to teach this even though a lot of people have tried and failed for a long time now, makes predictions pretty similar to the theory that some people simply can’t be taught.
This model matches the known facts, but it doesn’t tell us what we really want to know. What determines what value people start out with? Does everyone start out with 0 and some people increase their value in unknown, perhaps spontaneous ways? Or are some people just born with high values and they’ll arrive at 5 or 10 no matter what they do, while others will stay at 0 no matter what?
I don’t know if educators have tried teaching the concepts you suggest explicitly.
http://www.eis.mdx.ac.uk/research/PhDArea/saeed/
The researcher didn’t distinguish the conjectured cause (bimodal differences in students’ ability to form models of computation) from other possible causes (just to name one — some students are more confident, and computing classes reward confidence).
And the researcher’s advisor later described his enthusiasm for the study as “prescription-drug induced over-hyping” of the results …
Clearly further research is needed. It should probably not assume that programmers are magic special people, no matter how appealing that notion is to many programmers.
Once upon a time, it would have been a radical proposition to suggest that even 25% of the population might one day be able to read and write. Reading and writing were the province of magic special people like scribes and priests. Today, we count on almost every adult being able to read traffic signs, recipes, bills, emails, and so on — even the ones who do not do “serious reading”.
A problem with programming education is that it is frequently unclear what the point of it is. Is it to identify those students who can learn to get jobs as programmers in industry or research? Is it to improve students’ ability to control the technology that is a greater and greater part of their world? Is it to teach the mathematical concepts of elementary computer science?
We know why we teach kids to read. The wonders of literature aside, we know full well that they cannot get on as competent adults if they are literate. Literacy was not a necessity for most people two thousand years ago; it is a necessity for most people today. Will programming ever become that sort of necessity?
That was the thinking at the dawn of personal computing, back in the 80s.
Turns out the answer is “no”.
“Not yet.”
You think the general population the future will hacking code into text editors? That isn’t even ubiquitous in the industry, since you can call yourself a developer if you only know how to us graphical tools. They’ll be doing something, but it will be analogous to electronic music production as opposed .tk p.suing an instrument.
Computing hasn’t even existed for a century yet. Give it time.
There will come a day when ordinary educated folks quicksort their playing cards when they want to put them in order. :)
I insertion sort. :P
Doesn’t almost everyone? I’ve always heard that as the inspiration for insertion sorting.
No way, I pigeonhole sort.
My bet would be on childhood experience. For example the kinds of toys used. I would predict a positive effect of various construction sets. It’s like “Reductionism for Kindergarten”. :D
The silent pre-programming knowledge could be things like: “this toy is interacted with by placing its pieces and observing what they do (or modelling in one’s mind what they would do), instead of e.g. talking to the toy and pretending the toy understands”.
An anecdatum. The only construction set I had as a boy was lego, and my little sister played with it too. As far as I know, there was no feeling that it was my toy only. We’re five years apart so all my stuff got passed down or shared.
My sister’s very clever. We both did degrees in the same place, mine maths and hers archaeology.
She’s never shown the slightest interest in programming or maths, whereas I remember the thunderbolt-strike of seeing my first computer program at ten years old, long before I’d ever actually seen a computer. I nagged my parents obsessively for one until they gave in, and maths and programming have been my hobby and my profession ever since.
I distinctly remember trying to show Liz how to use my computer, and she just wasn’t interested.
My parents are entirely non-mathematical. They’re both educated people, but artsy. Mum must have some natural talent, because she showed me how to do fractions before I went to school, but I think she dropped maths at sixteen. I think it’s fair to say that Dad hates and fears it. Neither of them knew the first thing about computers when I was little. They just weren’t a thing that people had in the 70s, any more than hovercraft were.
Every attempt my school made to teach programming was utterly pointless for me, I either already knew what they were trying to teach or got it in a few seconds.
The only attempts to teach programming that have ever held my attention or shown me anything interesting are SICP, and the algorithms and automata courses on Coursera, all of which I passed with near-perfect scores, and did for fun.
So from personal experience I believe in ‘natural talent’ in programming. And I don’t believe it’s got anything to do with upbringing, except that our house was quiet and educated.
You’d have had to work quite hard to stop me becoming a programmer. And I don’t think anything in my background was in favour of me becoming one. And anything that was should have favoured my sister too.
And another anecdote:
I’ve got two friends who are talented maths graduates, and somehow both of them had managed to get through their first degrees without ever writing programs. Both of them asked me to teach them.
The first one I’ve made several attempts with. He sort-of gets it, but he doesn’t see why you’d want to. A couple of times he’s said ‘Oh yes, I get it, sort of like experimental mathematics’. But any time he gets a problem about numbers he tries to solve it with pen and paper, even when it looks obvious to me that a computer will be a profitable attack.
The second, I spent about two hours showing him how to get to “hello world” in python and how to fetch a web page. Five days later he shows me a program he’s written to screen-scrape betfair and place trades automatically when it spots arbitrage opportunities. I was literally speechless.
So I reckon that whatever-makes-you-a-mathematician and whatever-makes-you-a-programmer might be different things too. Which is actually a bit weird. They feel the same to me.
That seems like rather a strong claim. Everyone who can program now was a complete newbie at some point. Presumably they did not learn by a bolt of divine inspiration out of the blue sky.
The sources linked above claim that some can be taught, and some (probably most of the population) can’t, no matter what you do. And of those who can learn, many become autodidacts in a suitable environment.
Of course they don’t reinvent programming themselves, they do learn it from others, but the same could be said of any skill or knowledge. And yet there are skills which clearly have very strong inborn dispositions. It’s being claimed that programming is such a skill, and an extreme one at that, with a sharply bimodal distribution.
Bad teaching? There’s an even simpler explanation (at least regarding programming): autodidacts with previous experience versus regular students without previous experience. The fact that the teaching is often geared towards the students with previous experience and suffers from a major tone of “Why don’t you know this already?” throughout the first year or two of undergrad doesn’t help a bit.
“I can teach you this only if you already know it” seems like bad teaching to me. Not sure if we are not just debating definitions here.
I don’t think we’re even debating.
Yes, that is the definition of bad teaching. My assertion is that CS departments have gotten so damn complacent about receiving a steady stream of autodidact programmers as their undergrad entrants that they’ve stopped bothering with actually teaching low-level courses. They assign work, they expect to receive finished work, they grade the finished work, but it all relies on the clandestine assumption that the “good students” could already do the work when they entered the classroom.
Exactly.