Just a Means to an End?

Joel Spolsky’s latest article inspired this post.

When I was a kid I used to love logic puzzles.  They were so much fun.  They demanded a flash of insight coupled with really sharp thinking.

Discovering programming was like a eureka moment.  It was this amazing mix of design decisions and clever logic.  In my first few years of programming I toyed around with TurtleLogo simulations and I simulated a Bee Swarm in OpenGL (I was really into distributed automata).  I wrote code that would find the square and cube root of numbers to an infinite precision using the old school manual method that nobody even learns anymore.  I studied GADDAG and wrote a super fast Scrabble Solver that just took the board state and your letters as XML input.

At the end of my Freshman year in College I interviewed for an Internship at IBM (which I didn’t get).  The cover page on my resume said:

I’m going to feverishly program, whether someone pays me to do it or not.

I never got into programming because someone told me it might be a good career move.  My main career goal has basically been to trick someone into paying me to write the same fun code I’d otherwise write for free.  The Manifesto of the Futurist Programmer resonated with me when it said

we judge unjust, criminal in fact, the habitual disdain for programs whose construction is different, new, throbbing with life.

I can imagine a different path to programming.  I can imagine a person sitting at their screen wishing their software was more useful and empowering, and then deciding to learn to code so that they can build software to fulfill their needs.  This was DEFINITELY not how I got into programming.

It’s great making a product people use and love, but making things for others is not, fundamentally, why I got into programming.  For the business manager, code is just a Means to an End.  But for me, code is a reward in and of itself.  It seems very chic nowadays to deride design patterns and rewrites.   I want my code to sparkle with brilliance and not just chug by like an old diesel engine…am I the only one?

If a musician creates “poppy” music simply to get more listeners, appease publishers, and make more money, then people will call them a Sell Out.  When we try any hack possible just to garner more “active-users”, are we any better?

When I write code I feel more like an artist then I do an engineer.  More like a craftsman then a construction-worker.  Doesn’t every artist yearn to push their limits and make a product they can be proud of, with no compromises?  Haven’t all truly great and lasting creations been acts of love, and not greed?

Silicon Valley is such a lucrative place, surrounded by investors and people who really are just after the money.  The MBA’s have infested our thinking.  I suspect at some level the argument that design patterns are efficient and productive is just an attempt to legitimize our childlike love of shiny, polished code.  We have to do this, because it’s not acceptable to say “I want to write it to be beautiful and sublime simply because it makes me happy.”  No, there must be good economic sense behind it..

Is greed blinding?  If coding weren’t profitable, what would the culture of remaining programmers look like?  What would their code look like?  I suspect it’d be quite different.  If Artists and Musicians had opportunities to “sell-out” en-masse and all make 6-figure salaries the way Software Engineers can, would they all forget what made them love art/music in the first place and chase the bucks?

Coding no longer feels like a game of intellect.  It becomes a slog, with timetables, deadlines, legacy, and settling.  “High leverage work” doesn’t mean “the work that can most effectively make me happy”, unfortunately.

If you couldn’t get paid to code, would you still do it?  If so, what would you work on and how would your work and your product differ from what you do now?  Is this trade-off worth it?

I still love my job, don’t get me wrong.  I don’t have all the answers.

