A party I enjoyed for a change
Even though parties usually make me miserable, I had a good time at a housewarming party for Sushu's friend Christie last night. Even though I didn't know practically anybody.
Not sure why that was but it was a nice change. I was able to strike up small talk with random people quite easily, I wasn't self-conscious, and the people seemed interesting.
Oh but there was this one guy there. He had just come back from 14 months of teaching English in Saudi Arabia. So that's pretty interesting. I asked him a lot of questions about it, and he just kept bringing everything back to how much Saudi Arabia sucks and how stupid and terrible all the students were. He didn't have a single good thing to say about anybody. He actually said:
"As soon as the oil runs out they're all going to go back to being cannibals."
Which made my jaw hit the floor. That's one of the worst things I've ever heard anybody say.
Granted, there probably are a lot of really terrible things about Saudi Arabia, but I think this guy just had a terrible attitude. I remember his type from the JET programm: There were all these people who went to Japan and then did nothing but complain about it for the whole year. Like, can't you find anything to enjoy about living abroad, and if not then why are you doing it? It was mostly the type of person who was not especially interested in the culture but was just bumming around from one international job to another, trying to avoid starting a proper career or getting serious about anything.
All the rest of the people there were cool though. Almost all of them, at least 3/4, were teachers, because teachers make up Christie's social circle. I know just enough about teaching to have a conversation but not so much that I'm bored by stuff I've already heard before. It was nice to be able to start a conversation just by saying "Hey, are you a teacher too? What subject?" and going from there. It might have been this easy way of starting conversations that made the party fun, or maybe it was just my mood yesterday.
Christie's sister, who is training to become an English teacher (this led to a fun conversation about the best and worst books we had to read for school) brought over some of her paintings, and they were pretty amazing. They're huge and detailed and colorful and done in a crisp, chunky style inspired by stained-glass windows.
You know what else was really nice about this party? NOT TALKING ABOUT THE SOFTWARE INDUSTRY. No APIs, no IPOs, no venture capital, no patent lawsuits, no startups, no iPhone apps or Facebook widgets. It was amazingly refreshing.
I really need to hang out more with teachers and artists and less with silicon valley wonks.
HTML 5 Game Development Course
The course page will be here (still very incomplete).
I know some of you readers will be interested in this topic (Googleshng? Aaron?), so I wanted to give you early notice about it. There is a prerequisite task which you should try to do on your own before joining the course. If you're interested, you should try to do the prerequisite task on your own between now and April 25 so that everyone joining the course will have the same minimal level of understanding.
OK this really needs a name. And a domain.
I've done a bunch more work on that platform game. Now at evilbrainjono.net/platformer; the old link won't work.
I've added background music and sound effects, background images and platform textures, and the ability to customize any of these things plus customize your own character animations just by pasting in a URL to an image or sound file. There are monsters now, which kill you in two hit points, there are Pointless Trinkets to collect and a couple of rudimentary power-ups, new types of platforms, and numerous physics improvements.
I ran a hack session at the Mozilla Festival and got some really amazing contributions to the game from participants -- new monster graphics, animations, moving platforms, physics tweaks, jumping monsters, a button that opens a trapdoor, and more! One guy even adjusted the control scheme to make it playable on his iPhone in about 15 minutes. (This is the really great thing about making games on the web: you don't have to care what operating system your players have and you don't have to care about app-store approval. The platform is no obstacle.) All of this in about 2 hours; it was a nuclear chain reaction of creativity. You can try out most of these new contributions in the level editor.
I folded all the new stuff into a demo level and showed it off on stage in front of 600-ish people during the closing session. I talked about using it as a vehicle for teaching kids game design, animation, and (once I get the monster/power-up/obstacle source-code-editor working) programming. Doesn't have to be kids, either; it can be for anybody who's new to these things.
The reaction was way more than I expected, and after the presentations were over there were like three different people who wanted to interview me for their blogs and podcasts. Anyway long story short this project is suddenly getting a lot of incoming attention and I need to put it on a real domain instead of hanging it off the side of evilbrainjono.net.
So, like, I really really need to pick a good name now and register a URL. I need your help! The following URLs are all unclaimed as of today. Do you like any of them? Or do you have other suggestions?
The biggest obstacle to learning programming
You know, the whole "integration" thing. Getting almost anything useful to happen on the internet beyond static web pages requires knowing how to at least get a web server talking to a database, or how to call operating-system APIs and/or browser APIs, for networking, graphics, etc. And most practical projects these days will involve stuff happening in several different languages on several different computers. Calling other people's code is the difference between a toy program you write for a class assignment, and an actual software product.
I spent a lot of time explaining the basics of APIs and how to call them, libraries and how to install them, how programs communicate across the network using HTTP or whatever, and so on.
There are lots of tutorials for explaining for loops, if-then, and functions -- but not tutorials for this kind of stuff.
And it's a huge oversight! After all, like half of learning a new language is learning how to use the library (module/package/framework/etc) system for that language - how to find other people's code that does what you need, how to install it on your computer, how to call their functions from your code. Learning th syntax of the new language is the easy part compared to that!
And APIs, man, what the hell. Sushu's looked at API documentation before, but didn't really know what an API is, and found the documentation cryptic and inscrutable.
I explained that API documentation sucks because it's written by programmers only under duress from their managers - programmers who would rather be doing almost anything else. It's usually out of date because the API gets updated but the docs don't. And worse, API documentation is always written for an audience of expert programmers - we assume that anybody reading API docs is already an expert, so nobody ever writes "My First API" for an audience of new programmers.
Meanwhile, we professionals put up with terribly written API docs because we have to - that's why we get paid the big bucks, because we can't give up and say it's too hard; we have to make it work somehow when it's integrated with other people's crappy and poorly-documented code. Writing code is actually a very small part of professional software development. It's the easy part! The harder and much more time-consuming part is figuring out how to interoperate with other people's code - looking up API documentation, installing libraries, resolving dependencies, deciphering error messages, etc.
I think most non-programmers would be fairly amazed to realize how much of a programmer's day is spent Googling stuff. Googling to find answers to questions like "Is there a Java library to parse JSON?" "How do I talk to a SQL database from Node.js?" and "Why is the Twitter API rejecting my OAuth credentials?".
We don't even teach this stuff in college computer science courses, not really. People either figure it out on their own, in the course of doing some other project, or they drop out.
Fellow computer programmers: We are failing really badly at teaching people how to program. Knowldege is power. By failing to teach, we're hoarding the power of computers for ourselves and failing to share it with all the people who could take advantage of it to improve their lives. Maybe some programmers like to think that what they do is really hard and really special and that most people couldn't do their job, but I disagree. Programming well requires learning some new habits of logical thought, but it's not fundamentally that difficult. We've been making better and better programming and debugging tools for ourselves over the years, we've shrunk the modify-run-test loop from hours down to seconds, the internet has made it easier to read sample code and to get help, and as we've gone from assembly to C++ to Python we've eliminated most of the non-essential complexity from our programming languages.
But people who want to learn are getting stuck. Not stuck on functions and variables and loops, because those are pretty easy, and there are actually a lot of good tutorials for them these days. No, people are getting stuck on APIs and libraries and all the other difficulties of talking to existing code, which are needlessly opaque and obscured by jargon. There are really good tutorials for learning programming but I can't think of any decent tutorial for learning APIs or libraries; there isn't even a good tutorial for learning what APIs and libraries are, let alone how to find, install, decipher, and use the right ones. There's a whole bunch of context that beginners are missing, habits of thought that they don't have, which they need in order to ask the right questions to find and use existing code that does what they need.
We're currently not offering any way for beginners to get past that wall. If somebody could solve that problem it would be a huge step towards making programming more accessible.
Teaching Programmers, not just Bro-grammers
I instantly fell back into the rhythm of teaching. Oh yeah, I remember how much I used to enjoy this! And the people are pretty cool. So I'm continuing to do it, for the time being. I didn't want to give them false expectations so I told them very explicitly that if I get into grad school, or if the Studio Xia Chinese game starts taking off, then I'm outta there.
So I've got a part-time job with very flexible hours; I can go in and teach for a couple hours one or two days a week and write a few assignments for their curriculum. It lets me pick up some extra money and more importantly gets me out and connecting with humanity on a regular basis, so I don't become a total hermit.
The students mostly look up to me since I used to have the kind of job that they're all want -- they're trying to break into the field that I'm trying to break out of. I am reminded of that kung-fu movie trope where the retired sword master is all like "Do not follow in my path, it leads only to violence and death" and refuses to teach students.
I don't want to crush their dreams. So I try to give them a neutral picture of what it's like, the good and the bad.
The class has about 20-25% women. Which is a really low number, but sadly, it's better than a lot of programming groups I've been in, which have been 100% dudes. Programming is still an extremely male-dominated field. As much as some people have tried to blame this fact on women just not being interested, I think the culprit is sexism, which still exists in both blatant and subtle forms. Sure, we like to think we're enlightened folks and beyond all that, but sadly we're not. For sickening examples, read the experiences that female game developers reported in the #1reasonwhy hashtag recently.
I want to be part of the solution and not part of the problem. I want to help make the class a welcoming and egalitarian environment, and I want to encourage the women in the class to keep pursuing this as a career and not to get discouraged and drop out. But at the same time, I don't want to treat the women differently from the men. It would be damn insulting of me to assume they need extra help because they're women!
I talked to Alexis about this dilemma last week, and she told me some facts about stereotype threat. It's a phenomenon where a member of a group that's stereotyped as bad at something (i.e. "Women are bad at programming") get really nervous about confirming the stereotype, which reduces their performance in a kind of self-fulfilling prophecy. It's been experimentally confirmed again and again. But experiments have also shown ways to mitigate it.
For instance, she said, getting people to talk as individuals about their personal goals and their reasons for wanting to take a class seems to reduce the effects of stereotype threat. And recognizing that not everybody communicates the same way, and that some students who need help might be really shy about asking questions for fear of sounding stupid.
The book Whistling Vivaldi is supposed to have some good insights for helping teachers mitigate stereotype threat, so Sushu and I have added it to our reading list.
So, I'm trying to get to know the students as individuals (luckily it's a small enough group to make this feasable), figure out their learning styles and their goals, and gauge what kind of help they each need. Students have a wide variety of backgrounds. Some have advantages that others don't, and it's got me thinking about privileges that male programmers take for granted.
Over the years I've gradually been learning to recognize my own privilege and how it's helped me get where I am. Like, because my family was (barely) able to afford a computer for me when I was a kid, I have a lifetime of tinkering experience to draw on. Just because I look and sound like a stereotypical computer programmer (young, white, male, communicates in sci-fi and video-game references), nobody ever sees me at a software company or a tech conference and questions whether I deserve to be there. If I wasn't any of those things, I would have had a steeper hill to climb.
The thing I want to talk about isn't any kind of blatant "get back in the kitchen" sexism (though that does exist in parts of the industry, no question). No, the thing I've noticed is a much more subtle phenomenon. It's not intentionally malicious but it still contributes to making programming culture exclusionary.
About the feeling of being overwhelmed by jargon: Programmers use tons of it. They redefine perfectly ordinary words ("function", "object") to have extremely specific technical meanings. Programming depends on precision of thought and so itthis lexicon of jargon is neccessary; without it, it would be impossible to communicate with enough precision. Problem is that programmers take the jargon for granted, forgetting that a listener might not know what ORM stands for, or might misinterpret "object" as its normal everyday meaning.
I told the class that the feeling of being overwhelmed by unfamiliar terminology is totally normal for programmers. I encountered a ton of brand-new bewildering gibberish at each new job, even after years in the profession. There's always a moment of panic: "They're talking about jQuery what the hell is jQuery oh no I don't belong here they're going to figure out I'm a fraud!" That feeling never quite goes away, but it gets less over time.
There's two ways of dealing with this: You ask "What's jQuery" and reveal your ignorance, or you fake your way through the rest of the conversation and then look up jQuery next time you're alone at your desk.
Now I think asking "What's jQuery" is the healthier course of action -- better to ask and look stupid for a moment than to not ask and remain stupid forever -- but it took me years to get comfortable with that. If you're already unsure of your social status in the group, then displaying your ignorance is really scary.
So to tie this back to the gender issue: women are less likely than men to have grown up in a social group that used a lot of technical jargon. They're also less likely to have been socialized to be assertive: our culture rewards a certain amount of cockiness in boys but punishes the same attitude in girls.
As a result, the kind of breezily overconfident, unthinkingly jargon-heavy communication style favored in male-dominated programmer culture can be quite exclusionary. If you're not used to the jargon, and you're worried about stereotype threat if you admit you don't know something, and you were raised not to fake confidence about stuff you don't know... well, I see how it can feel like a hostile environment, even if nobody engages in overtly sexist speech or harassing behavior towards you.
Programmers hold a lot of the levers of power in our modern age. Software runs ever more of the world. If the programmers are are mostly young white upper-class guys from San Francisco then most software will get written to reflect the interests and the unconscious assumptions of young white upper-class guys from San Francisco. So it matters great deal whether we make it easier or hader for people outside that demographic to become programmers.
My hypothesis for the day is that can, and should, make programmer culture more exclusive for people from different backgrounds, by doing things like being aware of diffrerent communication styles, not using jargon in a way that locks people out, not shaming people for not knowing a jargon term, etc.
I would love to hear your feedback on this theory, especially from women programmers but also from women who have taken programming courses, worked with programmers, or otherwise experienced programmer culture.