Hacker News new | ask | show | jobs
by Rooster61 4204 days ago
I really don't want to sound rude, but this sounds like a classic case of correlation not causality, and I could see the consequences really hurting some people.

I am REALLY terrible at algebra (to the extent that I am borderline LD in math), and I have completed a degree in CS and hold a steady job as a software engineer. And I am definitely not the only one. Ask a room full of developers how many are bad at math, and I guarantee the results will surprise you. On the other hand, I know a plenty of folks I went through school with that were math majors so good at algebra they could do full page derivations piss drunk without at hitch. And yet, they would take an intro java course and be totally lost. If they didn't get a java intro class, how do you think they would have done with something as algorithmic as an assembly language, a functional language, or understanding the nuts and bolts like Turing machines and automata?

Algorithmic thinking is definitely an important part of programming, but it is just that, only a part. And quite a few types of development don't emphasize that sort of thinking. I could perhaps see this being a PARTIAL solution for areas where one would be doing a lot of functional programming, but the vast majority of the job market these days is still OOP.

This could really quash the job prospects of programmers who are perfectly capable of writing quality code but are poor with algebra.

6 comments

I don't think the author claimed causality. He's interested in prediction, for which correlation is perfectly well-suited.

Also, nobody is claiming that the correlation is perfect. You can perfectly well see outliers in his graphs, but outliers don't disprove the correlation.

Fair point, but showing these graphs complete with the outliers gives a very poor platform to base handing out algebra tests in interviews without establishing causality.
> very poor platform to base handing out algebra tests in interviews without establishing causality

Why?

It probably shouldn't be your only criterion, but if it has a high correlation, why wouldn't that be sufficient for handing out algebra tests?

A high correlation corresponds to predictive power, even if it's not a causal relationship.

I think the point being made is that there are probably predictors which have many orders of magnitude more predictive power (e.g. work experience, education, interview questions, programming exercise, available source code, etc.).

The male gender is probably correlated to programming ability as well due to the fact that there are more male programmers but it's not a very useful predictor.

Predictors for a school to apply? I wouldn't bet on it. None of your suggestions seem fit.

Also, for a job it's probably a better predictor than a resume.

> Predictors for a school to apply?

