Happy New Year

Tuesday, January 3rd 2012

Today, a friend sent this link to me 91 Ways to Become the Coolest Developer in the World. He wrote, “You should read this because you’re the coolest developer I know.”

That’s a nice compliment, so I started reading it with a smile on my face. The further I read, the less I smiled until, as I approached the end of the long, long list of lists, I no longer smiled.

The best programmers that I know do not really like computer programming. They like solving computational problems in a deterministic framework. They like to figure out the smoothest integration of human-computer interaction. They covet the experience of watching other people using their software in a productive or entertaining way.

Programmers that love to program for the sake of programming, they tend to write crap. And burn out fast.

When the Product is More Important

I once had a job at Burger King. This was back before the “healthy fast food” kick, when people loved saturated fat in every bite. I ended up manning the sandwich station a lot which meant that I made the long, skinny, deep-fried chicken patty sandwiches over and over. I really got into the job, making each as perfect as possible, trying to achieve the “perfect” chicken sandwich. At some point, I started to resent the customers that ordered my sandwiches because I believed they could not appreciate the skill and attention that I put into making that sandwich, Philistines ignorantly gnashing their teeth. I loved to make sandwiches for the sake of making sandwiches.

I’ve heard the same from programmers:

  • The users just don’t understand what I wrote for them!
  • The users are stupid!
  • That’s not a bug! The users should change their processes!
  • This job would be perfect if we had no users!

Yep. That’s how I felt toward those damned chicken sandwich eaters. Resentment.

The computer programmers that program for the sake of programming often seem like the smartest kids on the block, writing ray tracers from memory, knowing the TCP/IP protocol by heart, performing pointer arithmetic in their dreams.

But, they obsessively love their product. They don’t set it free. They “own” it. In the 90s, companies celebrated these employees. Until the dot-com bubble burst and investors figured out that those same employees failed to write software that they could sell to recoup their investments.

Those programmers love their product, not their work.

Traits You Cannot Learn

Pay attention to this list if you have just started your career in computer programming. If you don’t have these “natural talents,” then you should change careers as quickly as possible.

Math, You Have to Know Math : If you don’t understand mathematical reasoning, first-order predicate logic, proof by induction, linear algebra, or don’t want to learn those things, then you cannot ever be a cool programmer.

Pattern Matching : You have to be able to talk about the things that you’ve written. As a culture, we have decided that we will use Design Patterns as one of the languages available to communicate those ideas. However, if you can’t look at an arrangement of ideas and rearrange them in your mind to match an existing or previously used successful pattern of concepts, then you cannot ever be a cool programmer.

Language Love : If you don’t know a second language well enough to think in it or you do not know your native language well enough to use it well, then you won’t have the natural ability to express you thoughts in a computer programming language. Instead, you’ll have to perform on-the-fly translation, a feat that requires intense concentration that you won’t be able to perform in the crazy busy world of software.

1 Way to Become a Cool Programmer

We have one of the coolest environments in which to work, we computer programmers. Everything changes and it changes quickly. No other kind of job allows us that wide range of change and specialization. So, the only way to become a cool programmer:

Treat your job as an adventure to learn. You’ll be the coolest programmer ever.