I just ran across Karen Rustad’s “How to teach programming: shy, practical people edition.” She cared more about making practical things than about what she perceived as “coding,” so her early technical life centered on HyperCard and making webpages, rather than boring faffing about with “mathematical curiosities.” Finally she came across a project she wanted to help, and scratching that itch meant learning more programming:

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.

Different people learn in different ways, and for different reasons.

I figure I learn how to tinker in software, especially in open source, via three methods:

Google

gossip

gamification

I learn to search the Net well, iterating on keywords and site: and so on; I fall into or develop a network of folks who won’t think I’m stupid for asking questions; and I play little games with myself, or write them, feeling the thrill of the challenge, leveling up little by little.

I was missing all of these when I tried to Learn To Program.

I took one intro to CS class, my first semester at UC Berkeley, the fall of 1998.Â My dad had been telling me he really wanted me to become an engineer, and I knew a little BASIC.Â My sop to his wishes was taking the intro to CS class.Â The student teaching my small section was a woman — an undergrad getting her bachelor’s, a senior, I think, not a grad student.

In retrospect, I know I wasn’t trying hard enough, and was going through all the strange buffeting waves that accompany a sheltered girl’s first few months away from home and at university.Â And debugging exhausted and humiliated me; I read it as constant failure topped by a meager teaspoon of success, instead of enjoying the challenge and reading each quest as a hero’s journey. Guys on my floor of my dorm helped, but I was just at sea, and embarrassed that I needed so much help. (I’d arrived at college knowing two other freshmen — both of whom were in completely different course paths — and did not know any women concentrating on CS, other than that one teaching assistant in charge of my discussion/lab section.)

I passed the class, but wasn’t nearly confident or skilled enough to go into the major or even a minor — and that suited me all right, because now I got to say, “See Dad?Â I’m not meant to be an engineer.” and go major in something else.Â I eventually turned into a manager, facilitating open source work, and I’m happy with that.

Only a few weeks ago, a decade after this class, did I realize that it wasn’t just me that failed — the teaching assistant failed, too!Â She could see that I was struggling, and didn’t reach out to help me figure out how to learn.

That was 1998.Â I was an insecure teen, the Web and Google weren’t nearly as substantial and useful as they are now, and instead of play, programming only felt like a burden.Â I’ve dabbled since then, remembering to Google and gossip and game, creeping along towards a much less fraught relationship between myself and programming.Â And now I have Systers and Geek Feminism; I know countless technical women who teach me, and whom I can teach.

Since then I’ve learned a lot of domain knowledge about tech and myself.Â I’ve become familiar with software engineering from the perspective of a colleague, collaborator, and manager.Â And I’ve learned more about how I learn, and how it compares and contrasts with how other technical folk learn, especially other women.

And as I see that there are many models of successful learning — social and shy, intense and trickling, linear and spiral — my shame about my college failure leaches away.Â I’m not A Failure; I just tried that time that one way, and it didn’t work out.

The other day I talked with my spouse about how I think I can’t be a tech leader unless I’m a hands-on technologist, and he basically said, you’re a good manager.Â And yes, you’d be a better manager if you were also a developer, so work on that if you want, but it’s not going to make the anxiety go away.Â This concern is just a convenient box to put your anxiety in, and if it weren’t this it would be something else.

I think he’s right.

And in a sense this is freeing, just as it was freeing when my dad died — now, if I develop my technical skills, it is no longer giving in to what he wanted my career to be.Â Similarly, if I know that developing these skills will not necessarily cure my anxiety, then I can just do it for reasonable and positive reasons, like “power” and “domain knowledge” and “tinkering”.

If you want to help people like me learn coding skills, and get into open source, provide that community — someplace they can gossip without fearing that they’ll develop reputations as emptybrains. Put up cheatsheets on the web, so Google can find them. And — along with encouraging newbies to learn things that’ll improve their career prospects and empower them — gamify. Provide a mind-itch puzzle and just hint enough that they’ll learn enough to solve it.

If you want to help people like Rustad enjoy FLOSS and get into programming, make it practical!Â Show them how quickly they can whip up helpful tools.Â And make time for intense one-on-one mentoring, and show up to newbies’ workshops.

How do you learn technical material and skills?Â I’m especially interested in hearing from women who spend a lot of time in a technical domain but whose first attempt at learning it went awry.

About brainwane

Sumana Harihareswara is a geeky woman living in New York City and maintaining open source software, teaching newer coders, reading science fiction, writing technical documentation, and programming. She has managed programmers at an open source consulting firm, led the open source community behind Wikipedia, and co-edited a speculative fiction anthology. She dents and tweets as @brainwane.

Seems like I can’t learn a damn thing except by needing to tinker with Other People’s Code. I just can’t start from zero.

I first tried to learn XSLT by reading Alan Kay’s book. Alan Kay is awesome. His book didn’t teach me XSLT. If anything, it made me quite, quite sure that XSLT was beyond my meagre abilities.

