| Subscribe via RSS

Women in Computer Science

Being a woman in computer science, I can't deny that I've seen some sexism over the years. Not the blatant "you can't do this" sexism that was prevalent thirty years ago, but rather subtle assumptions from people within the industry.

I've noticed, for example, that if I say that I work for Google and a male friend says he works for Microsoft (most of my friends in Seattle work for Microsoft), someone is much more likely to ask me what my position is - that is if they haven't just assumed outright that I'm in HR or marketing. When I say I'm a Software Engineer, many people are visibly shocked and almost skeptical.

A few months back, I went to an event where all of the 16 guys there happened to work for either Microsoft or Amazon. Guy #1 says to me after introducing himself, "So I assume you don't work for Microsoft." Guy #2 says "It must be great for you to meet all these techies... at least you have someone fix your computer." Guy #3 proceeds to explain to me what "beta" means. Thanks, boys, but I work for Google, I can fix my own computer, and I know all about "beta" ;-).

In truth, I really don't get offended by this kind of sexism; statistically, women in the US are much less likely to go into engineering and it would be difficult for anyone to be blind to this. The question is, why are there so few women in Computer Science and what can we do to change it? Actually, let's start with this: is the percentage of women in Computer Science that low (given our society, the times, etc)?

The Male / Female Ratio in Computer Science

I believe Computer Science is currently around 15% female. That figure alone doesn't worry me (hey, times change, it'll grow, right?). The problem is that the number has actually declined since 1980. Yikes.

Furthermore, I've been told by several people that parts of asia actually have very close to a 50/50 ratio. Why does the US lag so much?

Additionally, recall that fields such as medicine and law were at one point in time a male dominated field, but now have at least as many women as men - if not more.

So while things have gotten better in other fields or in other countries, it seems to have gotten worse within the US. So, yes, there is a problem... and time isn't just magically fixing it.

Why Aren't Women Drawn into Computer Science

This is a big question with many possible answers, but one important one is that women tend to be drawn to more social fields. From a young age, girls are taught to work together whereas it's seen as more "ok" for a boy to show off. As girls get older, it's almost difficult for them not to be social. Think of the uber-nerdy anti-social guys you know: how many women are equally anti-social? I can't think of a single one. Computer Science has an impression of cube monkey staring at their computer all days, and, if you're lucky, talking to those uber-nerdy engineers. That's just not that attractive of an industry to women who emphasize social interaction.

What can we do to change it?

Wish I knew... here are a few of my thoughts though with respect to this:

  • Women in Computer Science clubs: I'm honestly not sure how I feel about those clubs. Personally, they're not for me. I don't feel any need for this support network, and I worry that they promote a victim mentality to both to the women in the clubs as well as to men. But, perhaps if other women need this support network, then ok...

  • Developing an awareness of subtle sexism: Just because it's statistically true that a woman you meet is less likely to be an engineer doesn't mean that it's ok to make that assumption. While I'm not personally offended by these assumptions - I actually think it's somewhat amusing - it does affect the way you view women in the field. If you look at a woman and assume she's not an engineer, then you're more likely to assume that female engineer is less technical... and that's where the problem is. But, if you can consciously recognize that you make this assumption, it's easier to overcome it.

  • Turn it social: If women are less interested in computer science because it's less social, make it a more social field in college. Encourage students to work together and set up study groups for freshmen. Create social activities that people want to go to so that students meet each other. Assign team projects where different teams need to work together (for example, defining common protocols). Turn it into a social field.



Does being female hurt you in Computer Science?

There are pluses and minus. Sure, more people will know who you are, but people know you for the wrong reasons. It's probably easier to get an interview, but probably tougher to get the job (it's tougher to convince someone that you're technical if you're female). I'm not really sure how it all evens out, but here's what I will say:

Everyone will be judged prematurely for something. If it's not your gender, it's your race. If it's not your race, it's your sexual orientation, how you dress, what school you went to, what degrees you have, how much money you have, etc. At the end of the day, does it really matter what people are judging you for? Everyone's going to face prejudice; you just have to learn to shrug your shoulders and develop a thick skin.

Google and Open Source - and my crowded office

So about a month ago, this guy walks into my office and actually starts to do "work." It was my office first, dammit. I've been wondering who this guy he is thinking that he can just destroy my nice, peaceful, solitary office. Turns out that he's Sean Egan, the lead developer on gaim . Yeah, like that makes it ok.

What's he doing at Google? Mostly ping pong, some foosball, and occasionally he's doing some work on integrating voice into Gaim. Well, at least he's good in one of those three areas. ;-)

Speaking of open source goodness, Adium 0.85 just launched and it includes some work that I did to make it as easy as possible for users to use Google Talk from other clients. Now, I ask you - how many companies would actually encourage employees to spend their time helping third-party clients as opposed to trying to break them?

