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.