First, it was suggested that this test should be used for programming job interviews. Second, why would a school who teaches programming care if students had programming ability? If you answer it is because the school wants to maintain a reputation of producing good programmers (hence adding value to the students' resumes), it contradicts your statement that this test is a better predictor than a resume. Otherwise, people would just study algebra instead of going to that school.

> A high correlation corresponds to predictive power...

That's a bold statement. And one that is unfortunately often times false. Spurious correlations pop up everywhere. They can be notoriously bad at predicting things, and care must be taken not to take rash actions based on correlations that may have no actual clout. I'd say denying someone a job based off of an algebra test is sufficiently rash.

There's some correlations I love that illustrate this. You have "Lack of Pirates Causing Global Warming":

http://www.forbes.com/sites/erikaandersen/2012/03/23/true-fa...

and one I hadn't seen before, "Internet Explorer vs. Murder Rate",

http://chrisblattman.com/2013/05/24/correlation-versus-causa...

Why do you think those correlations don't have predictive power, eg, that if you give me a graph of the pirate rate over a long period of time, I can't make a pretty good guess about the global warming rate?

Now, obviously, these are only very coarsely correlated because they don't reflect small scale variations in either data set (which is why the graphs are so coarse). However, in this case, both seem to actually be driven by a hidden factor (technology and societal advancement), which means that they'll actually likely stay correlated (as long as the correlations with the hidden factor stay strong).

Similarly, internet explorer and murder rates.

tl;dr: Your articles are correct that correlation doesn't imply causation, but I never argued that increasing math or computer science education would improve scores in the other. Instead, I merely argued that as long as they're correlated, knowing about one will tell you about the other.

(Also, the examples you picked don't meet my definition of strongly correlated, because they don't mimic fine features of the data, but that's actually secondary, because the argument you presented doesn't even relate to what I claimed.)

If I'm trying to pick years with global warming and all I know is the pirate population, I can do pretty well.
There is a difference between “algebra with numbers” and “algebraic manipulation”. You do the latter all the time with code when you observe and use equivalences like this:

    if a then
      return b
    else
      return c

    ===

    return (if a then b else c)
I.e., “return” is distributive over the branches of the “if” expression, so you can factor it out.

When you see “bad” programmers redundantly specifying Boolean expressions like “x == true” instead of “x”, it’s because they haven’t internalised the fact that “if” takes any algebraic expression denoting a Boolean, not just a special sort of expression with “&&” and “||” and “==” and “<”.

Beginning programmers often struggle with learning the elements available in a language and how they can be composed—and that is exactly what an algebra is. I would be very surprised if an aptitude for algebra did not correlate with an aptitute for programming.

This skill can help to write more concise code and refactor better but I wouldn't say it's the core component. Very well-functioning, maintainable code could certainly be written that was full of "== true" lines. That is preferable to indecipherable long-winded one-liners with no comments that are hard to parse.
That’s a false dichotomy. An indecipherable long-winded one-liner with no comments is not well factored code either.

I didn’t mean to imply that syntactic manipulation is the core component of programming, only that it’s a required skill, which beginners commonly struggle to learn. I’ve tutored a good number of beginner CS students, and a big issue is developing a general understanding of a language from the few concrete examples they’ve seen. If you’ve only ever seen “name.name()”, you may be surprised that “(expression).name()” is possible. If you’ve only ever seen “if (name == expression)”, you may be surprised that “if (name)” or “name = (name == expression)” are possible.

This article concerns how beginners learn to program, and I’m only arguing that I would expect an early understanding of the algebra of programs to be an advantage in learning how to productively manipulate programs. When you’re comfortable with the syntax, it is much easier to reason about the more important issue of semantics.

>only that it’s a required skill

What I'm saying is that it might not be required, just pleasant, given my example of someone who codes like that but otherwise writes well-structured good code.

I completely agree. My roommate is amazing with math, he has taken every math class available at Drexel for undergrads, but he can not code. He took a intro to programming class and did not pass. I on the other hand am okay at math, including algebra, but I can code. It is easy for me to understand, but it is impossible for him to understand. I think it goes down to Algorithmic thinking but also logical as well. That's the difference I see between my roommate and I.
> If they didn't get a java intro class, how do you think they would have done with something as algorithmic as an assembly language, a functional language, or understanding the nuts and bolts like Turing machines and automata?

I would argue that your last several examples (functional languages on) are more likely to be understood by people really good at math than Java is, and that Java isn't especially predictive in that regard.

Functional programming languages are closer in their structure to the way that math is structured than Java itself is, while Turing machines and automata are pretty much just outright math. (Especially when you start talking about the computational power of automata versus Turing machines and the equivalence between some kinds of grammars and automata.)

I expect you listed these because they're "hard" computer science, but I'd argue that you think they're "hard" computer science because they're mathy and not your forte.

I, for one, had much less trouble with Turing machines, autoamta, formal languages, computability, etc than I did with learning Java.

I think I would agree with you more if we were talking about Java on a full implementation basis (actually using the nuances of the language at a high level vs just learning the basic concepts such as variables and control structures common to most languages).

I also found Turing machines and automata much easier than conventional math classes. The point I was making was not that they are necessarily harder, but rather that they require a different type of mathematical thinking than your typical algebra based math. I would wager the same true for discreet math.

As for functional languages, I admittedly have never programmed in one and perhaps spoke out of personal ignorance. I have, however, heard from colleagues that back my original statement. It's basically hearsay, so take it or leave it.

I agree. I think we need to be specific about what's being measured here. Seems it'd be more helpful for backend algorithm development, less critical for front end coding.

I don't think it's oop as you suggest - I saw same correlation in a college c++ class. Half the class had easy a's, the rest had really hard c's. I've never seen such a bifurcation in any other college course, usually it's more gradual / continual distribution.

The reasoning behind it not being oop seems misread. I meant Object Oriented Programming. I'm not sure how the c++ correlation refutes that. Did you mean something else?
Completely agree. In the test presented one can probably replace 'algebra' with 'electrical engineering' or 'electromechanics' or 'physics' etc and get to the same outcome. I'm not exactly good at algebra either, mainly because it's not my field, but know enough about statistics in general to see that this article (well, not so much the article but some of the conclusions presented), is flawed.