10 Responses to “Just a Means to an End?”

  1. boz Says:

    first of all, let’s get connect running here.

    I don’t code for the fun of it (though I do love it) and I don’t code for money. I code to build cool shit that people use. Cool shit that nobody uses? Useless to me. Might as well have never been built. To take your analogy to art and music, if an artist paints the most beautiful thing of their life and it is destroyed before anyone sees it, do you think they would be pumped just to have done it? I’m not convinced. As an (admittedly amateur but at least aspiring) photographer, I assure you that my goal is to have an impact on people. I enjoy producing solid images, but before I could share them en masse on Facebook I never really took the time.

  2. jubishop Says:

    I actually do think, at least for some artists, they would be pumped to have made the art even if it were destroyed immediately thereafter. I think there’s a lot of examples of people building things for no reason other than to satisfy their own urges, with no desire for money, fame, recognition, or usefulness.

    My stories of the code I wrote, like routines to find square/cube roots to infinite precision, were meant as examples of writing code just for fun, which nobody else would ever find useful.

    I don’t actually think this feeling is unusual to an impassioned creator. But you may personally feel differently, and I don’t mean to imply that makes you any less capable or passionate about your medium.

    Creators are definitely motivated by different things. But I don’t think that many are motivated by just raw number of admirers (“active users”), or money..

  3. Marcus Says:

    I got into coding because I wanted to make something happen on the screen that I couldn’t do without code. Now, most of what I write is directly related to my livelihood, and that is undoubtedly the main reason I code. But the times when I get the most from programming aren’t dependent on getting something done at work or making something that people will see or use, they are, much like you’ve described, derived from the process itself. It equate it to playing a musical instrument alone in your house, not for the practice but for the playing.

    I can’t think of anything more “zen” than the creative effort that goes into solving a problem in code. Even if the most obvious motivations (getting stuff done and making money) were taken away I like to think I’d continue doing it for the intrinsic rewards. If I didn’t, I feel like I would be missing out on something that has become, for me, part of the stuff of life.

  4. kostub Says:

    I agree. Joel’s latest article did not sit well with me either. He misses the point on two counts:

    a. Programming is supposed to be fun. Yes we program for a living, but we don’t program because others use our products, we program because it is fun. And elegant clean code is more fun than a hodgepodge of duct-taped code. Programming is not supposed to be an endless codification of business rules made up by the MBA types whose minds change everyday. It is supposed be a creative endeavor where you solve hard problems. Of course this is just my view of programming and why I write software. There are of course millions of other programmers who are perfectly happy to endlessly encode business rules so that their products will sell.

    b. Anyone who has worked on a decades old legacy code-base will attest to the fact that design patterns and unit tests aren’t just some inventions to make programmers feel happy. They serve a strong purpose in making code flexible, maintainable, readable and workable in the future. Without proper use of these techniques in my experience I have seen so many legacy code-bases being riddled with hard to fix bugs that ultimately impact the business adversely. In my previous company, more than half the engineers were working on rewriting software written by these so called duct-tape programmers. That is a colossal waste of resources even for the MBA types.

    Joel’s points work well for someone who wants to throw together an iphone app or for a startup building a prototype to test the waters for whom time is at the essence. But for someone who wants to build long lived software (and old software never dies) written by great programmers who love their craft his approach is completely wrong.

    I would have at least expected something more reasonable from Joel.

  5. jubishop Says:

    Kostub,

    My article had focused on the emotional aspect of beautiful programming, so I really appreciate point b), which makes a decent argument for beautiful programming as a matter of practicality.

  6. Jacques Says:

    You mention Joel’s article inspired yours, but you don’t explicitly refer to it anywhere or mention “duct tape programmers” (e.g. Mr. Zawinski) at all, nor does Joel’s article speculate about their motivations or aesthetics. If you don’t mind my asking, what was it about Joel’s post that inspired you to write this one?

    (Great post, by the way! Just stumbled across it on Facebook. Sorry I’m late to the party….)

  7. jubishop Says:

    Jacques:

    Joel applauds “duct tape programmers”. For Joel it’s clear that he just wants a product, and doesn’t care about code itself.

    “When you are done, you might have a messy go-cart, but it’ll sure as hell fly.”

    The fact that it flies is not all that matters to me. I want it to be beautiful and elegant, as well.

    To be happy with ugly code that still does well is the equivalent of being happy writing piles of popular crap (think RL Stine) instead of one brilliant narrative (think JD Salinger).

    • Jacques Says:

      I suppose I could be wrong, but I don’t believe that the fact that it flies is all that matters to Joel either.

      The way I read it, the duct tape programmer’s construction is different, new, throbbing with life. He wields his tools “elegantly.” He’s not afraid to ignore popular ideas of how things should be done. This go-cart is not the same old sad boring unremarkable half-assed boilerplate crap you’ve gotten so sick of seeing so much of at the go-cart contest every year. It’s a monster all right, straight out of a fairy tale — a thing of beauty, the likes of which the programmers sitting on the sidelines bickering have never even imagined. It sets a new land speed record while everyone is still standing there open-mouthed trying to understand how such a thing can possibly hold together at all. It sparks a furious debate about what fundamentally constitutes a go-cart and whether next year’s slew of would-be imitators should be banned from civilized competition. You know what I mean? That’s how I had read it. Maybe I’m reading too much into this that isn’t really there.

      You might already have read Joel’s article entitled “Craftsmanship” from back in 2003:

      http://www.joelonsoftware.com/articles/Craftsmanship.html

      To me, reading that is a bit like listening to a baseball player, one who is resolutely focused on playing his best, explaining to you at great length how he sincerely believes that doing stuff like being a good sportsman and treating others with respect — even members of the other team! — actually help him win more games than he would otherwise. Maybe you follow his argument and agree with him, or maybe you think he’s sadly misguided in his conclusions and/or his motivations. But it’s obvious, even as he’s explaining his somewhat intricate philosophy to you, that this guy is in it for the love of the game.

      Similarly, you’d have a hard time convincing me that Joel (or jwz) became a programmer instead of a bricklayer or a doctor solely because the programmer gig sounded like it paid a bit better, no matter how doggedly he keeps framing things in terms of the bottom line, or customer satisfaction, or other metrics that no true artist would ever deign to consider. I would soooo much rather listen to him explain his theories on being the best we can be than hear the loud guy in the company cafeteria who only ever talks about how today’s random market fluctuations are affecting his stock options and how excited he is to have discovered a new tax loophole to exploit.

      The whole thing reminds me of the kind of discussion one might have about the difference between “enlightened” self-interest and “true” altruism. Some people really think it’s a crucial, night-and-day distinction, that it matters a lot, that it tells you a great deal about someone’s true character, and so on. Others think it’s a meaningless distinction, philosophical hair-splitting of no real significance. I guess I’m in the latter camp.

      • jubishop Says:

        Wow Jacques,

        Amazing comment. The Craftmanship article you link to definitely shows the other side of Joel.

        Your insights are awesome. I’ll have to digest them for a while…

  8. actiotLab Says:

    I highly enjoyed reading this article, keep up posting such interesting posts.

Leave a reply to boz Cancel reply