> While I do believe anyone can learn programing, thats not really the issue at hand. The question is how fast do most people take to it? I think programming is one of those things that only a certain type of person will take to it reasonably fast. This is important because there's a cost/benefit analysis people do when it comes to what's worth studying.

I can agree with that statement, to some extent. The composer Brian Eno once said of prodigies: "The reason you get child prodigies in chess, arithmetic, and classical composition is that they are all worlds of discontinuous, parceled-up possibilities." Programming fits the "discontinuous possibilities" mold very well.

The question is whether or not you want to keep teaching programming in a way that only clicks with those more prodigious people, or if you want to come up with approaches that let in people who may not have the same instant intuition. And, just as in classical music, if you encourage only the people who have a certain sort of aptitude, you're also encouraging people who will only ever approach programming in one certain way, and the result is that the medium as a whole suffers from lack of diversity.

> They teach programming by asking you to program. Unfortunately this is impossible for some 60% of the people who take a programming course. We have yet to come up with a better way.

It's not that they ask people to program that's problematic. (I'd like to see a citation for that 60%, as well; it sounds fishy.) I've taken several programming classes at several levels and I don't think anybody who gets what they're doing finds programming difficult.

The challenge, rather, and this is not only a challenge that comes up in programming courses, is figuring out how to make people get it. You need to develop a manner of teaching that makes all these actions somehow intuitive; why is it that we program in this particular way? What does each word mean? Why's each language constructed in its particular pattern, and how does that affect coding?

Teaching programming without putting serious thought into creating a comfortable abstraction for students is not really teaching programming at all. It's like teaching a creative writing class without simultaneously teaching literature (and, sadly, many creative writing classes are guilty of this). You can pretend that writing is an obscure, difficult art that only a select few minds can master. But I'm a skilled poet and I teach poetry to middle schoolers and I think it's safe to say that the reason most people can't write a good poem is that they don't understand the reason why they're writing a poem in the first place.

I had a teacher, in a high school Java class, who was actually very good at teaching this; I didn't recognize how good he was at the time. He took a class composed mostly of people who knew literally nothing about anything code-related, and in a year turned them without fail into programmers capable of making competent programs. No student dropped out or switched the class; he worked with what he had and didn't fail a single one of us.

The guy-to-girl ratio was pretty close to 1:1, for what it's worth. We had a surprisingly diverse class. And it was really surprising who ended up really showing a knack for coding and who didn't. Frequently the really good coders struggled for longer than the rest of us did, but when they hit upon how to get something done their approach was a lot better than the rest of the class's.

(And by the way, I'd like to mention that this is the best discussion of gender equality that I've ever read on Hacker News, and that I'm in a way really proud that we're having this conversation right here. Cheers to everybody on both sides for keeping this a relatively civil conversation; this is not an easy subject to discuss politely.)