Why do you care about it in the first place? Also what is your definition of good programmer? Just make a function? Make a class? Make a big app?
IMO you don't need to learn too much math before programming to be a good programmer. Basic operations are good enough, if you need more you learn as you go, you'll never know what you need. Lazy learning, like lazy variable loading.
The test you are making are more like problem solving which is closer to what programming is and not math. Of course basic math (+, -, /, *), but what it really matters is knowing what operations to do. The operation itself is the easier part.
A better test would be to make a chose between which approach to take to solve a problem and explain the rational behind. That is what will define a good programmer.
Also what better indicator you want than programming itself? You'll never make a choice based on this.
Also one thing is to figure out how to solve "here are 3 consecutive integers with a sum of 69. What are they?" than solving "here are X consecutive integers with a sum of Y. What are they?". Same in "Adriana’s age is 1/3rd of her dad’s age. If her dad is 36 years old, how old is Adriana?" vs "W’s age is X of Y’s age. If Y is Z years old, how old is W?". The complexity increases a lot.
First, the algorithmic part of programming is a lot like doing algebra. So much so that algebra is an important part of any serious CS syllabus. Clearly "writing a function or a class" is not the skill they are testing here, but problem-solving.
Knowing how to solve simple algebraic problems engages your "problem solving" skills in a similar way as solving something by writing a program. Note that algebra is not "basic math (+,-,/,*)" like you said. Algebra, like programming, requires the ability to understand and write abstractions, and to figure out how to approach a problem.
> Also what better indicator you want than programming itself?
They clearly want to establish a correlation between something else and programming. This is interesting in itself.
>why do you care about it in the first place? Also what is your definition of good programmer?
Is this a joke? They care because they are selecting applicants to a programming boot camp and want to select the ones more likely to be successful. I suppose they could make all of the applicants learn to program and select the best ones, but there could be issues with that. And they are pretty clear that they are defining 'good programmer' as 'good outcome in their course'.
The thing is that they aren't saying that algebra learning causes good programming. They're saying it predicts it. They don't delve into underlying factors, but general mental ability is certainly implied.
In other words, an algebra test just acted as a noisy, imprecise measurement of general mental ability.
For an article about math, they seem surprisingly weak at differentiating between causation and correlation.
It’s fairly common for incoming Computer Science majors to ask the question, “Why do I have to learn all this math if I just want to learn to program?” The correlation above suggests a possible answer: The ability to understand basic mathematics is likely correlated with the ability to “think algorithmically,” which is well-known to be a foundational skill for expert programmers.
If it's just a weak (as the chart suggests) correlation, it doesn't mean learning one will make you better at the other. And if you do assume causality - it can go either way. Perhaps learning math makes you better at programming. Perhaps learning programming makes you better at math.
My 2 cents... It's more complicated because there are other things involved. Perhaps it's the nerd gene that makes people who like computers also more likely to play D&D and be in band. (I was a card carrying member) Does one of these 5 variables cause the other, or are they all part of the same thing?
They may be bad at differentiating causation and correlation, however, if they're just using the results as a way to try and predict which candidates will do better in the classes, this seems like a pretty good application. They're not going around teaching people algebra, based on this hypothesis -- they're recruiting potentially good programmers.
However, it is correct that educators would need to do a little more research if they want to try and apply these results to a classroom.
Precisely what I thought as soon as I read the study, simply because I was terrible at math generally (and algebra specifically) before I studied CS. Afterwords, it turns out I'm fine at math generally (and have a bit of ability for algebra). The problem I had was not the content matter but the teaching paradigm.
A much more interesting experiment would be to add the algebra test back into the end of the program and see if there is improvement and how that correlates (or doesn't) to programming competence.
Should if you are going into a CE or CS course not have learnt to code at school before going to university English lit or classics students are expected to be able to read.
I learnt to program when I was 13 and that was in the middle stream at my upper school
If there is one thing that has always bothered me, is people evaluating student's prowess in "Computer Science" (which is not programming, shame on you) by having them learn your normal run-of-the-mill programming language/paradigm like Javascript, Python, PHP and whatnot and then claim they are not apt to program because they cannot solve problems or handle variables, mutability, etc etc.
There are A LOT of different programming/automation paradigms in the world, lots of different languages, declarative, functional, OOP, imperative, logic, etc etc, maybe some of these students just can't get the convoluted mutable and unsafe structure of a Python or Java program but they might grok and appreciate the safety and simplicity of ML/Haskell or the flexibility of Lisp, why would you turn them down in such a way or force them through a path they don't really need to go through?
During my first year of Bachelor Computer Science at University we had introduction to programming in Scheme. It was a mind-expanding experience to me, I already knew how to program in C, Java, C++ and C# with a bit of PHP/Javascript back then and I was much ahead most of my peers but still I sat at the computer, trying to earn this alien language to me, and luckily I was humble enough to force myself through it and adapt my mind to a different paradigm. I know for certain that a lot of my friends and colleagues who already knew how to program struggled hard on that exam and some had to re-take it the following year (Which was unfortunately changed to C++ and they managed to pass without troubles) simply because they didn't think Scheme was a "real" programming language or useful at all. It was just too different from their previous experience.
What's even more interesting, I know some people from that class who had never touched a programming language before and weren't particularly strong at math. Those people are the ones I recall enjoying the course the most, they found it the easiest among all the other courses we had and passed it with excellent grades. Simply because their mind was apparently better wired for such paradigm and they had no preconceptions or prejudices that prevented them from learning it properly.
So my bottom line is, what makes you think that some people might not just have a "differently wired" brain that makes them think more easily with a different non-imperative paradigm for programming?
"Differently wired" wired brain is the ability to manipulate abstractions. Which is required no matter what kind of programming language you use. And it also required for doing algebra.
Recursion is as hard as mutable state to grasp if not harder.
We might find a few people who can do one thing sligtly better than the other one, but not complete blanks.
The scatter plots don't show that strong a correlation.
From the test questions, this isn't an "algebra test". It's a word problem decoding test. That's appropriate to programming, where you have to go from an informal specification of the problem to a formal one.
It's only the middling scores that aren't very predictive. Scores >=80% and <=60% are strongly predictive. Only 4/17 that scored 80% or higher scored lower than a 3 on programming ability. Only 1/13 that scored 60% or lower scored a 3 or higher on programming ability.
Does a "simple algebra test" correlate with IQ?
Does "programming aptitude" (whatever the hell that is meant to be) correlate with IQ?
The headline would then follow.
I know this is a socially unacceptable opinion but I think those correlations exist.
Not quite. X can correlate with Y, and Y can correlate with Z without X and Z having a correlation. As a simple toy example let X and Z be independently taken from the standard uniform distribution, and let Y = X + Z.
A lot of things "correlate with IQ" to varying degrees. Education level, length of sleep, size of vocabulary, etc. I don't understand why the relationships you suggested would be socially unacceptable.
But just because those two things correlate with IQ (which is probably true, so let's just grant them as true even without evidence for the sake of argument), that does not imply that they are sufficiently strongly correlated with each other to be interesting for hiring purposes.
To see my point, consider that being red is correlated with being purple, and being blue is correlated with being purple, but being red is not correlated with being blue. (at least not without evidence).
I don't think the existence of those correlations depends on what you think. Har har. Suggesting a correlation is a statistical hypothesis that is testable but not really debatable.
I don't think such a hypothesis is awkward but I doubt high IQ as an excellent predictor for an individuals performance in tasks that are not IQ tests. As a layman when it comes to psychology I think IQ measures some things but the way the brain works, no real world task a person does is exactly like those IQ tests.
A brain is not a CPU and an IQ is not its clock frequency.
Aside from being wrong and indeed often disparaged, this still common attitude has the unfortunate effect of helping to exclude those who can make an excellent contribution to a programming team but who approach programming from a different point of view - for example, I have a friend who's working quite competently in the field and has general block with respect to math but came to programming through music and graphic design.
This article is built on a fundamentally invalid premise:
> 30-60% of CS college majors have failed their Introduction to Computer Science course because they simply could not learn to program.
This "You either have it or you don't" mindset is strikingly elitist. I simply don't buy the idea that there are people out there who absolutely cannot learn to program. I mean, put someone on a desert island and tell them they can't leave until they can write a program that uses a linked list, and I'm pretty sure most people would be able to get off the island eventually.
Of course, that doesn't mean that some people can learn to code more easily than others. But I'd be willing to posit that the vast majority of people could learn to code given enough time and the proper instruction.
There is a No True Scotsman argument that arives here "Well, if someone later became a programmer, despite failing those tests earlier, then clearly they were skilled at becoming a programmer" blah blah; but it is still an interesting phenomenon. And yes, there will be outliers, of course; and there will be people that gradually mull their brain to change the way it thinks; but, it is still an interesting phenomenon.
I bet we could see this in other fields, too, it's just that programming is presently the hotness.
(edit: added more)
As for elitism. What is elitist about it if that /is/ true? Oh no, Billy can't program, but he's great with cars. Sarah sucks at linked lists, but she has a better understanding of the human body than any of her peers in the ICU. And so on.
I am not great at higher level Math (calculus) and I'm good with algebra but I do not think I'd consider those good predictors. I feel like what allows me to program is strong spatial reasoning. Doing a quick google search I found this: http://www.quora.com/Whats-the-nature-of-the-relationship-if...
Probably just anecdotal but curious to know what others feel about spatial reasoning? I think specially with object oriented programming it is helpful to be able to visualize all of the 'actors' in your head and how they relate/intertwine.
I would also agree that spatial reasoning is key to strong programming ability. Most data structures are best understood through spatial reasoning, for example. But I would also say that spatial reasoning is key to mathematical ability. I'm actually surprised that you would consider yourself strong with spatial reasoning but had trouble with calculus. Perhaps you just had a bad teacher or lacked proper motivation?
Spatial reasoning is very helpful for me, particularly when designing data structures and algorithms. When reasoning through a problem, I can often be found making shapes in the air with my hands. Easier than getting up and walking to the whiteboard. :)
I think you can deduce some correlation just by noting that the upper left and lower right parts of the graphs are relatively empty. Certainly there are statistical tests that would be more concrete. You can see some figures in the bottom right corners, but they're never discussed in the text.
Basic algerbra is used all the time in programming. It's part of a programmer's fundamental skill set. Of course, somebody who already has that particular skill will definitely have the advantage in a short programming course. It's like starting a 100m sprint with a 3 second head start. It says nothing, however, about who will be the better programmer over the long term. So I don't think their test is a good predictor of programming aptitude.
I'll reply to a specific comment already made as a subcomment here, to comment about the larger issues that have come up in several top-level replies in this thread.
I don't think such a hypothesis is awkward but I doubt high IQ as an excellent predictor for an individuals performance in tasks that are not IQ tests. As a layman when it comes to psychology I think IQ measures some things but the way the brain works, no real world task a person does is exactly like those IQ tests.
The interesting blog post submitted here is talking about the bread and butter of "industrial and organizational psychology," namely about how to select individuals for a training program. There are three generations of published research on this topic already, and there is a huge amount of ongoing research on this topic, because organizations all over the world want to figure out how to select successful applicants when there are more applicants than places in school or work programs.
The short answer is that there is a HUGE body of research to show that the single best hiring process you can use for hiring a worker, if you want to get a worker who will perform well on the job, is to use an IQ test for hiring.[1] The long answer is that some other applicant characteristics matter too, of course, but the single best thing to look at in a job applicant is "general mental ability." Work-sample tests are also very good for hiring for specific jobs, and are grossly underused in hiring in the United States.
To the point of the interesting submitted blog post, one always has to be empirical about these issues. The people running the bootcamp so far have found data that suggests that the algebra test they have tried is a bit more revelatory than the IQ test they tried, and less expensive besides. One response to that might be to suggest a test like the Wonderlic test (an inexpensive IQ test designed for company hiring procedures) but in the end, results matter. If empirically at this bootcamp, the algebra test works better than some other selection procedure, it doesn't even really matter why it works, just that it serves the bootcamp's purpose of identifying successful students from among multiple applicants. The data set is still small. I am very glad that the blog post includes a scatterplot of the data. More bivariate data should be shown that way, in blog posts on dozens of topics.
[1] My FAQ post on company hiring procedures, which I am still revising to put on my personal website after composing it for Hacker News, provides references for this and some commentary on legal issues in hiring.
there is a HUGE body of research to show that the
single best hiring process you can use for hiring
a worker
The best process, assuming you have to use a single process for every job in the world? Or the best process even when hiring for a specific role?
I can understand IQ being the best choice if you had to judge poets, plumbers, town planners, golf instructors, programmers, salespeople and warehouse workers using the same process. But surely if you're exclusively hiring for one of those roles, you'd want to test their domain-specific knowledge?
I can't dispute the author's statistics, after all, they're just a function of the data. But looking at the first graph, it seems like a generous interpretation of "predict." The anticipated signal-to-noise for any individual student looks like it would be pretty poor.
One other thought occurs to me. Would the same algebra test produce similar correlations with courses such as English and History, when adjusted for the differences in overall pass rates for those subjects?
It seems odd that something as interesting as programming isn't introduced until college. That seems like accepting students as music majors, who have never played music before. If I had my druthers, computation and simplistic programming would be part of the mainstream K-12 curriculum.
>It’s fairly common for incoming Computer Science majors to ask the question, “Why do I have to learn all this math if I just want to learn to program?”
Well, there's the reason you have a high drop-out rate in CS. People don't know what it is! Computer Science is not a vocational program. Computer Science is not computer programming.
If someone had talked to these kids asking “Why do I have to learn all this math if I just want to learn to program?” and told them "You don't have to learn all this math if you just want to learn to program" before they became CS majors, then they might not have become a CS major in the first place.
And, likely, some good computer scientists would be lost to the world. You should also ask them why they want to learn programming. Many of them will answer they want to become programmers, while they do not have a clear picture of what that entails (it is not code writing all the time, most programmers do not write games in languages they chose, a lot, despite the fact that it is a job where all workers can automate repetitive jobs, a lot of the work is repetitive, etc)
Maybe, once they realize what is the difference between programming and computer science, they prefer computer science. Problem is you cannot learn them the difference in a few weeks; it takes years to sink in.
So, what do you let them do in the mean time? Waiting is a waste of the years in which learning is easiest for them. So, do we let some grown-up decide who likely will make a good computer scientist, or do we let many more start on that trajectory and see how far they get?
I think the latter is the better choice, if we also provide smooth ways to move from one to he other.
[slightly related: I once read a teacher in a nursing school state: "when they come in, all the boys want to ride an ambulance, and all the girls want to work with kids. We have to work a bit on that in the first year"]
Most programming jobs involve a lot of algebra. You have variables, you do arithmetic to those variables, you apply functions. It's not a great surprise to me that if you are good at high school algebra, you can probably learn how to program.
You might not be a great programmer, but you'll be able to do it.
Lot of people in here offering cheap opinions, while mgirdley's team has done the actual work. They're not saying that the kinda of algebra test they're proposing is foolpoof, perfect, subjectivity-free, or even the best way of testing for programming aptitude.
What they _are_ saying is that the test is an efficient, effective way to do it, with better ROI than IQ tests.
It doesn't actually matter _why_ that's the case, though Animats' suggestion seems plausible: "From the test questions, this isn't an "algebra test". It's a word problem decoding test. That's appropriate to programming, where you have to go from an informal specification of the problem to a formal one."
I think that many people have difficulty learning to code in college because many of them aren't that enthusiastic about it. At least anecdotally, many people at my school are in computer science because that's where the zeitgeist is. If it was the eighties they'd be getting ready for law school.
I think that people would do much better in intro CS classes if we could get rid of some of the hype around programming and tech in general, and treat it like other courses. That way, far more of the students would be genuinely interested in the subject.
I'm very good at Algebraic math. But I don't think an algebraic test will show programming aptitude. While algebraic and calculus analysis are a form of problem solving that works incredibly well. It is by no means the fastest, or most eloquent way of solving a problem. Its just a single tool that a problem solver can use.
The main thing I fall back on is Heron's Problem. The classic algebraic/analytical solution is to find the local minimum of a function. Which works, this method isn't flashy yet completely functional. It requires no insight, just mentally vomiting something you learned in high school/college.
The geometric solution is far simpler, and offers insights into the foundation of trigonometry. Its really so simple and eloquent you feel like an brutish idiot doing a long form analysis.
I offer this because tools are merely tools, and math supplies many tools. You wouldn't hire a finish carpenter just based on his/her ability to swing a sledge hammer would you? I mean s/he will have to swing a hammer, but will it have to be a sledge hammer? Will they have to use a nail gun? Screw driver? I hope they are proficient in all of these tools, and since I'm outsourcing my time to them, I hope they know which tool to use at which time.
The correlation doesn't seem particularly strong, but the dependent variable here isn't right. It's a stack ranking that's forced to a normal distribution. A normal distribution might be appropriate if they randomly selected US citizens to join the program, but they don't. Students self-select to apply and they reject the bottom 66% of applicants. The resulting talent profile is far from being normally distributed.
You can correlate most anything with most anything. I'm not saying don't try, just to don't give correlations much credence in and of themselves. Thinking globally, what are the odds a coincidence doesn't happen? And when you exclude outliers, you may be excluding the most profound subjects, just as when you include non-outliers, the subjects may not be able to generalize outside the system of measurement.
> Despite hours of studying and tutoring, most of these underperforming students struggle with, and many ultimately give up on, programming as a career
They should follow the lead of those who figure out earlier they're not cut out for programming: embellish the CV with fake study, and go straight into the workforce as a programmer. Or they could get transferred into programming from some user department pitching to bring a "valuable user perspective" to IT. Or grease up some IT manager after-hours who'll bring them in as contractor with "special skills not readily available in the labor market" to bypass the usual HR checks and aptitude filters. Or if they're not of the same ethnicity as the HR personnel, send in a double to sit the aptitude test for them, knowing HR staff don't check applicant ID's too closely because they know no-one's going to make it through to an IT interview if they do. Most HR staff and IT managers just want the staff count up, they don't care whether they're productive or detrimental to the projects. If they have staff they have people to blame.
[+] [-] bitplanets|11 years ago|reply
IMO you don't need to learn too much math before programming to be a good programmer. Basic operations are good enough, if you need more you learn as you go, you'll never know what you need. Lazy learning, like lazy variable loading.
The test you are making are more like problem solving which is closer to what programming is and not math. Of course basic math (+, -, /, *), but what it really matters is knowing what operations to do. The operation itself is the easier part.
A better test would be to make a chose between which approach to take to solve a problem and explain the rational behind. That is what will define a good programmer.
Also what better indicator you want than programming itself? You'll never make a choice based on this.
Also one thing is to figure out how to solve "here are 3 consecutive integers with a sum of 69. What are they?" than solving "here are X consecutive integers with a sum of Y. What are they?". Same in "Adriana’s age is 1/3rd of her dad’s age. If her dad is 36 years old, how old is Adriana?" vs "W’s age is X of Y’s age. If Y is Z years old, how old is W?". The complexity increases a lot.
[+] [-] the_af|11 years ago|reply
First, the algorithmic part of programming is a lot like doing algebra. So much so that algebra is an important part of any serious CS syllabus. Clearly "writing a function or a class" is not the skill they are testing here, but problem-solving.
Knowing how to solve simple algebraic problems engages your "problem solving" skills in a similar way as solving something by writing a program. Note that algebra is not "basic math (+,-,/,*)" like you said. Algebra, like programming, requires the ability to understand and write abstractions, and to figure out how to approach a problem.
> Also what better indicator you want than programming itself?
They clearly want to establish a correlation between something else and programming. This is interesting in itself.
[+] [-] jacalata|11 years ago|reply
Is this a joke? They care because they are selecting applicants to a programming boot camp and want to select the ones more likely to be successful. I suppose they could make all of the applicants learn to program and select the best ones, but there could be issues with that. And they are pretty clear that they are defining 'good programmer' as 'good outcome in their course'.
> A better test would be...
Prove it.
[+] [-] threatofrain|11 years ago|reply
In other words, an algebra test just acted as a noisy, imprecise measurement of general mental ability.
[+] [-] mathattack|11 years ago|reply
It’s fairly common for incoming Computer Science majors to ask the question, “Why do I have to learn all this math if I just want to learn to program?” The correlation above suggests a possible answer: The ability to understand basic mathematics is likely correlated with the ability to “think algorithmically,” which is well-known to be a foundational skill for expert programmers.
If it's just a weak (as the chart suggests) correlation, it doesn't mean learning one will make you better at the other. And if you do assume causality - it can go either way. Perhaps learning math makes you better at programming. Perhaps learning programming makes you better at math.
My 2 cents... It's more complicated because there are other things involved. Perhaps it's the nerd gene that makes people who like computers also more likely to play D&D and be in band. (I was a card carrying member) Does one of these 5 variables cause the other, or are they all part of the same thing?
[+] [-] erroneousfunk|11 years ago|reply
However, it is correct that educators would need to do a little more research if they want to try and apply these results to a classroom.
[+] [-] kasey_junk|11 years ago|reply
A much more interesting experiment would be to add the algebra test back into the end of the program and see if there is improvement and how that correlates (or doesn't) to programming competence.
[+] [-] walshemj|11 years ago|reply
I learnt to program when I was 13 and that was in the middle stream at my upper school
[+] [-] psychometry|11 years ago|reply
[+] [-] Morgawr|11 years ago|reply
There are A LOT of different programming/automation paradigms in the world, lots of different languages, declarative, functional, OOP, imperative, logic, etc etc, maybe some of these students just can't get the convoluted mutable and unsafe structure of a Python or Java program but they might grok and appreciate the safety and simplicity of ML/Haskell or the flexibility of Lisp, why would you turn them down in such a way or force them through a path they don't really need to go through?
During my first year of Bachelor Computer Science at University we had introduction to programming in Scheme. It was a mind-expanding experience to me, I already knew how to program in C, Java, C++ and C# with a bit of PHP/Javascript back then and I was much ahead most of my peers but still I sat at the computer, trying to earn this alien language to me, and luckily I was humble enough to force myself through it and adapt my mind to a different paradigm. I know for certain that a lot of my friends and colleagues who already knew how to program struggled hard on that exam and some had to re-take it the following year (Which was unfortunately changed to C++ and they managed to pass without troubles) simply because they didn't think Scheme was a "real" programming language or useful at all. It was just too different from their previous experience.
What's even more interesting, I know some people from that class who had never touched a programming language before and weren't particularly strong at math. Those people are the ones I recall enjoying the course the most, they found it the easiest among all the other courses we had and passed it with excellent grades. Simply because their mind was apparently better wired for such paradigm and they had no preconceptions or prejudices that prevented them from learning it properly.
So my bottom line is, what makes you think that some people might not just have a "differently wired" brain that makes them think more easily with a different non-imperative paradigm for programming?
[+] [-] rimantas|11 years ago|reply
[+] [-] guard-of-terra|11 years ago|reply
[+] [-] kefka|11 years ago|reply
Only school I know that uses Scheme that much.
[+] [-] Animats|11 years ago|reply
From the test questions, this isn't an "algebra test". It's a word problem decoding test. That's appropriate to programming, where you have to go from an informal specification of the problem to a formal one.
[+] [-] TheCoelacanth|11 years ago|reply
[+] [-] xivzgrev|11 years ago|reply
X + (x + 1) + (x+ 2) = 69. Solve for x.
[+] [-] Paul_S|11 years ago|reply
I know this is a socially unacceptable opinion but I think those correlations exist.
[+] [-] mgirdley|11 years ago|reply
1) IQ tests are really long and expensive, so difficult to implement
2) They didn't correlate with performance as well as algebra.
[+] [-] spacehome|11 years ago|reply
[+] [-] delluminatus|11 years ago|reply
But just because those two things correlate with IQ (which is probably true, so let's just grant them as true even without evidence for the sake of argument), that does not imply that they are sufficiently strongly correlated with each other to be interesting for hiring purposes.
To see my point, consider that being red is correlated with being purple, and being blue is correlated with being purple, but being red is not correlated with being blue. (at least not without evidence).
[+] [-] fsloth|11 years ago|reply
I don't think such a hypothesis is awkward but I doubt high IQ as an excellent predictor for an individuals performance in tasks that are not IQ tests. As a layman when it comes to psychology I think IQ measures some things but the way the brain works, no real world task a person does is exactly like those IQ tests.
A brain is not a CPU and an IQ is not its clock frequency.
[+] [-] joe_the_user|11 years ago|reply
[+] [-] jimmaswell|11 years ago|reply
What's not clear about the term?
[+] [-] j_baker|11 years ago|reply
> 30-60% of CS college majors have failed their Introduction to Computer Science course because they simply could not learn to program.
This "You either have it or you don't" mindset is strikingly elitist. I simply don't buy the idea that there are people out there who absolutely cannot learn to program. I mean, put someone on a desert island and tell them they can't leave until they can write a program that uses a linked list, and I'm pretty sure most people would be able to get off the island eventually.
Of course, that doesn't mean that some people can learn to code more easily than others. But I'd be willing to posit that the vast majority of people could learn to code given enough time and the proper instruction.
[+] [-] mytochar|11 years ago|reply
There is a No True Scotsman argument that arives here "Well, if someone later became a programmer, despite failing those tests earlier, then clearly they were skilled at becoming a programmer" blah blah; but it is still an interesting phenomenon. And yes, there will be outliers, of course; and there will be people that gradually mull their brain to change the way it thinks; but, it is still an interesting phenomenon.
I bet we could see this in other fields, too, it's just that programming is presently the hotness.
(edit: added more)
As for elitism. What is elitist about it if that /is/ true? Oh no, Billy can't program, but he's great with cars. Sarah sucks at linked lists, but she has a better understanding of the human body than any of her peers in the ICU. And so on.
[+] [-] mentos|11 years ago|reply
Probably just anecdotal but curious to know what others feel about spatial reasoning? I think specially with object oriented programming it is helpful to be able to visualize all of the 'actors' in your head and how they relate/intertwine.
[+] [-] hackinthebochs|11 years ago|reply
[+] [-] evincarofautumn|11 years ago|reply
[+] [-] engrsrce|11 years ago|reply
http://pages.cs.wisc.edu/~kovar/hall.html
[+] [-] mark-r|11 years ago|reply
[+] [-] mattlogan1|11 years ago|reply
[+] [-] lvs|11 years ago|reply
[+] [-] iliketosleep|11 years ago|reply
[+] [-] tokenadult|11 years ago|reply
I don't think such a hypothesis is awkward but I doubt high IQ as an excellent predictor for an individuals performance in tasks that are not IQ tests. As a layman when it comes to psychology I think IQ measures some things but the way the brain works, no real world task a person does is exactly like those IQ tests.
The interesting blog post submitted here is talking about the bread and butter of "industrial and organizational psychology," namely about how to select individuals for a training program. There are three generations of published research on this topic already, and there is a huge amount of ongoing research on this topic, because organizations all over the world want to figure out how to select successful applicants when there are more applicants than places in school or work programs.
The short answer is that there is a HUGE body of research to show that the single best hiring process you can use for hiring a worker, if you want to get a worker who will perform well on the job, is to use an IQ test for hiring.[1] The long answer is that some other applicant characteristics matter too, of course, but the single best thing to look at in a job applicant is "general mental ability." Work-sample tests are also very good for hiring for specific jobs, and are grossly underused in hiring in the United States.
To the point of the interesting submitted blog post, one always has to be empirical about these issues. The people running the bootcamp so far have found data that suggests that the algebra test they have tried is a bit more revelatory than the IQ test they tried, and less expensive besides. One response to that might be to suggest a test like the Wonderlic test (an inexpensive IQ test designed for company hiring procedures) but in the end, results matter. If empirically at this bootcamp, the algebra test works better than some other selection procedure, it doesn't even really matter why it works, just that it serves the bootcamp's purpose of identifying successful students from among multiple applicants. The data set is still small. I am very glad that the blog post includes a scatterplot of the data. More bivariate data should be shown that way, in blog posts on dozens of topics.
[1] My FAQ post on company hiring procedures, which I am still revising to put on my personal website after composing it for Hacker News, provides references for this and some commentary on legal issues in hiring.
https://news.ycombinator.com/item?id=4613413#up_4613543
[+] [-] michaelt|11 years ago|reply
I can understand IQ being the best choice if you had to judge poets, plumbers, town planners, golf instructors, programmers, salespeople and warehouse workers using the same process. But surely if you're exclusively hiring for one of those roles, you'd want to test their domain-specific knowledge?
[+] [-] analog31|11 years ago|reply
One other thought occurs to me. Would the same algebra test produce similar correlations with courses such as English and History, when adjusted for the differences in overall pass rates for those subjects?
It seems odd that something as interesting as programming isn't introduced until college. That seems like accepting students as music majors, who have never played music before. If I had my druthers, computation and simplistic programming would be part of the mainstream K-12 curriculum.
[+] [-] pflats|11 years ago|reply
Well, there's the reason you have a high drop-out rate in CS. People don't know what it is! Computer Science is not a vocational program. Computer Science is not computer programming.
If someone had talked to these kids asking “Why do I have to learn all this math if I just want to learn to program?” and told them "You don't have to learn all this math if you just want to learn to program" before they became CS majors, then they might not have become a CS major in the first place.
[+] [-] Someone|11 years ago|reply
Maybe, once they realize what is the difference between programming and computer science, they prefer computer science. Problem is you cannot learn them the difference in a few weeks; it takes years to sink in.
So, what do you let them do in the mean time? Waiting is a waste of the years in which learning is easiest for them. So, do we let some grown-up decide who likely will make a good computer scientist, or do we let many more start on that trajectory and see how far they get?
I think the latter is the better choice, if we also provide smooth ways to move from one to he other.
[slightly related: I once read a teacher in a nursing school state: "when they come in, all the boys want to ride an ambulance, and all the girls want to work with kids. We have to work a bit on that in the first year"]
[+] [-] wilsynet|11 years ago|reply
You might not be a great programmer, but you'll be able to do it.
[+] [-] innguest|11 years ago|reply
Being good at number rules (school algebra) does not have much to do with being good at state rules (code algebra).
I'd say there's more correlation between functional programming and school algebra, if anything.
[+] [-] michaelhoney|11 years ago|reply
What they _are_ saying is that the test is an efficient, effective way to do it, with better ROI than IQ tests.
It doesn't actually matter _why_ that's the case, though Animats' suggestion seems plausible: "From the test questions, this isn't an "algebra test". It's a word problem decoding test. That's appropriate to programming, where you have to go from an informal specification of the problem to a formal one."
[+] [-] neaanopri|11 years ago|reply
I think that people would do much better in intro CS classes if we could get rid of some of the hype around programming and tech in general, and treat it like other courses. That way, far more of the students would be genuinely interested in the subject.
[+] [-] valarauca1|11 years ago|reply
The main thing I fall back on is Heron's Problem. The classic algebraic/analytical solution is to find the local minimum of a function. Which works, this method isn't flashy yet completely functional. It requires no insight, just mentally vomiting something you learned in high school/college.
The geometric solution is far simpler, and offers insights into the foundation of trigonometry. Its really so simple and eloquent you feel like an brutish idiot doing a long form analysis.
I offer this because tools are merely tools, and math supplies many tools. You wouldn't hire a finish carpenter just based on his/her ability to swing a sledge hammer would you? I mean s/he will have to swing a hammer, but will it have to be a sledge hammer? Will they have to use a nail gun? Screw driver? I hope they are proficient in all of these tools, and since I'm outsourcing my time to them, I hope they know which tool to use at which time.
[+] [-] CGamesPlay|11 years ago|reply
[+] [-] acscott|11 years ago|reply
[+] [-] vorg|11 years ago|reply
They should follow the lead of those who figure out earlier they're not cut out for programming: embellish the CV with fake study, and go straight into the workforce as a programmer. Or they could get transferred into programming from some user department pitching to bring a "valuable user perspective" to IT. Or grease up some IT manager after-hours who'll bring them in as contractor with "special skills not readily available in the labor market" to bypass the usual HR checks and aptitude filters. Or if they're not of the same ethnicity as the HR personnel, send in a double to sit the aptitude test for them, knowing HR staff don't check applicant ID's too closely because they know no-one's going to make it through to an IT interview if they do. Most HR staff and IT managers just want the staff count up, they don't care whether they're productive or detrimental to the projects. If they have staff they have people to blame.