Wednesday, October 25, 2006

Poverty is Better than Regret

I'm going to India in March. Yeah, it's funny how things work. Just a week ago, spending 17 days in India soaking up the culture couldn't have been further from my mind. But then I got a surprise email from my high school. They're organizing a trip to India for spring break (I know, much cooler than South Padre, right?) and they decided to extend the invitation to alums. The best thing about this is that it's being led by my favorite teacher, David Weidman. He was the theatre director back when theatre was the best thing in my life, and he was an indispensable mentor. For the purposes of this trip, it doesn't hurt that he was raised in India. I was conflicted, because the trip costs $3500, which is about $3500 more than I can afford for a trip of this kind. After considering it from a dozen sides, I decided I'd be crazy not to go. I asked my friend Mike for advice, and he said, “Poverty is better than regret.” Fuckin’ a.

Ass-First Programming

Full disclosure: I was an English major. As a programmer, I am one hell of a faker. I even wrote an essay about it a few years ago. I am not sure when I will ever live this down. I like to read about software, and I find plenty of things to remind me how far short I fall.

My new favorite blog is by Steve Yegge. He writes so well, he makes it look easy.

When I read The Truth About Interviewing he really struck a nerve. This part in particular:

If you want a job at a company like Microsoft, Yahoo!, Apple, or, they’re going to have high standards. It doesn’t matter if you “know how to program”. They’re going to test you on algorithmic complexity analysis, advanced data structures, algorithm design, searching and sorting, internationalization techniques, network protocols, OS-level memory management, parsing and semantic analysis, recursion and mathematical induction, graph theory, combinatorics, programming language theory, machine architecture, discrete math and logic, graphics and window systems, fonts and typesetting, color spaces and representations, databases and query languages, filesystems and storage, embedded systems, device drivers, mobile and wireless protocols, and internet standards and technologies.

If you’re lucky, that is.

If you’re unlucky, they’ll ask you to derive the outline of their Ph.D. thesis on fault-tolerant massively parallel machine-learning systems. Or to solve a grand-unification style computation problem involving telephone switches, grid networks, and third-degree differential equations. Or, God forbid, they’ll ask you about the darkest corners of C++ syntax.

And you want to know why they’ll ask you about that stuff? Because they’re using it every day. They’ve tried hiring people who don’t know this stuff. Believe me, they try all the time. They want to hire more programmers, and they’re out there on the constant lookout for new meat. But when they lower their standards, they get burned.…the service goes down for days, losing them millions; the project gets delivered late or even not at all, losing them contracts and customers; they lose the business battle to competitors who hired better engineers.

Putting together a pretty Ruby on Rails site is no small feat. Learning to program is no small feat. Many people try and fail to get even that far. But it’s 3- to 5-ball juggling, and it just doesn’t cut it for the Cirque du Soleils and private hospitals of the software industry. I’m sure you want to be a racecar driver, a hang-gliding instructor, a corporate lawyer, a movie sound editor, a rocket scientist. But you know you don’t have the requisite training or experience. Why do you think knowing a little (or even a lot) about programming automatically qualifies you to get hired at Microsoft?

Software companies have excruciatingly high standards, just like any other profession. Those that don’t get eaten up by those that do.

He mentions this idea again in passing in Dreaming in Browser Swamp

One cause [of disrespect for web programming], and let’s be honest here, is that a lot of web developers were self-taught, weaned from text to HTML to onclick=”foo.hide()” and onwards to CSS and DOM and more complex JavaScript, and thence on to CGI and PHP and VB and ActiveX and SVG and Flash and the rest…

This is exactly how I came to be a programmer (although in my case it was Java instead of VB and ActiveX). It hurts to be pegged.

Sigh, this is a long-lived meme. Here’s Philip Greenspun from the introduction to SQL for Web Nerds:

That doesn’t sound too tough to implement, does it? And, after all, one of the most refreshing things about the Web is how it encourages people without formal computer science backgrounds to program. So why not build your Internet bank on a transaction system implemented by an English major who has just discovered Perl?

And Joel Spolsky, from the forward to Mike Gunderloy’s “Coder to Developer:”

There’s something weird about software development, some mystical quality, that makes all kinds of people think they know how to do it. I’ve worked at dotcom-type companies full of liberal arts majors with no software experience or training who nevertheless were convinced that they knew how to manage software teams and design user interfaces. This is weird, because nobody thinks they know how to remove a burst appendix, or rebuild a car engine, unless they actually know how to do it, but for some reason there are all these people floating around who think they know everything there is to know about software development.

The thing is, I have high standards too. I’m not satisfied with the status quo. My wife and my (non-technical) co-workers are always telling me not to be so hard on myself. In their opinion, I’m a good engineer. While that feels nice, and I appreciate their support, it lures me into a false sense of security, because they don’t know anything about software development. I try to learn all the time, but it always feels like I’m putting lipstick on a pig, because I don’t know jack about pointer arithmetic, discrete math, number theory, compiler design, multi-threading, and on and on. Perhaps one day I’ll cave to my mediocrity and phone it in for the rest of my life, but by God I hope not. Until then, I stubbornly refuse to accept that I cannot be a good programmer just because I didn’t go to MIT. I’m trying to be very pragmatic and systematic about this: I will put the full light of day on my ignorance and chip away at it in the right places until I like the shape I’m taking. Which is not to say that it will ever be finished. I have to accept the fact that I have limitations — every human being does. But I don’t have to accept that my life is not up to me.

In a perfectly painful synergy, this is also the story of how I became a “musician.” I will not rest until I can play piano like a cross between Reuben Gonzales and Count Basie. I hope you’re willing to wait, because this is going to take a while.