programmer : Java Glossary
One of the most frequent questions people ask me when I do public lectures is,
"Would I make a good programmer?" Here are the traits that will stand you
in good stead:
You can see from this list why computer programmers are not on the top ten list
of desirable spouses.
Without this programmers would quickly burn out with
frustration. Your programs rarely work first time. You must be curious why, not
angry or frustrated. The kind of person who likes to take things apart to figure
out how they work has the right attitude. Rarely are the instructions or
documentation you are given completely correct. You have to poke around under the
hood to find out how things really work. Curiosity is the great
antidote for frustration when things inevitably don’t work time after time.
Edison exemplied this aptitude when he said Failing many
times taught me many ways how not to do it.
Murphy’s law states, if anything can go wrong it will. You
have to keep worrying about seemingly improbable events and pathological special
cases to make sure they are all properly handled. Because of the way computers
compress time, something that only happens once in a billion times, will happen
every few seconds on average inside a computer.
Even the most outrageous pessimists still wildly underestimate
the unknown troubles that will plague them on the way to a solution.
Attention to detail
You can’t wave your hands and say I’ll deal with it manually later. I’ll just give the broad
brush now. You have to handle every conceivable situation with just the
same care and attention as the ordinary case. Sometimes you may find, e.g. in a
banking application, the ordinary case might represent 99% of the actual load, but only 1% of
your coding and design.
You like specifying precisely what will happen under every
possible circumstance and thinking it out carefully. Windows drives control
freaks insane because it has so much seemingly random behaviour that they cannot
control or explain.
The industry norm is to expect you to work several days
without sleep living on coffee and pizza in an emergency. Every deadline is an emergency.
The laziest programmers are by far the most productive. Instead
of mindlessly cranking out bubblegum code, they figure out how to get the
computer to do it for them, or to find out how to get by without doing it at all.
The cookie-cutters created from this laziness usually have the pleasant side
effect of making the code much more maintainable.
Programmers, being control freaks, have a strong tendency to
arrogance. They won’t back down even when they know they are in the wrong.
The only way to keep peace on a programming team is to go along with the leader,
and let the natural inevitable failure of his approach convince him to try a
different approach, perhaps eventually yours. The more you argue, the more ego he
invests in continuing to do it his own way. The more you minimise the error of
his ways, the easier it will be for the leader to save face and change direction.
A gloater or a never-say-die arguer can totally sabotage a programming team. A
good leader is willing to accept ideas from everyone. The ideas don’t have
to be his.