"Something that frustrates me about the field of computer science is that there are a lot of jerks who think that just because they've "mastered" some programming language or know some obscure unix commands, they are gods and you are nothing."
And frankly, that's the level at which a typical CS freshman is operating. Lots of knowledge about "coding"...very little knowledge about anything else. The playing field is much more level than it initially seems, but because the CS 101 classes are mostly about writing toy code it's easy for prior coding knowledge to be intimidating. In my own undergrad CS program, the CS101 hotshots fared no better, on average, than the kids who came in with no experience at all. In fact, a few of the loudest initial braggarts were the most spectacular flameouts, and about an equal number of the no-prior-experience kids ended up the honors graduates.
Universities could do a lot to combat this problem -- it might be a good idea to let the high-school coding jocks place out of the first CS classes. Alternatively, making first-year classes more about math and less about code would probably put 99% of all incoming students on an even playing field.
Since my university had large Korean and Chinese populations, it kind of struck me as parallel to the problems the Asian Studies department had weeding out native speakers looking for an easy A - it was hard to tell them from the kids who could speak but not write. Putting them in a separate section kept them from driving the class, and things went much smoother.
My girlfriend took Berkeley's introductory CS class as an undergraduate. She did well in the class, got an A, but she was really put off by the attitude of many classmates who had prior programming experience and judged her for not having any. It doesn't have to be with programming languages: it can be with things like setting up your UNIX shell, using emacs, ssh etc... something that we take for granted but had to learn at one point or another.
While she didn't intend to Major in Computer Science in the first place, I can't help but think that the environment was almost deliberately designed to make sure that somebody who had great potential to be an excellent programmer couldn't accidentally realize it (much as Jean, the author of the article did). Women who are good at programming still end up deciding against it as a career; on the other hand, many men are horrible at programming, but persist at it.
Interestingly enough, in Russia/former USSR the male:female ratio is in Computing is slightly better (more females) than other technical fields. I am not sure whether that's still the case (I left former USSR in 1996). My mother is a software engineer (she introduced me to Scheme and OCaml, back when you weren't considered a real programmer if you worked in anything other than C++). She had many female colleagues when she worked in a Computer Science research lab (back in the days of [Soviet clones of-] PDP-11s, VAXen and IBM 370s, ATT UNIX, etc... when programming was much more incidentally complex than it is now).
I'm not sure math makes all that much of a difference either because the most experienced people in my class were all doing math-related things (myself a physics minor, my girlfriend a math minor, and my two other friends a math and physics double major, respectively).
I just wouldn't worry so much about experienced students or give them something extra to work on if they wanted it. I started programming when I was 9, meaning I had been messing around with Linux, systems, programming languages, and algorithms for a full 9 years before stepping into my first class freshman year. My professors did the proper thing and used the finals from the freshman year CS courses to propel me to upper level courses in my first quarter. Don't try to work against experience, work with it.
I've graded and TA'd the course for two years, and I think his approach works extremely well. It lets you filter out the people who really get it from the people who are just pattern matching from previous experience.
How do you know this?
At the school where I went, the distribution for CS101 was bimodal; higher peak were the experienced ones, lower peak were the neophytes.
And no, it's not just the effect of "weeding out" the inexperienced kids -- as I said above, a number of the best students in my program had no prior experience, and a fair number of "experienced" kids flamed out once they hit the non-coding portion of the curriculum.
I went to a small school for undergrad, so I knew everyone who graduated with me, and everyone who started with me. Later, I went to a very large graduate school, and while the same patterns seemed to hold, I can't say for sure.
How is the computer field different from other fields? Once they are proficient, some people choose to share their knowledge to let people reach even higher goals, whilst others people enjoy making fun of those less educated and put them down. I've seen such behavior everywhere.
EDIT: Moreover, in the latter case, if you add some ingrained misogyny to the mix, things get even worse.
All sentences that start with these words are misguided. It is a complex issue with contributing factors at EVERY stage of a programmer's development.
Yes, let's help middle school girls get a chance to program. But let's also change CS curricula to draw on more skills besides programming. And let's make intro programming classes more welcoming to nonprogrammers. And let's find new venues for promoting startup job openings. And let's give grants for women making open source contributions, and, and, and....
The same is true of promoting literacy and bike friendly cities and fighting racism and most every other kind of activism. This is not a world of root causes.
What about others who have a few more gray hairs than I? When did Seymour Cray, Vint Cerf, Peter Norvig, Tim Berners-Lee, and other early pioneers start programming? I think it's pretty safe to say they didn't have mainframes in their parent's basement growing up that they were programming on since before high school. They had a natural interest and the aptitude to do well in it.
> Cray was born in 1925 in Chippewa Falls, Wisconsin to Seymour R. and Lillian Cray. His father was a civil engineer who fostered Cray's interest in science and engineering. As early as the age of ten he was able to build a device out of Erector Set components that converted punched paper tape into Morse code signals. The basement of the family home was given over to the young Cray as a "lab".
That's not a mainframe, no. But he was still learning a lot about programming.
I'm a few years younger than the youngest of the quoted pioneers (Tim Berners-Lee, born 1955). My first access to a computer was in my junior year in high school: a DecWriter[3] connected via a 300 baud dial-up modem to a timeshare system, programmed in Basic. (Obsessively. Still. :-O)
The limiting factor for pioneers was access to computer. For kids today, access isn't a problem.
[1] http://en.wikipedia.org/wiki/Howard_H._Aiken [2] http://en.wikipedia.org/wiki/Harvard_Mark_I [3] http://www.columbia.edu/acis/history/la36.html
That's not the fastest way to run your programs but things like 'guess a number' are definitely doable.
Shortly after that I got a Saturday job at a local radio shack which gave me access to the real thing.
So it's not necessary to have access to computer hardware at all to learn about programming, even though it certainly helps.
I think that it is important to make software engineering a codified, professional field.
It is not an advantage to have programming be a field where the bragging rights go to those who put together a D&D weather generator in a true Mini-computer in Middle School.
Rather, it is much better to have software engineering be something you can enter in college if you a good mastery of abstract thinking.
I would further mention that it helps programming as a professional if a good programmer is a generalist who knows how to get any required details. The process of becoming a generalist is entirely possible if you enter the software engineering field in college. Essentially, the point is for a person learn good process and let the rest take of itself.
Oppositely, if programmers are merely hackers, geeks or idiot-savants, who accumulate massive amounts of details concerning systems, languages and libraries in a near-autistic fashion, then not only will programming remain a ghetto but it will be a poorly paid, miserably ghetto.
Careful, this could be similar to saying that it's not advantageous to have mathematics be a field where people who prove non-trivial theorems in high school do better in university courses.
Some people have prior background or a special talent and that's not a bad thing. It's just important that this is also not required to succeed in the given field.
I personally couldn't disagree more, but luckily in this case there is no need to speculate since we have an almost perfect natural experiment available. Virtually all of the other branches of engineering - including the ones which you're presumably basing this idea on - have exactly the same gender imbalance issues as software engineering.
Sample from one institution: http://web.archive.org/web/20080611075012/http://www.eng.uwa.... Class sizes are around 80-100 except for environmental and geological which are half to third of that.
I spent 10 years as a land surveyor and GIS cartographer, and during that entire time I met one (!) woman surveyor. CE is notorious for this.
So after getting your degree you can only be a CEng by working for an existing CEng in a company that certifies CEngs.
Sounds like a perfect way of weeding out all those women who do pick a CS degree. Unless all traditional big-iron firms are looking to hire more women, and all 60-something male senior engineers are really clamoring for more women to certify ?
It would be rare for a new engineering grad to work under a 60-year-old engineer, typically the supervisors are much younger.
Perhaps women are attracted to public sector-type jobs, for some values of "public sector type", rather than a specific engineering discipline. How will that change the gender ratios question?
So, your premise of "most of the class has been programming for years" is false in at least my case.
The key to getting more females in CS is to expose them to programming in middle school or earlier.
Jean put her finger on why recruiting females for CS at the college level is so difficult: if they are starting programming in college (or even high school) when most of the class has been programming for years, they are way behind on the learning curve and have a daunting task to catch up.