Who are the perfect programmers?
Popular blogger Alex Iskold answers in Top 10 Traits of a Rockstar Software Engineer:
- Loves To Code
- Gets Things Done
- Continuously Refactors Code
- Uses Design Patterns
- Writes Tests
- Leverages Existing Code
- Focuses on Usability
- Writes Maintainable Code
- Can Code in Any Language
- Knows Basic Computer Science
It is a solid list, but this list concentrates on the secondary traits, which are just consequences of the deeper set of qualities. And it is an idealistic list. Do you expect the same qualities from a Flash programmer for kids websites and a software engineer for B2B financial transaction services? But how can we recognize a perfect programmer in the crowd of developers?
The Ultimate Criteria for finding The Perfect Programmer: The perfect programmer delivers good software that meets client’s expectations.
Therefore, the shocking truth is that perfect programmers could know only one programming language, don’t have any idea what are design patterns and don’t program all nights in their basements creating the next Google. We cannot objectively measure the programmers perfection like you could measure diameter of your biceps. The perfect programmers are simply perfect if they deliver a quality, usable and maintainable software system [a good system] in time and meet client needs.
1. A perfect programmer should match a client’s problem or grow to match it within reasonable time. All programmer’s qualities are relative to the client’s problem and context:
- some problems need creativity, some – detail orientation
- some problems need mostly technical expertise, some – deep business knowledge
- some problems need thorough analytical mind, some social skills and intuition
2. A perfect programmer should understand what is “done” and care about quality. Meaning of “Done” for the software system includes more than finishing writing code. A perfect programmer will do all the necessary steps to deliver the system: test, clean code to keep it minimal, effective and readable, make system usable and ensure that client and users like the system.
Top 10 qualities of The Perfect Programmer
Every quality of a perfect programmer has a range depending on the specific problem and context. There is no absolutely perfect programmer for all the problems (at least on this planet). And the perfect programmer for particular problem should have
- Intellect– can understand the problem, translate and express ideas in clear and readable code, has analytical and logical mind (range: building programs for narrow well defined requests to conquering freaking complex problems in elegant way)
- Personality – has right mixture of personal traits (detail-oriented vs. creative, flexible vs. disciplined, sociable vs. independent)
- Expertise – knowledge and experience for solving client’s problems in the specific context with chosen technologies (range: a specialist in one technology to a veteran programmer with broad experience in different domains and platforms)
- Motivation – cares about work, shows enthusiasm, interest and love for programming (range: from working for money only to implementing interesting ideas in spare time without pay)
- Maturity – knows and uses sound software development principles, practices and approaches as agile, design and architecture patterns, domain-driven design, unit testing, refactoring (range: from an enthusiastic amateur to a black belt guru, who can invent new approaches on the go)
- Pragmatism – understands what is possible, loves simplicity and avoids over-engineering; understands business goals, keeps touch with reality and focus on what should be done (range: from a spontaneous artist to a self-driven pragmatic achiever)
- Cooperation – listens, accepts that other people could have better ideas, supports team goals without hidden agenda, shares ideas and knowledge and coach others (range: from idea challenger to a team coach)
- Communication – effectively communicates and exchanges ideas, supports knowledge and decisions about the system with clear explanations, justifications and answers (range: from a quiet introvert to a system evangelist)
- Potential – has professional goals, good learning skills, curiosity, adaptability and performs constant self correction (range: from person who reached his limits to the future programming star)
- Vision – sees the big picture, understands context, trends and people, aligns actions with team and company implicit goals, contributes into building shared vision for the software system (range: from interested in programming only to entrepreneurial visionary)
How to find perfect programmers for the specific problem?
Certainly, it is better to find the programmers with the best qualities. But these geeks are expensive, often unavailable or will be bored with your problem.
- Understand the problem before hiring. Assess the required level for each quality. Prepare questions and even tests.
- Build a perfect team with not necessary perfect programmers. Just ensure that a sum of qualities of team members matches required levels. Probably only cooperation is very important quality for every team member.
- Create environment that enables most effective use and growth of these top qualities. Use right leadership style. Make programmers happy.
People with good core qualities will pick up the best approaches including writing unit tests and refactoring; learn design patterns and what is most important – deliver great and useful software.
Perfect programmers are not born, they just work on the right for them problems.