Wednesday, October 28, 2009

Being a Girl in CS Doesn't Suck

When I posted last week about an experience with gender bias in "Should I Defend My Cred?", some of the re-tweets basically implied that post was proof that it sucks being a girl in CS. Well, I want to clarify that it doesn't suck. It's actually pretty freaking awesome.

What rocks:

  • Working with mostly guys.
    I'm sorry, girls, but I've always gotten along better with guys, ever since I was in elementary school. It's probably because I didn't quite fit into the girl mold (or any mold) back then, and thus girls were hesitant to accept me, while guys didn't really care as long as I was willing to shoot cannons with them. I know a lot of other girls in CS who say the same thing - that they're mostly friends with guys - and actually, those are the girls that I get along with best. So, yes, I should learn how to get along better with girls. But in the meantime, I'll always feel more comfortable working with guys.
  • "Working" with mostly guys.
    I once famously said "I only date guys who program in derivatives of ECMAScript". Well, it's kind of true. I prefer dating guys in tech because I have more stuff to talk about with them, so it's pretty handy that the tech industry is mostly guys. And yes, there is a bit of truth in the phrase often applied to guys in CS: "The goods are odd, but the odds are good"...but I'm pretty sure that the ratio of good guys is still in my favour. It's nice to be in an industry where I constantly encounter so many potential mates, and I don't have to rely on meeting random guys in a bar (which appears to be the dating preference of choice amongst adults, ick).
  • Being recognizable.
    As a girl amidst a sea of guys, I'm pretty easy to find. At a conference, all someone has to say is "find the girl with the red|blue|pink hair", and they can make a positive match pretty quickly. This easy recognition means that I can connect with more of the developers that want to talk to me. It can sometimes cause problems when people remember me better than I remember them (there's a limit to the number of white guys I can store in my head at once), but they are usually quite forgiving.
  • Getting more opportunities.
    Okay, I'm still not 100% sure how I feel about affirmative action.. except that I bet it's worked for me, and that I've probably benefited greatly from it. I remember asking my high school English teacher to review my college essay (which revolved around toilet flushing), and he glanced it over and said, "Well, you're applying as a girl in CS with a high SAT score, right? This shouldn't matter much."
    When an employer or university is comparing 2 equally skilled people, it makes sense that they select the one that increases the diversity of their staff/student body/conference/etc. Diversity is a good thing for teams, and it just so happens that the easiest way to measure diversity is by looking at aspects like race or gender. Theoretically, affirmative action could also applied be to hobbies and interests, and I could be selected due to my intense passion for 80s music (which actually does come up surprisingly often in my talks and demos). Until that happens, I will take advantage of the opportunities that I get by being a girl, and trust that I am not being given opportunities that I don't deserve.

What sucks:

  • Not enough chick flicks.
    I'm pretty sure I would have more excuses to watch romantic comedies if I hung out with more girls. But oh well, I'll just schedule a few more 12 hour trans-pacific flights.
  • Too little dancing.
    Guys don't generally go out dancing as their night activity of choice, at least not guys in western cultures. They tend to prefer a night of tipsy talk at a pub. I sometimes wish that I was a rock star or celebrity, and got to spend every night clubbing in exotic places... but until I acquire any sort of stage talent whatsoever, I think I'll settle with tricking guys into going to pubs with good music.

What really sucks:

  • Being afraid to admit all that.
    As a girl in CS, I am meant to have a very particular opinion about girls in CS. I feel that I risk being viewed as a traitor if I express other opinions. So, I generally try not to express any at all, and just go on my merry way. But, I now worry that other girls may feel the same fear, and that it is cowardly of me to keep my opinions to myself. Now, it's up to you to express your opinions, whatever they may be.

Wednesday, October 21, 2009

Joomla & Google Wave: The Possibilities

Last weekend, I presented a talk on Google Wave to Joomla Day Sydney, and then proposed various ways that Joomla and and the Wave APIs could be used together. I've summarized them below, and would love to hear ideas from Joomla developers on other types of integration.

Using Wave to Produce Joomla Content

Embedded Waves

You might decide that instead of static HTML for a particular article, you want to embed a Wave and enable real-time collaboration. An enterprising developer has already written a Joomla plugin that uses the Embed API and makes it easy to embed Waves in articles, so you can use that.

For example, I can create a Wave with the content of the Joomla Day home page:

Then, in my Joomla instance, I can install the plugin and insert this code in an article:

