Learn to program, then and now

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.

Back then
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.

Enter women
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.

Why program?
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 realbecause 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 linebecause 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.



9 thoughts on “Learn to program, then and now”

  1. This was fantastic, thank you.

    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.

    So, my underlying bet in spending time teaching myself to code is this: in order to produce something meaningful from a news standpoint…well, my bet is that I don’t really have to be a really good programmer to do that.

    Now, if I wanted to be employed as a computer programmer, I probably would need a few years of full-time work at it, and some formal training. But I have no desire for someone to hire me as a programmer, or to make my living at it. I want to create things that make a point, that clarify important issues, or that make people laugh when the emperor has wandered out without his clothes again.

    And, since news is the plural of “new,” we’ll probably end up making a lot of visualizations and one-off apps that don’t need to last the ages — because we’ll throw them out in a week.

    So I think you’re right when you say “being a programmer” takes years — if by “being a programmer” you mean making a living at programming.

    To make a point with programming? Well…I don’t have enough data to answer that question. Talk to me in a year and we’ll see.

    What I suspect is that, just as in other professions, there will develop a pro/am culture. Just as very few people run a marathon with the intention of winning it, there will be more people who want to program because they want the experience of making something, not of making a living at it.

    * My husband works at Google and has invested stupendous amounts of time in his craft from the age of thirteen or so. I know I’ll never even approach his level of proficiency — but I’m not convinced I have to to do the things I want to do.

  2. This should probably say:

    Now, if I wanted to be employed as a computer programmer, including at a news organization, I probably would need a few years of full-time work at it, and some formal training.

  3. Thanks Lisa, I think that’s a really good point. I guess this also has to do with the broadening of motivations. If there’s some specific goal you have with your code, and then you achieve that, maybe you don’t need to be a better programmer than that. There are certainly plenty of things I do as an amateur, and they’ve all made my life richer.

  4. This reflects what others have told me about the changing scene (I’m barely computer literate, and what I know is down to living with a huge geek). It seems like the culture clash is softening to some degree, and co-operative working is becoming more functional and healthy. More diversity in the crowd can only be a good thing.

    By the way, anyone can make a cake. To be a master baker, though, that takes years. To master ANY skill takes years. And we need to remember that it’s all about the level of skill and mastery brought to bear.

    Reinforcing that “programming is HARD” just puts people off in the first place – we have a culture in which we tell people that you’re either a genius in a particular area or you should stay clear of it, which is one of the reasons why we’ve such a fractured society. So if you want to build a more inclusive, diverse, and effective community of programmers, undermining a big lie that keeps people out in the first place is a good thing.

    My other half got into programming because he was: from a long line of well educated people who taught him from birth that maths and sciences were interesting and fun, and who nurtured his interest (check); socially awkward (check); which led to being bullied, so he withdrew into the “geek club” (check); and the family had the money and interest to buy a home computer in the 70s (check); and his parents allowed him to spend hours working on said computer (check). If he’d been poor, had parents who had terrible experiences of being taught maths and sciences at school and so lacked confidence around those subjects, his school or home had lacked a computer, or his parents had insisted on him being outside “in the healthy fresh air”, he’d have been more like a male version of me. So socio-economic factors, too, put up that “programming is hard” barrier.

    The truth is that most of us can learn most skills to some degree, given exposure and engagement and nurturing and time; though it takes a deep interest and the willingness to commit to do the work over time, and a truly committed support network to really master one. The ubiquity of computers now makes it increasingly likely that people from more diverse backgrounds will make it into the culture and change it further.

  5. By the way, anyone can make a cake. To be a master baker, though, that takes years. To master ANY skill takes years. And we need to remember that it’s all about the level of skill and mastery brought to bear.

    Well put, Kay. But I can still make a birthday cake for a family member that they’ll love even though I’m not a professional baker. I can make cupcakes that raise quite a bit of money for our local school. Thus, nonprofessional bakers can still use the skill of baking in a way that makes a positive contribution to their personal sphere, and maybe even to their community. I’m hoping that in the same way, people (me included) can learn to program well enough to improve their own lives and the lives of people in their communities.

  6. Haha, I’m the one said I can write a Hangman game in Python!

    I am an amateur and never intend to make my living programming. But I’m enough of a geek to learn code in my free time and on the weekend, because I see how valuable it can be.

    If I learn enough so I can finish a simple project on my own or just help recognize and develop meaningful ideas with the actual talented programmers, that’s enough. I definitely want to understand more than someone who asks, “Just make it clicky” like Heather Billings said at the Django session that she’s had people say to her.

    Lisa, I want to create things that make a point too.

Leave a Reply

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