Tuesday, March 24, 2009

Passion of the Programmer

Passion is an odd thing. You either have it or you don't.

Take this quiz:

  1. Do you love to write software?
  2. Do you love to learn new domains and professions as part of developing software?
  3. Are you passionate about learning new techniques to improve your success at development?
  4. Do problems drive you crazy until you solve them?

If you answered yes to all of these, you are a great programer. If not, think about changing professions. Don't become a manager, please!

All great programmers are dysfunctional

Yep, you heard me. There is no such thing as a programmer that is a normal person.

This is a very simple statement that is easily verified. If you do find an excellent programmer that seems to be otherwise normal, he could be a serial killer. Somewhere there is a flaw. Usually something that gets in the way of social IQ.

Not all programmers are totally incompetent at social interactions. I also don't mean to say that you lock them in a room with a slot for pizza. Just don't expect normalcy.

What if you do find a programmer that is socially outgoing, has their act together, calm, does not procrastinate, easily understood, a great communicator, blessed writer, and a wonderful speaker? It's really simple, this person will become a manager. This is true even if they love programming. 

Are programers crazy? Isn't everyone? We all have different bits of crazy, it is just a matter of how much and where. Really it is about abilities to process programming languages, a certain type of imagination, a willingness to torture their bodies by sitting in front of a computer and a few other things. 

But why do programers seem to be so far off the beaten path? I think this is a side affect of creation mixed with making a living. We love our creations like a jealous parent. Some are at another extreme and act like jealous vengeful gods, protecting their creations from all others. 

There is more to this defense of their work than just how we evolved to become programmers. Some of this is just sticky biology. Brains don't like doing something twice. Heck, brains don't do something once, if they don't need too. Our brains have the assumption that we are right all the time, not because we are, but changing our minds takes effort. With software this also means rewriting. 

If you are employed, it gets worse. Rewriting is a black mark against your skills. Rewriting causes deadlines to be missed too. Performance and efficiency is why we are paid. It is how we feed, cloth, and pay for shelter. Complain against another guy's code and you are threatening their livelihood. 

Open Source is a bit different. But not too much. It is the same game, just different repercussions. Most act as if their jobs depend on their code being right just like a real job.

Well, that's enough for now. Back to learning JRuby. 

Wednesday, March 18, 2009

Houdini and Software

Houdini was an escape artist and a magician. How does that relate to software? Quite simply it is all about solving impossible problems or making hard problems seem magically simple.

Magic is about hiding a trick to see a grander illusion. Escape is about over comming the physically impossible. In software we need to have the same techniques.

Without the magic, we have unusable tools full of complexity. Often there is too much data. Without the escape artist attitude, we leave problems unsolved or force users to repeatedly solve their common issues.

Magic and escape are related in many ways, but the escapes are not just tricks. That's a fact that many miss about Houdini's genius. There are those that do tricks to fake escapes. Nothing wrong with that, but there are many escape artists like Houdini that found flaws in the shackles and devices he needed to escape.

Houdini didn't just pick locks. He understood locks. He knew what it would take to get around their purpose. He knew the anti-pattern of locks. Once you really understand locks, most are breakable as most problems are.

Look at safes, where being locked in one is easier to escape than trying to break into one. Houdini understood that there were no countermeasures inside a safe that couldn't be bypassed with a simple screwdriver. It only seems impossible if we think of the safe only with a single mind.

For magic, sometimes the creation of the illusion is hard. Sometimes it is simple. But the key fact is, there is some type of skill or mechanism to add the true magic to create the illusion. If you don't add these, and a little showmanship and misdirection, you get nothing special. You loose the magic.

As developers, we need to apply both a key understanding of our problems and their soloutions. We need to know how to make a problem that seemed impossible with another method.

We don't need to make the magic of an elephant disappearing to be part of the magician's code, never to be revealed. However we do need to hide the complexity of the feat from the end user.

We need to hide the trick of getting from A to B. We also need to escape from seemingly unsolvable problems through means less obvious than a metal key. As developers, analysts, architects, and even QA, we need to think like magicians and escape artists.

Using software should be magical. It should seem like we are over coming the impossible. The only way to do that is to get into the mind of great men like Houdini.

Saturday, March 7, 2009

Hi boys and girls, time to learn computer science!

I hate to say this, but this is not a site for little kids. Computer science is a weird profession. It is not a noble as firefighting or important as being a doctor. Computer science attracts very odd people and worse, people that should never have joined the profession. 

Computer science is also not a science. I have never seen it proved that on a day to day basis that the scientific method is applicable to most software. Yes, you can prove certain algorithms and even use software to do other genres of science like astronomy or physics. But the creation of websites, accounting systems, and even control systems for rockets and washing machines is not a science. 

So, what is this blog/book about? The focus on the psychology of software development. It is also meant to make you laugh. Laughing about computer science is pretty easy. Their are so many mistakes it is like the Keystone Cops. Rockets to Mars miss because of decimal points. Whole stock markets crash because we let the computer run amuck. We also torture the poor users with horrible designs. There is a lot to giggle about here. 

What I want to accomplish is the education of managers and developers about the little hobgoblins of the mind that cause software to be so incredibly bad. We want to ask important questions here and solve some (we hope) with the light of examination and a little psychology. Here are just a few we will cover:

  • How do developers create those bad interfaces? 
  • Why doesn't the software do what I want? 
  • Why does my computer crash?
  • Why do developers seem to be insane?
  • What methods can we use to create great software?
  • Why doesn't the latest language or software process fix these problems?
It won't be easy. In fact for some developers this will seem outright insulting at first. For managers it may be comforting, but you may still be at the mercy of your developers. No promises because change, especially of long term habits, is slow.

So, stay tuned. We have a great deal to talk about. Send me descriptions of your nightmares or even your successes if by a miracle you had one or two. We are all in this together.

If you are still a kid. Go ahead and read this blog. Maybe it will help you avoid this profession.