Then the day came that DSpace (the software suite that, for my sins, the last six years of my career have been based on) moved from a JSP-based UI to a Cocoon/XSLT-based one… which (among other things) meant that several of the UI improvements I’d made would go away if I didn’t rehack them in XSLT.

So I damn well did that, cussing the whole way. And I actually sling XSLT pretty good now. It’s not crazy hard (except for mucking about with strings in XSLT 1; that’s agonizing). Alan Kay just does crazy hard things with it.

I’ve been thinking about this recently. I’m currently studying Computer Science (very slowly, very part-time) and one of the things I’ve noticed is that while I have no real problems with “learning to code”, I do have problems with “coding as a hobby” – and I definitely have problems with the assumption that one who is learning to code must pick up coding as a hobby. I tend to analogise coding with sewing: yes, I can do both of them pretty well at a basic level; yes, I can actually think my way through the design side of figuring out how to solve problems; but no, neither of them really appeals as a hobby, because they’re really aimed at solving problems other people have resolved already. I can buy clothing, linens and so on ready made, off the shelf. I can generally find software to help me complete a task if I just search around a bit, too.

Yes, okay, I’m never going to get the “perfect” suit off-the-rack, and neither am I going to be able to get the “ideal” calendar program or whatever off-the-shelf – but you know what? I don’t need the perfect suit, or the ideal calendar. I can make do with what’s available. I’m used to making do with what’s available. I don’t feel the pressing need to create something which largely duplicates someone else’s work.

About the only program I can think of which might be worth putting a bit of effort into these days is my notion of a spelling-and-grammar checking function for word processors which interacts with an online dictionary of the user’s choice and allows them to check whether the word they’ve used is the word they were actually looking for (or in other words, a homonym, homophone, and word usage checker). Now, that would be a nice little bit of playing to pull together (particularly since I have this lovely list of mistaken word pairs I’ve picked up through reading fan fiction over the last several yonks) and offer up as a plug-in for something like OpenOffice.org or similar.

However, given my total programming skills at the moment are very much basic C and very basic Java, I’m not seriously considering the notion. Besides, if I make this now, as a first year CS student, what the hells am I left with when I have to come up with something for my final year project?

Meg, I’ve been there, and right now I’m having an interesting experience where programming kind of saved my brain. I’m a software developer by career, but I was (am?) burning out and struggling with depression on top of it. I was DONE WITH CODE. I did not code for fun; I wanted nothing to do with a computer when I got home from work.

What happened was, at the height of this unpleasantness, I went to go see an art exhibit by an artist named Ryoji Ikeda. I was super impressed by this and wanted to go ahead and try creating some pieces based on his stuff. I’ve been obsessed with the Processing language since then (that was about a month ago that I saw this; Processing is based on Java, but it’s very C-like; the fun bit is that you can invoke “real” Java at any time within Processing if you need to do something the core library doesn’t support.)

What I’ve learned is that programming projects grow legs. It’s good to have a place to show off your work, because you can seriously flounder when you start everything and finish nothing. Structure brings satisfaction. If you create the tool that you have an idea for now, that will give you MORE ideas later — maybe you’ll want to make it standalone, maybe you’ll want to become more of an OpenOffice contributor, maybe you’ll get super involved in a related thing that you can’t predict right now, but running out of ideas will not happen. My only problem with Processing right now is finishing one sketch a week instead of starting 3-5 and finishing 0. openprocessing.org and local demo nights have been awesome for giving me things to work towards.

I think the main difficulty is finding a way to hook into an existing system such that you’re not totally overwhelmed. Like, I’m a web dev. I find large Java codebases really intimidating. You might start by creating those dictionaries in PHP or Python to have less overhead to contend with. Just really don’t worry about running out of ideas.

Although tangential to the main topic, I just wanted to say that being a good manager is so, so important. By doing that you’re contributing so much more than being yet-another-coder.

In my time I’ve met and worked with many brilliant programmers. Brilliant managers, on the other hand, hardly any. I’ve never known anyone who was both. In my experience at least, hot-shot coders are a dime-a-dozen compared to inspiring managers.

So please, all you great managers out there, be proud of what you do and keep on doing it. We need you!

I’ve never understood “coding as a hobby,” and I’m not sure that I think it is necessarily such a positive qualification for professional programmers.

I’ve dealt with a lot of programmers who were into all the neety-keeno-kool things you could do with computers, and I’ve found that they tend to produce overly complicated and not terribly reliable software. I think there’s something about having to deliver working software on a limited budget (esp. a limited number of programmer-hours), plus getting emergency calls at all hours whenever it doesn’t work, that teaches a certain discipline which produces objectively better software.

If you learn programming primarily as a means to an end, I think you end up being a better programmer for it.

The math puzzles at http://projecteuler.net/ have a forum that you have to earn your way into by solving the puzzle, so may not be that helpful for beginners. How would you all suggest a puzzle site with forum should be set up to be really appealing? (I need a new side project.)