The Dojo in Your Mind

I just read Brian Gilham's piece, You Don't Need a Computer Science Degree, which simply makes the point that prospective iOS developers (or let's face it, any developer) don't need a computer science degree to become successful in this field.

As the holder of a bachelor's degree in English and a Master's degree in Publishing, I can't help but agree; but I also find myself moved to expand on that point. After all, the study of computer science is, at heart, an academic pursuit into the workings of computational devices. The skills you pick up during that pursuit are often applicable to the modern job of programming, but I think a comp sci degree makes you wildly overqualified for being a paid app developer.

Here's an analogy from a different world: imagine you wanted to be an electrician. You could take physics in university and understand the underlying principles of how electricity works... or you could attend a trade school and learn the practical skills.

Yes, I do think of programming as a trade, not unlike electricians, plumbers and carpenters. And like those trades, there are many paths to becoming one: a college diploma, apprenticeship, or self-teaching.

Brian's reference to Bitmaker Labs in an earlier piece points the way to a trade-school-equivalent for programmers. I can't speak to the quality of institutions like Bitmaker, but I can say with confidence that formal instruction alone won't qualify you for this type of work.

You've heard it before: "programming is hard". It is.

I mean it: programming is fucking hard. I think the only way you can be truly successful with it is if you have flipped a switch in your brain that will simply not endure a world in which you don't become good at programming.

It's easy to gloss over how much work went into my journey from novice to professional programmer. I've been doing it since 1999, and you can do the math and say to yourself, "wow, he's been programming for 17 years", and that doesn't get to the heart of it at all.

In those years there are periods where I'm fixated on getting something to work. I'm poring over books, scouring web forums, sitting on the toilet thinking about it, talking it out in the shower, noodling the problem in my head while I'm vacuuming the house, losing sleep at night, staring off into space while I'm eating dinner, and constantly, always, always, always coming back to the computer to push it one pixel further.

I would have to push myself to sit in front of the computer sometimes, at night after working a full day at my day job, just to keep learning, keep improving. It's a terrible slog.

And it's all in your head. This period of learning reminds me so much of my youth learning karate. I went into the dojo a cowering weakling, the constant victim of bullies in school. Over a few years I gained the skills to hone myself into someone with confidence, poise and, perhaps, a certain look in the eye that made the bullies move on to another target.

I hated karate. I hated the physical fitness, and the fighting. But it was a place where I forced myself to be, to improve and be better.

Fortunately, I fucking love programming. Like, in a weird way. I can't not program. Which is why all that suffering and pain over the last 17 years (and counting!) is the best way to become a programmer.

You can take a course and get a nice piece of paper from Bitmaker Labs. You can hang out with another programmer, "pair" with them for days at a time. You can read a book.

But you're not going to be a programmer unless you accept no world in which you are not a programmer.

As a postscript, I'll read to you from the book of Hillegass, one of my first programming books. Two passages in the beginning are particularly relevant:

All sorts of people come to my class: the bright and the not so bright, the motivated and the lazy, the experienced and the novice. Inevitably, the people who get the most out of the class share one characteristic: They remain focused on the topic at hand.

And on the subject of being smart enough:

...stop thinking about yourself. While learning something new, many students will think, "Damn, this is hard for me. I wonder if I am stupid." ... Before going any further, assure yourself that you are not stupid and that some things are hard. Armed with this silly affirmation and a well-rested mind, you are ready to conquer Cocoa.