Blog

How to teach programming: shy, practical people edition

Mar 3, 2011 • Karen

Retrospectively, if any kid were going to grow up to be a coder, it probably should've been me. Genetically speaking, my dad had been working on computers since high school in the 1970s, semi-breaking into the school on the weekends to hack on the PLATO project and throw LAN parties with his fellow teenage geek buddies. Mom had a minor in Computer Science (which was how she met my dad) and worked as a tech writer writing manuals and documentation. Growing up, since Dad was a software engineer at Apple, I *always* had access to computers. At age two After Dark was my favorite program; I could watch the screensaver fish or flying toasters forever.*

Dad tried to teach me BASIC when I was young, maybe 8 or so. I caught onto the syntax pretty quickly, but I had no interest in working with it; to me, interesting computer programs were Number Munchers and ClarisWorks and Kid Pix. They had a UI and could clearly be used for something fun and/or useful. In BASIC, I could make sequences of mathematically-significant numbers. Bo-ring! So, *obviously*, I wasn't going to be a programmer when I grew up.

Except, at the same time, in elementary school I was creating huge, elaborate games in HyperCard and HyperStudio. I took a summer class on HTML at age 11 and promptly built a personal website full of animated GIFs and thunderstorm photography. As I know now, I was *totally* going to be a programmer, at very least on the front end. But at that time I didn't see any of the stuff I liked as coding! Coding meant mathematical curiosities and text-based toy programs.

This perception largely continued through college. During my sophomore year I decided to take the first two CS courses (5 and 60) for fun, mainly because my friends at Mudd had taken them and raved about the professor. Prof Ran was, in fact, amazing, and I was glad I took the classes for background's sake. But again, it was all context-less toy programs--a Towers of Hanoi solver, a command-line-based Connect Four player. The "coolest" thing we did was write a Centipede clone (I added the SkiFree yeti to my version as an additional obstacle :D) that you could host on your student website via a Java applet--and all the applet code was provided in whole without explanation. Additionally, it appeared that my chemistry curse (that everything that could go wrong did, and even if nothing could go wrong, the laws of physics themselves would break to make my experiment fail) applied to CS as well, given the number of weird errors I encountered in the homework that not even the TAs could figure out. Since our grades were predicated on turning in compiling, working code at midnight (late submissions got zeroes), my worst grade in college ended up being CS 60. So I took that as a signal to give it up.

Instead, I took all the front-end / digital media classes offered in my home campus' art department. Disappointingly, though, those were almost entirely Dreamweaver and Flash-based, with only an elementary coverage of HTML and CSS and no scripting at all. I ended up spending all of "Intermediate Web Design" flailingly trying to teach myself PHP, since I already knew more code than the art professor who taught the class. There simply was no course offered that covered the wide space between CS and art, no 'How to build a dang web application.' Obviously there *had* to be connections between functional code to the UIs I was accustomed to, but I had no idea how engineers did it and no way to learn. So I pretty much gave up on the discipline.

Basically what revived my interest was having the opportunity to work on OpenHatch. Getting thrown into web app development and all the associated languages and tools--Python, Django, git, Agile, bash and other command line nonsense--all at once? Yeah, it was a lot. But Python out of context is just a toy. Django out of context is plausible, but hard. Git out of context...wouldn't've made any dang sense. So sure, I couldn't remember half the git commands (Asheesh eventually made a wiki page for me :P) and I had to look up how to restart the Django development server practically every dang time. But I made do, and I learned it, because the context totally freaking motivated me to. Because *finally* code had a purpose--it was clear, finally, how it could be self-expressive and useful to me. Learning these tools meant I could help make OpenHatch exist. Like, fuck yes.

Obviously, other people don't feel the same way about coding and CS that I do. (If everybody did, there would be no CS majors!) Lots of people appreciate the beauty of code and of pure CS problems in themselves. Which is awesome. And I do too, to some extent. But I don't research the history of masterpieces or do experimental art--I draw pretty things. I never studied music theory--I sing. The routine conflation of English literature and writing coursework (NOT the same thing, DAMMIT) makes my brain explode. Asheesh once gave a talk on "Debian for shy people" and often talks of "programming for shy people" generally. I happen to be not just shy but practical, too. And it took intense personal mentoring via OpenHatch and integrated non-traditional-CS 'how to build a web app' curricula via IOLab and Rails Outreach for Women for me to finally feel empowered enough to call myself a programmer.** Just a shy, practical one. :)

* Fun story from my dad: When I first saw After Dark, it was running on Mac OS System 6, with an add-on that made the control panel a hierarchical menu. Even at age two, I could mouse through it and turn the screensaver on myself. Then Dad installed the System 7 beta, which turned the menu into a folder, so the control panel would no longer pop over to the right when you clicked on it. Nonetheless, I apparently instantly figured out to release the button to open the folder, then double-click on After Dark (when before it would have been a single click). Dad passed along to the System 7 developers that the graphical cue of a window appeared to be enough to get users to do the right behavior--at least, two-year-old users. (I (today) told Dad that Apple should've used me in their ads--"So easy a two-year-old can use it!")

** It also helped that in my new grad program, everyone seems to think of me as being super-technical. Like, sure, I guess I had more experience with this stuff than many of my classmates going into 206 last semester. But me, "technical"? It feels as if Velma were "the hot chick" in the Scooby-Doo gang--bizarre, though also awesome. Imposter syndrome, engage! :P