Once again, Google has re-affirmed its commitment to open source.

Oh, and this also means that I have had code from both Google and Apple (iChat) ship before my code at Microsoft... despite having been at Microsoft first. (Sorry, I just can't resist making little cracks about microsoft sometimes).

Seattle Times Article: Google vs Microsoft

The front page of the Seattle Times today featured an article on me (and some other people) in reference to employees leaving Microsoft to go to Google. After three internships at Microsoft and a two year stint as a Microsoft campus representative, why didn't I go to Microsoft?

I went to Penn's career fair yesterday representing Google and that seemed to be the popular question there as well. I guess most people just assumed that I'd go back to Microsoft.

So what happened?

It wasn't a clear cut decision. My offers at Microsoft were from Mobile Devices and Windows Media Player, and I was really excited about Mobile Devices. At Google, I didn't know what I would be working on, and I'm not that interested in server-side or web programming.

But, there were lots of little things that made me lean away from Microsoft:

  • I wanted to do some feature design work, and Google lets developers help drive the product. At Microsoft, while developers can be "in the feedback loop," they're not driving the product - they're just giving occasional feedback. No, it's not the same thing. The PMs at Microsoft do all the design. Yes, there are some group that are very technical (aka, compilers) that are more dev driven, but those aren't groups I'm interested in.

  • I'd been getting this vibe from people that Microsoft's culture was changing... for the worse

  • Microsoft, in my experience, seemed to take a "good enough" approach rather than truly driving for excellence. I didn't really recognize this until I went to Apple and I saw the contrast between the two attitudes. Apple really seemed driven towards perfection, where Microsoft would shrug its shoulders and say "eh, good enough." Google's attitude, although I had never worked there, seemed more similar to Apple's.

  • Microsoft was cutting back on benefits whereas Google seemed to be expanding their benefits. Sure, maybe Google will change, but there's nothing holding me to stay at Google forever if it does.

  • My last summer at Microsoft just wasn't much fun. I didn't exactly have the best manager, and I just wasn't that into the product I was working on. While that may not have been representative of Microsoft, I can't say that didn't make Microsoft a little less glamorous in my eyes.

  • Microsoft didn't really seem to work together as a company; instead, it seemed to have a "not my team, not my problem attitude."

  • How many products are Microsoft do people say are just "awesome?" Not that every product is bad - I'm not one of those people that sits and complains about Windows. But really, how many products are customers really excited about? Xbox, maybe. What else? If your customers aren't excited about what you're doing, will you be?

  • And finally, let's face it: it's nice not working for the "evil" empire. Microsoft is a monopoly - maybe not in the technical sense of the word (it's debatable), but in the sense of it making it damn tough for anyone to enter the industry because Microsoft can always bundle software. It's nice working for a company that you can really feel good about - and that actively remembers to not be "evil."


So those were all the little things that were going on in my head when I was debating the offers. I guess what it comes down to is that once I spent sometime at Apple, I realized that Microsoft is not as great as it seems.

Meanwhile, Google had these great things about it: the 20% time projects (engineers are encouraged to spend 20% of their time on a different project), free lunch, different locations, etc.

For some reason though, it still wasn't clear cut. I really was seriously considering the Mobile Devices offer. In the end though, I realized that I was simply more excited about Google, and nothing Microsoft could offer me could make up for being excited about your job.

Googlage

I think I shall coin a new term: "Googlage." A 'Googlage' is a Google query term that leads you to a particular website. To be reasonably called a 'Googlage,' the page in question should be listed on the first page of results. From there, you have Level 1, 2, ... Googlages, which refer to the ranking of the results.

Now that we have the definition covered, I've been trying to find my favorite Googlage for my site. The best one I've found so far is talk to gayle, although google gayle has a nice alliteration to it. I'm still trying to find a good one that doesn't have my name in it. C# LaTeX Render used to be a Level 4 Googlage (which was interesting when I just happened to stumble across my own resume in a search), but sadly, it has falled down to Level 9.

Anyone find any good googlages?

Computer Science Curriculums: Practical or Theoretical

Inevitably, I find myself involved in discussions about what makes a good Computer Science curriculum, and there tend to be differing opinions as to whether a more theoretical curriculum or a more practical curriculum is better.

My university, The University of Pennsylvania, leaned very heavily to the theoretical side. Out of the 15 requires computer science courses, only one required any significant programming after freshman year (Operating Systems). Sure, you have electives and your senior project, but very few electives even have programming. In my mind, it's embarrassing for students to graduate without really knowing how to write code. Like so many other universities, Penn feels that theoretical skills were more important, as pratical skills become quickly outdated.

I happen to disagee somewhat, but let me start out by stating that you should maximize the following things in designing a curriculum:

  • Long-term value (7+ years after graduation)

  • Short-term value (present day to 7 years after graduation)

  • Student interest



Long-term value:
Theory certainly holds long-term value - after all, languages change, theory stays true. But does that make theory inherently uber-useful? Most engineering students, even if they start off in a technical position, eventually move on to less-technical roles where they won't need to know the details of P vs NP. What does hold long term value? Learning to push yourself, stretch your mind, and critically analyse problems. Both theoretical work and practical work can do that.

Short-term value: Short-term value is a little bit easier question to answer: projects. Projects teach design skills, planning skills, team working skills, critical thinking, etc which you will need throughout your life. Furthermore, they can actually be a way of applying ideas from theoretical courses. Use projects to reinforce you short-term skills (security, c, c++, user interface design, embedded systems, etc) and you will have both short-term and long-term benefits.

Student interest: Not only do students learn more in courses that they're interested in, but students are more likely to independently seek out knowledge outside of that course. Teach to a student's interest and they'll learn more in the long run than you could possibly teach them in that course. Many students (no, not all) feel a much great sense of accomplishment by creating an actual GUI application versus figuring out some proof. In fact, Unlocking the Clubhouse argues that women, in particular, tend to be more interested when they're doing GUI development. GUI development done with .NET (or Cocoa) is incredibly easy. If you just teach students a little bit, there's a good chance they'll continue to write more and more apps because it comes in handy.

So how would I design a computer science curriculum?
First year: Programming languages - probably Java, but at some point do some .NET GUI development. Not for the whole semester - just a bit of it to plant "seeds" where students can start doing development on their own.
Second year: Course on software engineering. Additionally, start teaching things like security, algorithms, architecture, etc. All classes should have projects where programming is required in them. This year should have more theory than the first year.
Third year: Shift a bit more towards theory. Require some sort of "junior-project" where students work individually for an entire semester on a project of their choosing
Fourth year: Full-year senior project, plus theory courses.

Oh, and all students should have to learn how to write well. Require writing courses of any kind.

I lied. Google talk is real. :-)

I lied. Google Talk does exist. Oh, and now that that's out in the open, guess what team I'm on? ;-)