{googlewave srv=|!w+FspA8QgYA|width=100%|height=600px|fsize=12px|bg=#FFF|ffamily=Georgia}

And then it would produce a page like this:

Note: Only people with accounts for the embedded server will be able to view the Wave, and only if they are a participant or the Wave is public to that whole server. In the future, we hope to allow for another type of public waves that can be viewed anonymously.

You may be creeped out by the idea of anyone being able to edit the Wave, and maybe you don't really want a full conversation on the page. That brings us to the second option.

Exported Waves

If you want to use the collaborative nature of Wave to create your articles, but then still use static HTML for your articles, then you could write a robot to export from Wave into Joomla or a Joomla-compatible format.

For example, the Exporty bot listens for changes in a blip, extracts the contents of the root blip, and stores it in its App Engine datastore. Then, it renders that as HTML at a URL, and when someone requests that HTML, it displays the blip if its Wave was public, and otherwise it asks the user to sign in and checks if they are a participant of the Wave.

So, I can create a Wave with the content of the article, add the co-authors, and then add Exporty-bot:

Then I can create an iframe pointing at the HTML in my article content:

<iframe src="!w%252B7w-1O4JSA" width="100%" height="700" frameborder="0"></iframe>

And then it would produce a page like this:

A more elegant solution would involve eliminating the iframe and baking the content into the page. But I will leave it to someone more experienced with Joomla to figure out best way to do that.

Using Wave to Extract Joomla Content

Using robots and gadgets, you can find ways to bring in content from your Joomla site.

For example, a user of your site could use Wave to subscribe to changes in the site. The RSSy bot lets you specify an RSS feed and updates the Wave with blips for each new item in the feed.

So, you can create a new wave, add RSSybot, and specify the RSS from a Joomla site:

The resulting Wave looks like this:

This bot doesn't do the best job at handling the HTML in the feed, but you could improve that to insert iframes with the HTML, or convert the HTML into a Wave-compatible block of text with annotations for the styles.

Should I Defend My Cred? (...Yes)

Tonight, I gave another Ignite talk on "Google Wave & Collaborative Mapping"/. The talk went well, and it was a great opportunity to hear what other people are thinking of doing with Wave. But, something interesting happened after...

I was asked by a speaker to basically defend my cred- as he looked at my appearance (a short green skirt & t-shirt), saw that I gave a presentation that glossed over the technical details, and assumed that I wasn't that technical. When I explained to him that I actually do write code, he was fairly taken aback. He then recommended that I start off each presentation by clarifying my level of knowledge, and getting "respect" from the audience. His basic theory is that girls are not respected as technical peers until they sufficiently prove themselves, and apparently, particularly not if the girl is decent looking. Now, I want to explore that theory further (outside of the noisiness and distractions of the crowded pub).

When I was in high school, I participated in MUN (Model United Nations), where high schoolers would be delegates for a particular country and argue position papers. At the conferences, I remember that I myself mentally discounted the ability of the female delegates when they went up to speak. I was willing to believe in them, but only after they really showed their stuff. I didn't have this same feeling with the guys, and I came to the conclusion that there are some areas where one gender garners more of an immediate respect than others. I decided then that I would have to come off as incredibly confident (but not bitchily so) in order to win the respect of the MUN people, as I assumed that they would have that same accidental bias. The bias made sense to me in the area of speaking - men naturally have deep, confident voices, and so you just want to believe in that voice. I don't know how to describe women's voices, but it's certainly not like that.

I think the respect bias may extend beyond debating in the tech world, however. When I look at the Twitter account for a self-professed "girl geek", I grow immediately suspicious of their geeky claims. When I see a girl go up to present on the stage, I usually assume they will talk about something less technical. Maybe this is because my suspicions are usually confirmed -- because we live in a world where we try to extend a geek label as far wide as possible, to try and sneakily get more girls "in CS." Maybe it's because girls naturally hate girls (a well documented phenomenom in women's magazines), and this is an extension of the phenomenon.

So, I'm biased, he's biased, and potentially others are as well. I don't know that we'll be able to eliminate our subconcious tendencies, but we can help people squash their own.

When you give a talk, always start off with an introduction slide that describes your background and experience. If you're an expert on the topic, admit it (humbly). If you're just learning and wanted to share your learnings, admit it.

I think part of the reason that we try to rely on other (possibly incorrect) clues to help us form opinions is that people don't give us enough information about their credentials. And I don't think that we mind if someone is or isn't technical - we just want to know, one way or the other, and not feel like we're being misled. We respect people for who they are, but we don't respect people if we suspect that they're trying to be something they're not.

Thoughts welcome, of course. :)

Tuesday, October 13, 2009

Why I Sent You to a Group

One aspect of my role as an API support engineer is making sure that developer's questions are answered.

So, when a developer personally emails me a question, you would think that I would rush to answer it.

No. In fact, I usually ask them to post their question in the relevant group, and even if I know the answer to the question, I do not reveal it in my response.

This is because another aspect of my role is making sure that developer's questions are answered in a scalable manner.

