I started programming over 20 years ago. After a few years, I thought I was a good programmer. 2-3 years later, I looked back and realized I had poor skills then, but that was ok, because I was good now. And then another 2-3 years passed and the cycle repeated.
Now I've been senior level (by various contracts and companies) and typically able to lead great projects for several years, and its been well over 5 years since I feel I've miss-judged my skill level.
So my question to the community, is how do you know? Its different for many, because their are different backgrounds, different working styles and different knowledge bases.
What traits or experiences make you senior material; a good programmer?
Nick Ciubotariu from Linked In had this response:
"Good", as with anything else, is a variable metric. While things like unit testing, etc. are all great, they are expected patterns for all developers, good, bad or otherwise. However, here are a few differentiators that apply to most competent programmers, at least in the context of the Big 5 Software companies:
* Code velocity. How quickly do you ship code?
* Code noise. How many code review iterations does it take for your code to ship? (the less, the better)
* Multi-purpose development. How quickly can you onboard to a new codebase and start contributing?
* Dealing with ambiguity and complexity. Can you crack someone else's code (more importantly, bugs) and offer effective bug fixes? Can you do so under pressure, when Prod is on the floor? Can you take an inefficient design architecture and turn it into something more extensible/reusable/easier to work on with minimal customer impact?
* Thinking big. Can you design a service from scratch? Is your design elegant and efficient? Can your peers understand it easily?
* What is your grasp on the fundamentals? As divisive of a topic as this is to some, this DOES matter. Knowing when to use a tree vs. a linked list vs <insert data structure here> is very important, and contrary to popular belief, not everything can be and is solved with arrays and hash tables :). How well can you analyze time/space complexity and make efficient tradeoffs for each (memory and space are not unlimited, as some think, especially for areas such as embedded programming).
Last, and just as important: how effectively can you coach and mentor others? When you have demonstrated the ability to grow junior programmers into competent developers, and you meet the other criteria described above, you can consider yourself a good programmer among the few working at the Big 5.