AlterConf Berlin 2017: The Hardest Problems in Computer Science by Anjana Vakil

AlterConf Berlin 2017: The Hardest Problems in Computer Science by Anjana Vakil


(upbeat music) – [Anjana] Hi, everybody, and wow, thanks for that great, energizing talk. I am gonna talk to you in a moment about the hardest problems in computer science. But forewarning, I’m gonna ask you to
actually talk to each other in the middle of this talk. So, if you hadn’t had a chance to meet the people you
are sitting near yet, please take a moment to say hi. In case anyone is not comfortable, or cannot communicate verbally
and would like a notepad, I’ve scattered a few of them throughout. If anyone needs one, just raise your hand
and you can have this. Thanks very much to our sponsors, Thoughtworks and DaWanda for these. My name is Anjana Vakil, I’m a software developer
based here in Berlin. You can find me at twitter @AnjanaVakil. No media restrictions so feel
free to tweet your hearts out. I’d like to talk to you today about the hardest problems in computer science. Very serious. You may have heard that there are two hard
things in computer science. Cache invalidation and naming things. And off-by-one errors. [Audience Laughs] I can’t take credit for this. It’s been passed around
through a lot of hands. It’s originally attributed
to Phil Carlton. These are technical problems, and it’s true, they are hard. Perhaps we’ve run into them, any of us who are programmers. But I think they’re
also very hard problems when it comes to diversity and inclusion in the tech and computer science space. What I’d like to do today, is to have a conversation with you all about what these problems mean when considered in the light
of diversity and inclusion, why they are so hard, and hopefully, what we can do to go about solving them as individuals and as a
community all together. Let’s start with cache invalidation. What are we talking about here? Cache and validation generally has to do with trying to improve
performance of your application. Let’s say, you want users to have a fast experience loading your web apps, so the first time they download some data, you’ll cache it locally so that the next time they try
to access the same data, it happens faster. But, that data goes stale. Something changes on your website, and the user has a cache that’s no longer accurately representing
reality of your site. That data in the cache
needs to be invalidated, it needs to be removed. This is kind of something
that happens to us, as people as well. We have something sort of
like a caching mechanism. Nobel laureate Daniel Kahneman wrote this best-selling book Thinking. Fast and Slow. He describes two systems that
we use for making decisions as humans. One of them is very fast, very performant. But it’s based on intuitions, emotions, heuristics that aren’t necessarily accurate
representations of reality. So, system one, can make very fast decisions, which is super useful when
you’re being chased by a predator in the woods as an evolutionary being, but, it means that the decisions
you make aren’t necessarily the best ones, aren’t necessarily based on
assumptions that are logical or truthful. We do have a second system, which is logical, more deliberative, perhaps better enabled
to give us an accurate picture of reality, but that one is really slow. Not performant at all. So, we tend not to use it as much as we like to think that we do. How does this affect our
lives in the tech world? Really quick! Picture a software engineer in your head. Okay, I don’t know what
you have in your head, I know what I have in my head. And even though I am a software engineer, it doesn’t really look a lot
like what I see in the mirror. Even though I know tons
of software engineers that look more like me than the stereo typical picture
that I have in my head. Unfortunately, a lot of other people also have these kind of stereo typical images in their head. Recently, Ola Gasidlo, who is also a Berlin-based
engineer for Mozilla, tweeted that, at the border security she was told, “You are not an engineer.
You are too pretty for that.” Because apparently, someone had a cached image
of a software engineer that didn’t include being
pretty or looking like her. That’s invalid. We need to chUck that out. We need to re-download our representations of what people in the world of tech and computer science especially, but also, generally look like, or behave like, or dress like. So, what can we do about this? Well, Sailor Mercury in a blog post on Medium, called Coding like a girl, which I believe was
also an AlterConf talk, gives a really great piece of advice. She says, “Instead of assuming what
someone’s position or career is, ask, ask politely, and don’t act surprised at the answer.” Now, not acting surprised
is a crucial element here, almost as crucial as
asking, instead of assuming. The Recurse Center is a fabulous inclusive programming
community in New York City. I was lucky enough to
participate in it in 2015. They have a set of social rules
that try to keep the space safe and welcoming for
anyone from any walk of life, who’s trying to become
a better programmer. One of their rules, which I love, is called No Feigning Surprise. Feigning surprise is this thing. Maybe you’ve encountered it. Maybe you’ve done it.
We all probably have. It’s when someone says that they don’t know what some
technical concept is. Let’s say cache invalidation, and someone else says, “what?! You don’t know what
cache invalidation is?!” Oh my God, that is the most
shocking piece of information I have ever received in my entire life. It shouldn’t be that shocking. It shouldn’t be shocking at all. Even if you are actually surprised, don’t show it. Don’t act surprised. Just say, Cache invalidation is,
blah blah blah blah. And then they know. And then you know that they know, and everybody knows and everybody learns and everybody’s happy. Simple. Those are a couple of solutions. What solutions might you have? This is where I would love for
everyone to take one minute and chat with your neighbors. Do you have any experience
with this issue, any ideas how we can
help solve this problem? Go! Oh come on. You don’t wanna be friends? Make new friends. If you don’t feel comfortable talking, just use this moment to
think about it yourself. Okay. Awesome. So, I hate to cut the conversations
off because I see and hear a lot of engagement. That’s fantastic. Great that we have more
breaks coming up later where we can continue that conversation. For now let’s move on to the next problem. Naming things, or people. In a study of a computer
software source code, Deisenbock and Pizka, researchers, found that the majority of source code, about 70%, consist of identifiers. Names for concepts. They come to the conclusion that, therefore, the names that we choose to identify these things in our code are
of the paramount importance. For the readability of that code, the comprehensibility, for being able to reason about it. Yet, how often do we come
across names like this in, let’s say, code examples, documentation, this is python syntax,
but it doesn’t matter. I’m defining a function. It’s called foo. I have a string, “hello, world”, and I’m assigning that
to a variable called bar, and then I’m printing bar. Foo, bar. Do these names mean something? No. They’re often used in
introductory examples, to stand in for, any function, any variable. However, that sort of assumes that you’ve somehow become familiar with the use
of these strange little words to mean any function that you want. Any variable that you want. That is already making… It is kind of relating back to the cache invalidation example, That’s already making an
assumption that you have some familiarity with
these known nonsense terms. When I was starting to learn the code, I remember being so
confused by the examples in my introductory
programming text book because, I was like, “Am I missing something?” “Am I supposed to know what that means?” “It doesn’t mean anything to me”, “What’s happening here?” So, this is one way in which
names actually in our programs can be exclusionary in a way that perhaps we’re not thinking enough about. But it’s not just the names
of things in our code, it’s actually names of coders themselves that also matter a lot. In a rather disturbing, I think, study, called Gender differences
and bias in open source, researchers Terrell et al., found that, women contributing to open
software projects on GitHub, were considered better
coders in the sense that, their pull requests were
accepted more often, if, their profile used a gender-neutral, or non-gender identifiable handle. If they had a username
which was not identifiable as a feminine name. On the other hand, if they had identifiably female name, their pull requests
were accepted less often than males. So, it doesn’t matter
just what your code says, it also matters what your name says when you’re presenting that code. This, I find problematic. I think a lot of other people do, too. So, what can we do about
these naming issues? The code one is pretty simple to fix. Just use the names that
actually describe the things that they are talking about. If I had a string called “hello world”. And I want that to be a greeting, and this function is
supposed to greet the user, I can call it greet user, instead of foo. I can call the variable greeting, instead of bar. These are self-explanatory names, that means they’re more inclusive, they’re not making assumptions
about the background of people approaching this source code. And as for the username issue, a lot of folks are tempted
to change their name, or use a more neutralized name. So far, we’ve just been
talking about gender, but of course this could apply to, if your name has an
identifiable ethnicity, or as identifiably from a certain region, you might be tempted to neutralize it, or white-wash it, such that, you would have better reception of the code that you’re presenting. However, I think GitHub contributor
and software developer, and fellow Recurse alum, Heather Booker, makes a good point when she says that, “continuing to publicly
present as a woman, (or whatever your identity is)
is important for solidarity.” It’s important to be
identifiable to other members of your same group, who might also feel
excluded in that community. That’s gonna tie in to our last point, which we’ll look at in a moment. But for now, let’s take another
break from our sponsors, you, (giggles) to exchange some ideas about this one. Take one minute. Alrighty. Okay. Thanks everyone for
participating in this discussion. For those of you who are not
feeling like participating in the discussion, again, totally legitimate. Hopefully this gives
you a moment to reflect. Alright, I hope we’ve got some good
ideas floating around. I know I would love to hear them later, especially when it comes to
GitHub handles and things, ’cause I’m always feeling
like I need to change mine. For now let’s move on to the last problem. Off-by-one errors. In a technical sense, this problem is sometimes highlighted with a little riddle like this. “You want a fence 30
meters long with fence post spaced three meters apart. How many posts do you
need for your fence?” If you thought, 10, because 30 divided by three is 10, you are in really good company. That’s what I thought
when I first read this, but I was forgetting that, each three-meter section
needs one post on either side, so that means the last
one needs an extra one, so, eleven. Off-by-one errors. They
happen all the time. My code’s full of them. Don’t tell my boss. (audience laughs) I have a version of this riddle
I’d like to present to you. You want an engineering team with diversity “diverse” members. How many of those diverse
members do you need? (audience laughs) Trick question. There is no such thing
as a diverse member. There’s only diversity within the group. But, unfortunately, a lot of companies seem to have this, off-by-one error in their hiring practices where they think that
if they have one member that’s different from everyone else, who is homogenous, that, that somehow
makes it a diverse team. However, this is problematic. As Engineer Kelly Ellis pointed out, “Lack of diversity has a snowball effect. This should be obvious. No woman wants to be the first
one on at team of 30 men.” And this applies to
all other groups where, you don’t want to be the first, the only X, on a group of 30 Ys at all. This is unfortunately a
situation that many of us in the tech world find ourselves in. I happen to be the only woman in my team, and when I was hired, I was the only woman
employed by my company in an engineering role. It’s not that fun. One becomes hyper-aware. This was also an experience
that Gloria Kimbwala had, she’s an engineer at Square. She recalls that in university, “My path through technology
and through computer science I was always very aware
that I was the only minority and the only woman in all of my classes.” This is something that when
one feels the odd one out, one becomes hyper-sensitive, hyper-aware of one’s different status. This is problematic for things like, stereotype threat. Stereotype threat, my friend, Khalid, defined very succinctly last week at JSConf, He defined it as, “When people are in a situation where they feel at risk of conforming to a negative stereotype
about their social group.” This is the kind of thing where, you’re afraid, by being the only X, that any mistake you make, or any negative judgment that the people around you make about you, is going to reflect not
just on you as a person and as an individual, but on your entire group. Whether that be your gender, your ethnicity, your sexual orientation. Whatever the different factor is, you’re afraid that, that negative judgment is gonna come at, not only you, but everyone in your group. This can be really a crippling kind of weight on someone when they’re trying to
go about their daily job. What can we do about
this off-by-one error? Well, we talked about solidarity
a little bit earlier, where a GitHub contributor said
it’s important for people to identify what group they’re in, so that others can notify them. This comes up again in
a tweet by Amy Nguyen, who’s an engineer at Pinterest. She proposes a “Mental
health Bechdel test for women in male-dominated fields. Have I talked to another woman today about something related to my work?” I don’t know about all of you, and again, we can replace Women with My group, I don’t know about you, but I have a very hard time finding days when I can positively
answer to this question. It’s important however, that we find each other, that we find people in our same group doing what we do. Whether that be in our company, or if that’s not possible, online, in communities, in slack channels, at conferences, like this. It’s really important
that you find those people so that you don’t have
those feelings of isolation. However, there is only so much that an individual in the odd one out position can do. The community as a whole also has to do something about this. As Christina Sass, CEO of
Andela, points out TechCrunch, “There’s a simple solution
to tech’s gender imbalance, hire more damn women.” Again, we could look at this from any other diversity spectrum as well. She, in this article, lays out some very concrete, very practical strategies
for how she achieved very ambitious diversity goal targets in her hiring at her company. We still have a couple of minutes. So, time for another break. Time for more getting to know
your neighbors. (giggles) Okay. Awesome. I really enjoy hearing
this lively chatter. Unfortunately, I’ve been standing up here this whole time and I haven’t really been able to make out any individual ideas from y’all. So, I’m wondering, would anyone like to
share perhaps one idea that’s come up in conversation of any of these three problems today, that they thought was particularly good, particularly worth sharing? Any takers? Okay, great. I’m just gonna try to repeat that. One is to set goals that are better than the overall diversity in the
industry, and achieve those. Excellent aim. Second one is to take existing
role models in the community, and when they are women, or perhaps from other
underrepresented groups, to make that visible so that everyone in the community identifies them as being from an underrepresented group. The example was Sandi Metz
from the Ruby community. Excellent. Thank you for sharing. Yeah. – [Audience Member] We had
an interesting conversation about hiring more women, and that companies often
are just poaching women from other companies, there’s this problem of, maybe there’s not enough women to hire, the answer to that, or one answer is, as a community, we should be generating
more women engineers, and Rail Skills is an
amazing program for that, that the whole community is behind. – [Anjana] Thank you, awesome. I will also add the Clojure
Bidge community to that. We’ve got some organizers here. Another great initiative, teaching women to code with Clojure. Alright, thank you so much for
sharing all of your thoughts. I hope this has been a
productive discussion, I know it has been productive for me. Again, I’m Anjana Vakil. You can find me on twitter, or you can come grab me afterwards, and thank you so much for participating. [Applause]

Leave a Reply

Your email address will not be published. Required fields are marked *