If a developers emails me a question and I then answer it, that question and answer exist only inside our inboxes. They are absolutely undiscoverable by anyone else in the world, and basically useless to 99.9999999999999% of developers. However, if a developer posts a question in a forum and then receives an answer, that thread exists in the public group, it exists in the cached Google pages, it exists in the mail group archives - and most importantly, it exists in Google search results. That means that when another developer has the same question and search for it, they will find an answer - without even having to post their question. So, potentially 100% of developers can benefit from the question and answer. Now, *that* is scalable.

Now, a developer might think "But, I'm the only one with this question." This is nearly almost not the case, and it is not something that a developer can predict. Better safe than sorry, and share the question with the world.

Another aspect of my role is making sure that questions are answered in a timely manner.

If a developer emails me a question, and I happen to be quite busy then - with conferences, travel, launches, etc. - then I may not be able to respond for a few weeks. However, if a developer posts that question in the group, all of the group members may see it, and the chances are that atleast one of them know the answer and happen to have the time to respond. If they post in the group and don't get a response after a few days, it is fine protocol to ping the thread nicely, or hey, I don't even mind when a developer pings me personally and asks me to respond to the group thread.

So, oftentimes, when I ask a developer to post in a group, it's because I want them to get an answer faster than I can provide, and I happen to know that the Group is the best way to guarantee that.

Basically, the only times that I *happily* respond to a one-on-one email (or wave) is when the matter concerns personal account information and must be worked out on a case-by-case basis - for example, requests for higher geocoding limits, or the recent problems with some sandbox users not getting wave preview invites.

If you are a developer that I have sent to a group, please understand it is for your own good and the good of the world. Thanks for understanding!

Thursday, October 8, 2009

A World of Words.. And Me

Tonight, I gave a talk titled "A world of words" at Ignite Sydney, and I want to give a bit more information about why I gave that talk.

As I said at the beginning of the talk, I have always had a thing for words. When I was a wee lass, I had a favorite song called "Great Big Words" and loved to finish crossword puzzles. In high school, I realized that I needed to study words in order to do well on the SATs, and I could get away with more word geekery that way. I downloaded multiple flashcard programs on my PC, and I forced friends in my carpool to bring in words to discuss during each morning ride. Needless to say, I aced my test... and I was also no longer part of that carpool. Then, in university, I joined an honor society and suggested that we educate our peers by plastering the kiosks with "Word of the Week" posters. On each poster, I took great pleasure in coming up with a ridiculous sentence that used the word, and an overlay thorough description of its etymology. (See: poster for "diaphanous")

So, I realized I had an obsession, and I needed to make it legit. I enrolled in a linguistics minor, and I was hooked. Everything about language was fascinating - why we make the sounds we do, why our sentences can become ambiguous, even stuff like why we can say "abso-fucking-lotely" and not "ab-fucking-solutely" (seriously, that was covered in two classes). Inspired by my newfound knowledge, I applied for and was accepted into the John Hopkins Computational Linguistics summer workshop. There, I spent the summer working on a tool for visualizating the parse trees for sentences translated into multiple languages (See: screenshot).

That project got me thinking about the various ways that I could combine my computer science skills with my love for linguistics. I eventually concocted a project that would use both those, and my other minor, 3d animation, and convinced my advisors it was worthy of credit. It was entitled "A Computational Framework for Simulating Cross-Linguistic Acquisition of Spatial Prepositions", and it was basically an attempt to get a computer script to learn prepositions (above/under/on) by analyzing a 3d-scene and given sentences. And, hey, it kind of worked. (See: e-poster). I was on a roll!

So, I was at the point where I was trying to figure out what was next in life. I knew what I loved, but couldn't decide what to do with what I loved. It was suggested that I apply for a Fulbright grant - a grant that would let me do research somewhere in the world - and I thought that was a mighty fine idea. I wrote up my proposal for an app that I had always fantasized about. It was called "A World Wide Web of Comparative Linguistics", and it would let user visualize and search through etymological history on a map-based interface. (See: proposal). In my opinion, the app would bring immediate world peace. How could you possibly fight with someone after you realized how connected your words were?

Unfortunately, the Fulbright committee didn't see it that way, and I didn't get a grant. I instead went on to get a Masters degree and get hired by Google, and that's where I am today. I've been pretty busy supporting the Maps API for the past 3 years, but lately, I've started craving a bit of linguistics in my life. I started listing to word-of-the-day podcasts on my iPod during my morning commute, and it just gets my brain all tingly.

So, I put together this talk as one way of satisfying that craving (or, more likely, making it much bigger), and also to share this bit of knowledge with others. It's a nice break from my typical web talks, and I think I surprised a few folks.

You can see the talk embedded below or on slideshare, complete with captions of what I actually said.

You can also watch the recorded talk below:

For more resources on the topic, you can check out the sites that I bookmarked while researching the talk, subscribe to the podictionary podcast, or start looking up words in the online etymology dictionary.

And, of course, stay tuned to the blog to find out if I do ever create that etymology visualization app.. It would be a damn nifty thing indeed, even if it didn't bring world peace. :)