5 Attributes of Highly Effective Programmers
What attributes can contribute to a highly successful software developer versus the ordinary run-of-the-mill kind?
Once you start assuming you’re the expert and final word on something, you’ve stopped growing, stopped learning, and stopped progressing. Pride can make you obsolete faster than you can say “Java”.
"The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague." - Dijkstra
Love of Learning
Good judgement comes from experience, and experience comes from bad judgement. - Fred BrooksObviously, some balance has to be struck here. You cannot learn everything–it simply isn’t possible. Our profession is becoming increasingly specialized because there is simply too much out there. I also think that in some respects, you need to love learning just for the sake of learning.
The steps of changing a piece of software could be:
- Thoroughly understand what the code is doing and why
- Look for any and all dependencies and interactions with this code
- Have a well-thought-out mental picture of how it fits together.
- Examine the consequences of changing the feature.
- Update all related code that needs to (and repeat this cycle for those components)
- Update auxiliary pieces that might depend on this code (build system, installer, tests, documentation, etc.)
- Test and repeat.
For me, the first step in changing my mind set is to not get frustrated every time things change (”But you specifically said we were NOT going to implement the feature to work this way!”).
Ok, that’s maybe a bit of exaggeration, but by listing the counterpoints, it’s easier to see symptoms of someone who does have passion:
- Thinks and breaths technology
- Reads blogs about programming
- Reads books about programming
- Writes a blog about programming
- Has personal projects
- These personal projects are more important than the boring stuff at work
- Keeps up with latest technologies for their interests
- Pushes for implementation of the latest technologies (not blindly, of course)
- Goes deep in technical problems.
- Not content with merely coding to spec.
- Needs an outlet of creativity, whether it be professional (software design) or personal (music, model building, LEGO building, art, etc.)
- Thinks of the world in terms of Star Trek
Read full article here.