Joe Beda (eightypercent.net) is also on the team and has more info on his website.



So I know what you're saying: do we really need another IM client? Google Talk is using the Jabber protocol, which is an open source protocol. Trillian, Gaim, iChat, etc can all connect to the Google service, since they support Jabber. So, different client, but an established, existing protocol.



What is Jabber? The way I always explain it to people is that Jabber is analogous to the IMAP or POP3 protocol. It's not an application, or a service - it's just a protocol. Much like Outlook / Eudora can connect to the seas.upenn.edu server using the POP3/IMAP protocols, the Google Talk / Gaim / Trillian / iChat client connects to the Google Talk server using the Jabber protocol. Open source goodness. :-)



And a screenshot:

Noogling

I am officially a Noogler: today was my first day at Google. I'm in Mountain View, CA at the headquarters for a week, and go up to Kirkland next week where I'll be working. No word on what I'll be working on :-)

I've been Slashdotted!

Ok, so the article wasn't about me, but there was a comment about me.

New Site

I've redone my site and switched everything over to ASP.NET. And in the process of doing so, there are probably some bugs. Let me know if you find any.

Contest Winners

Well, the Xtreme.NET Challenge was a great success. Here are the winners:

1st: David Siegel, MailAssist


2nd: Wesley & Brandon Rosenblum, KnowtionNet


3rd: Matt Jones, FTP Studio


Finalists:

Jeremy Pfund, Chess Express


Ashfaq Rahman, QI


Chung-tah Tsao, Quattro




David, Matt and Jeremy were my students in cse099 this semester, and Wesley was my student last year. Go ahead, look at the other cse099 projects - some are them are pretty cool (LaTeX chat client, anyone?). I'm so proud of my kiddies :-)

Interviews Page

We've got Microsoft interview questions, Amazon interview questions, and many more (Apple, IBM, Goldman Sachs - all the big computer science places). View interview questions, add interview questions - you can even post solutions to the problems.

Daily Pennsylvanian Article

The Daily Pennsylvanian wrote an article about the class I teach, with a response from Fernando Pereira, the chairman of the Department of Computer and Information Science.

Task.NET Challenge

The Task.NET Challenge has officially opened. This contest is ideally for people new to .NET, but all Penn and Drexel students are invited to enter.
First Prize: 20 GB Zen Portable Media Center

Registrar Time Searcher

Now open for Fall 2005: The Registrar Time Searcher, which searches for courses by time. Writing an app where you could use this database? Email me.

Xtreme.NET Challenge

Prizes for the Xtreme.NET Challenge have been announced:
TBA: Finalist Prizes