Learning to program a computer is hard. While you can learn to make useful things in a few months, mastery may take a decade. It’s not like learning to bake a cake or shoot a video. It’s more like learning to play a musical instrument. It takes years of practice to get really good — or in the programmer’s case, tens of thousands of lines of production code. Meanwhile, you’re going to make the neighbors’ ears bleed.
Why would anyone do this? I think the reasons people invest such insane amounts of time in such a specialized skill are shifting. And I think that shift is healthy. It’s a shift in what it means to be a technologist. And the culture of our technical communities is shifting with it.
I learned to program in high school, early 90s. Looking back, I think my formative experiences as a technologist were pretty typical for my generation of programmers. I had three or four close friends in high school who also liked computers. They were all male. This was the dawn of the internet, around the time of the very first web browsers, and long before the first tech bubble made geeks into rich visionaries. We were not remotely cool. Technical information was somewhat harder to come by than today, but not excessively so. My first C++ compiler shipped in a big box which included a thick paper reference manual and a really nice language tutorial. We subscribed to Byte and Doctor Dobbs’ Journal. We hacked on stuff at lunch time and after school and weekends, and traded shareware on floppies. The technology was different, but the substance of the experience was much the same as today. We spent a lot of time at the computer, and we were well-connected into a community of like minded people. The community provided technical help but also motivation and inspiration.
We weren’t trying to change the world. We were driven by an intense curiosity about the inner workings of machines, and we wanted to be admired for being good at something. I wrote the Windows port of Netrek, one of the very first multiplayer online games, and the local geeks knew who I was when I arrived at the University of Toronto. This kind of experience persisted through my undergraduate years studying computer science. Long nights in the computer lab; cool hacks. There’s a wonderful book which captures this culture as it evolved starting in the late 1950s.
There were no women in the communities where I learned to program. Or, almost none. I did a head count in one of my classes: four out of 150 students. Sadly, this kind of ratio persists today in many technical fields. I didn’t really know why this was. Us nerdy boys would have welcomed geeky girls. For all sorts of the right and wrong reasons.
It’s only in the last few years that I’ve started to understand why the dominant nerd culture drove women away in droves. Simply put: it was a club full of very poorly socialized boys, and our peer-based motivation was all about status. We all wanted to be the alpha geek. We would jump all over each other to point out errors. We would never miss a chance to demonstrate our superior, elegant technical minds. We were completely insufferable to anyone else.
Fortunately, there are now more women in tech. And they’re starting to tell their tale. While I don’t want to generalize too much from the experiences of a single person, I found the account of Rebekah Cox to be really enlightening (there are lots more great stories in the same thread):
So, if you enter this environment as a woman without any sort of agenda or understanding of this culture the first thing you find is that if you actually say something the most likely reaction is for a guy to verbally hit you directly in the face. To the guys this is perfectly normal, expected and encouraged behavior but to women this is completely out of nowhere and extremely discouraging.
As a technical woman, this is your introduction and the first thing you have to learn is how to get back up and walk right back into a situation where the likelihood of getting punished for participating is one. How you choose to react to this determines the rest of your career in technology.
Now, I don’t want to give the wrong impression. It wasn’t all one-upmanship and verbal assaults. These geek scenes could also be wonderfully supportive, and often served as social groups too. You have to remember that this was before computers were cool, and it was an awkward adolescence when you were interested in things you couldn’t begin explain to anyone else. Also, it was a great learning environment. Cox again:
Even the aforementioned nerd trash talk is actually a useful tool that can help you. The reason that culture exists is to make everyone in the group better. The fact that you are getting hit in the face means that someone is either wrong and you can hit back with a correct answer or that you are wrong and someone is letting you know that directly. Sticking that out means you are learning in an accelerated environment with instant correction.
Furthermore, if you stick around long enough, you can find people who aren’t completely insecure and are confident enough to not resort to insults to assert themselves. Those people make the tough environment actually tolerable. If you can help each other then you can establish a safer zone to talk through ideas. And since those more secure people are typically so secure because they are really, really good, you can find yourself in an informational jet-stream.
In this artificial high-pressure environment we got good fast. But it was certainly off-putting to women, and not just women. Lots and lots of people wanted no part of this, and for good reason. Yet for quite a long time it was these sorts of socially dysfunctional communities that produced the lion’s share of the best technologists.
Learning to program is still ridiculously hard, and still requires a community of practice. And it still requires an absurd focus and motivation. But the sources of that motivation are broadening. I’ve been watching this shift for a while. The notion of programming for the social good has even crystalized into institutions such as Random Hacks of Kindness (for international development), Hacks/Hackers (for journalists), and Code for Amercia (civic platforms.) For that matter, there’s Wikipedia. There are services and data all over the web. We don’t have to wonder whether software can change the world — it already has!
So by my old-school standards, the burgeoning hackers of today are very applied. I grew up desperately curious about the insides of things. Many of the programmers getting started now are far more extroverted than that. Here’s MIT Media Lab fellow Lisa Williams:
I want to learn to code because a lot of things piss me off.
I believe a program can stand in opposition to Things That Suck, just like a documentary, a work of art, or a protest march.
I wanna code because SHIT IS BROKEN. I want to code because corruption is real, because people are getting thrown out of their houses, because veterans aren’t getting what they deserve, because racism is real and has real effects, because yes it does matter when you cancel a bus line, because it’s really hard to shut a computer program up, because you can’t say it’s an isolated incident when there’s a bigass Google Map in your face showing you it’s not.
This is Lisa demanding “computational journalism.” But pretty much every field of human endeavor uses lots and lots of software now. Software not only determines what is possible, in many ways, but what is not possible: code-as-law. It’s part of the system, and if you want to hack the system, well, at some point someone has to hack the code. That person could be you.
At the Online News Association conference last week, I ran into Michelle Minkoff and Heather Billings standing in front of couple dozen enthusiastic young journalists who had gathered in the hallway to hear about programming. Michelle works with me in the Interactive department at the AP, while Heather just started at the Chicago Tribune. Both are fearsome technologists, though I don’t think either would be offended if I said they are still near the beginning of their journey. That makes them the perfect people to talk to about learning to program.
Most of the people attending had some programming experience, but not much. There were 24 people listening to Michelle and Heather, 9 of whom were female. A great improvement. I sat in on this conversation for a while. It wasn’t what I was expecting. No code. Very little technical discussion at all actually. One woman said she knew enough Python to write a Hangman game. “Great!” said Michelle. “You’re ready to learn Django!”
I guess I’m surprised anyone has to be told that they are ready to learn to program. But inclusion and connection was a major theme in the discussion. Here are some of the snippets of conversation I wrote down:
“You can make an anonymous account on StackOverflow and ask stupid questions.”
“Connect in person, build that mentor relationship.”
“But that documentation is for developers!”
This was a group of people who needed to be told that they could learn to program. That they could be one of them. This is understandable. When you can’t begin decipher the supposed “instructions,” technology can seem like an occult priesthood. But you don’t need them. You just need to want to do it, really badly, and you need to find some other people who want to do it badly too (and obviously, expect to meet these people online.) Then one of them becomes one of us. Of course you can learn to program. It just takes a while, and a stupid amount of practice.
In fact it’s probably necessary to devote a few years of your life to it full time. That’s one of the advantages of a computer science degree — time to focus. Also, a CS degree is a fast track to the deep theory of computation; if you find yourself looking at programming languages and asking why they are the way they are, or staring hungrily across the awesome gap between your web apps and a search engine, you probably want to learn computer science, and formal education is one way to do that. But CS theory won’t make you a programmer. Only programming will do that.
Every truly good programmer I have known had some period of their life where they thought of nothing but code. Something around a year or two. It’s got to get under your skin at some point. I call this the hacker gestation period. You’ll know you’ve reached the other side of it, because software will stop being mysterious. Eventually code becomes clay.
And this formative period is why it’s so important to have a community. You’re going to need friends who are interested in talking about geeky stuff. You’ll be so excited about it for a while that you won’t be able to talk about much else. (Really. If this is not the case, go do something else. Programming takes so much soul that you’re going to hate your life if you don’t genuinely enjoy it.) Your community will help you when you get stuck, and they will help you develop your sense of style. Code is the most obscure art, because only another programmer can see all the layers of beauty in a truly lovely piece of code. But it’s very hard to become an artist alone, without influences and critics.
So it takes a village to make a programmer. I won’t say that our technical villages are now inhabited by “normal” people, by any stretch of the imagination, but the communities where programmers are now growing up seem far more diverse, supportive, and extroverted than in years past.