Tuesday, March 20, 2012

Software is not glamorous

You know how pundits talk about how glamour magazines are ruining people's image of themselves?   That it contributes to eating disorders, etc.  Every so often, there's a campaign to undo some of the damage.  Stars with their makeup off, or whatever.   I have no idea whether it's true that glamour magazines have that effect.  I just know people on TV claim it from time to time.

The point of this post is that that effect is true for software.  

Larry Ellison once said (in reference to cloud computing) "The computer industry is the only industry that is more fashion-driven than women's fashion. Maybe I'm an idiot, but I have no idea what anyone is talking about. What is it? It's complete gibberish. It's insane. When is this idiocy going to stop?"

Never,  Larry. Never.  Because there's always a place to sell people glamourous fantasies in any market, most especially a fuzzy area like "computing."  You know this.  Oracle is one of the chief innovators of this sales pitch.  Oracle is a brand that thrives on the idea of fashion:  that a database (really really expensive database) is the answer to all of your data problems.  Your scaling issues will magically go away if you use Oracle.  Because a DBA told you so, or because Visa uses it and, hell, they do a lot of volume, right?

But I'm not here to talk about branding for database servers or other enterprise solutions, I'm actually here to talk about software creation: also known as "software engineering", "programming", "coding", "hacking" and whatnot.  That's where fashion has gotten out of control.  

If you're like me and try to keep up with the styles of the time (like an onion on your belt), you probably read Hacker News or Proggit or something along those lines.   Even though they have so much stuff that is uninteresting to me (daringfireball reposts, bleh), I've never been able to keep a steady enough stream of geek news without including those two in my daily rounds of the 'net.  

In any case, they're completely filled to the brim with stories/fantasies of glamourous software escapades.  Wild tales of NoSQL magic, using Go for some one-off server, the latest home-grown solution of the week that does what last week's did except slightly better, oh, and of course, the functional programming unicorn.  On and on and ON it goes.  Day in and day out, someone tells us that they really benefitted from this amazing new face cream language or library they found that all of 3 people in the world have ever used.  Or they checked this thing into github -- which will surely be the only checkin of it ever, but who cares, it's awesome -- that really did something neat in 30 lines of Scala!   Then the comment wars begin and one guy says Go is amazing because of goroutines, another guy says Go is shit because it doesn't have generics.


It's like the glamour magazines I started this article with.  Jessica Alba is glamourous because she's Jessica Alba.  Buying her brand of makeup doesn't make you glamorous.  Everyone knows this but it's hard to remember it when you look at her picture and she's so damn glamourous, you want that brand of whatever she's selling.

Just like that example, there is an illusion of glamour in software.  We look at small code examples of Haskell and drool over it.  We see the raw write speed in a test bed of MongoDB and wonder why we battle MySQL all day long just to store some stupid virtual junk purchases for our Facebook game.  Our PHP site takes 3 seconds to render a page, so Facebook's Hiphop would really help, right?

The problem is, even if you applied all of these fantasies in unison, software still wouldn't be glamorous.   The reality spectrum is far from that under the pressures of commercial enterprise.  A couple examples:

* Code for product.  If there is any kind of product involved,  you'll be getting between half the time that should be spent on a piece of code to a tenth of the time.  Less even?  Either way, you don't have time to learn something new, do something new, you just need to code it now in whatever tools are handy and can work.

* If there is any kind of customer involved, then you'll be writing to whatever spec they want.  Writing a library for people to use across platform, binding to different languages?  Guess what?  You're writing that in C.  End of story (unless it's JVM, then it's 99.99% probably Java if you want contributors).

Often you'll face both of these, or more situations I can't think of that make software not as much fun as the fantasy you've been sold at a meetup or hacker news.

Just an example:  when I was in college there was a resurgence of interest in Smalltalk.  One my professors, maybe, told me that hedge funds were starting to use Smalltalk to do algorithmic trading because it gave them an edge in making all of these esoteric algorithms.  But now, those hifalutin ideas of impractical fantasies are long past.  What do you see people doing trading in?  If they're doing HFT, they do it in C++.  If they do algorithmic trading, they do it in VB or Excel or something.   They have too little time to develop too much with too many external dependencies to screw around with Smalltalk.

The best you can hope for, and what you can aim for within yourself, is what I'm going to refer to as Beautiful Hackery.

Beautiful Hackery is what the greatest software minds I've ever met have been able to pull off when shipping software.  Yes, they wrote it in a boring language like C++ or Java.  Yes, they wrote this software in a hurry, because that's what was required by the schedule.  They made design decisions that weren't the greatest, but they worked well in the context of the schedule and the features needed.  They also did this amazing hack to ship this feature in a way that wasn't a total kludge.  It may even say // TODO: HACK in the code, but when you look at it, you think it looks damn elegant.  That's because those guys are so good, they know it's wrong and they still do the wrong thing right. 

And that's the thing you really need to be able to get excited about.  You wrote just enough code in a language you hate, in an impossible deadline situation, to make something work just well enough to ship, and when you look at what you checked in later, you realize that hack was actually a good idea.  That's a great feeling, if you can get it.

Aspire to that, my friends.