With all the latest attention again on what does and doesn’t make a
good programmer, I couldn’t help but put together my own top 10 list.
- Being a great problem solver.
- Being driven and lazy at the same time.
- Ability to understand other people’s code
- Having a passion for programming
- Loving learning for the sake of learning
- Being good at math
- Having good communications skills
- Strong debating skills
- Extreme optimism
- Extreme pessimism
- Being a great problem solver – Hopefully everyone recognizes this
one. Most good programming is all about being able to find solutions
where others can’t see them. If you don’t have this skill the others
matter far less.
- Being driven and lazy at the same time – This one surprises some
people. Programmers question things and are often “too lazy” to take
the long route. The will spend countless cycles trying to simplify the
problem and simplify their task. That said they having a burning need
to get the job done, they just want to do it as efficiently as possible.
- Ability to understand other people’s code – This point is essential
but cuts some good programmers off from being great programmers. It
doesn’t matter how well you can rewrite everything yourself – you need
to be able to work with other people’s code on existing projects, lean
on opensource in new projects, and learn good techniques from the code
base that is already out there.
- Having a passion for programming – on some level you have to love
programming for programming’s sake. I suppose to be truly great at
anything you have to love it in most cases.
- Loving learning for the sake of learning – Programming is a moving
target. Unless you love the art of edification you will sink fast.
There are no laurels to rest on and no one cares what you did yesterday.
Unless you are aware of the techniques on the horizon, you won’t be
ready to embrace them when they become relevant.
- Being good at math – Different people will have different opinions
here – but at the very least having a strong grip on pre-Calculus math.
I’ve never seen a great programmer without a solid grasp of at the very
least algebra and trig.
- Having good communications skills – This doesn’t mean that they can
communicate with anyone and everyone. Specifically this means that they
are able to clearly express their thoughts on their own terms. I’ve
met plenty of great programmers who couldn’t communicate well with the
world at large. However, given someone to talk to who understands the
problem domain, they were all able to clearly state the problem and the
solutions proposed.
- Strong debating skills – This follows the same logic as #7.
- Extreme optimism – Great programmers I have encountered have an
insane certainty they can get the job done once they have chewed on it a
bit.
- Extreme pessimism – Great programmers I have encountered have an
insane insistence that when they lack the information needed to make a
good judgment that they won’t be able to make one at all.
After putting together this list some aspects surprised me, and I
was the one who put together the list. So let me explain each in
detail.These attributes describe those I’ve found in pretty much every
great programmer I’ve come across. There were a number that fell through
the cracks and I’ll explain those later. Some of the things I instinctively wanted to put on the list but couldn’t say were true of at least 95% of great programmers include the following:
- Being extremely organized – Understanding when and where
organization is important, yes. But anal attention to detail is
something present in great programmers as often as it is people in other
disciplines.
- Being good at managing other people and or programming projects –
Somehow these skill sets are wonderfully synergistic when they sit side
by side, but management and programming are often completely different
disciplines.
- Being able to write good design documents – Same as #2. This skill
may make some people better programmers and I am in favor of learning
it. However, plenty of great programmers I have encountered couldn’t
write a coherent design doc if their life depended on it. This will
know doubt be debated by heavily by some.
- Having an ability to estimate time frames – Once again like #2.
This is an acquired skill and a very useful one. However, I have seen
absolutely zero correlation between great programmers and estimation
skills.
- Prolific reading of tech books – I do this all the time myself, but
many great programmers don’t. Let me be clear though – most programmers
who aren’t all that hot could definitely benefit from bootstrapping
their skills with some good reading.
- Ability to transfer their programming skills to any programming
domain – Although many can, some great programmers can’t, or refuse to,
grok other programming technologies. I like to think that this is a
“refuse to” situation.
- Write code that is correct the first time around – Many great
programmers commonly have syntactic issues flagged by compilers or at
runtime interpretation. Some are zealots about the details the first
time out, others are much more “extreme” in this area.
- Having other areas of great skills – some great programmers are good at only one thing – programming.
- Social or antisocial – Great programmers come in both forms.
- Are someone you’d want on you team – Unfortunately some of them just can’t work with others well.
阅读(1054) | 评论(0) | 转发(0) |