...a great developer locked in a room is of no use to anyone.I recently listened to a PodCast given by Paul Graham and distributed by IT Conversations and read a column by Joel Spolsky. They both touched on the question “What makes a great developer” or “How to identify a great developer”. Actually, Joel's article was on teaching Java instead of C in CompSci programs, but he touches on what makes someone a great programmer. After listening/reading their opinions I’d like to give you mine. Of course, I think my opinion is better but ultimately that is for you to decide.
I've put together a top ten list of what makes someone a great developer. Starting with...
10. Software is already a hobby for you.
9. Knowledge of and ability to use Design Patterns.
8. Proficiency in the target development language.
7. Desire to continuously learn more about developing software.
6. Ability to teach/communicate/collaborate with people.
5. Strong grasp of Object Oriented Design and Programming concepts.
4. A Software Development Intellect.
3. Expertise in the domain for which you are developing software.
2. You follow the 10 commandments of egoless programming.
1. Using TFD with Refactoring to do all your development.
In the afore mentioned material it was mentioned that to be a great programmer you had to have an office so that you could work uninterrupted for long periods of time. While I agree that to be a great developer you must have time to focus on your work, I also believe that a great developer locked in a room is of no use to anyone. Great developers are great because they can collaborate with other developers by pairing, or some other means, to transfer knowledge and experience to more junior developers. It is absolutely critical that developers work collaboratively on their project. Having many developers working on the same project in isolation would be disastrous.
Great developers often don't know that they are great, on this point I agree with Paul Graham. However, I believe that they don't know they are great because their standards are extremely high and not because we can't measure their greatness. Great developers are always looking for ways to improve upon their current set of skills and learn new skills.
You may have been surprised to notice where language proficiency landed on the list. However, if you really think about it the development language is the easiest part of software. The ability to "think-software" and to think in objects is much more important than a thorough knowledge of the implementation language. I've seen people who are incredibly proficient in a language produce some of the most horrific code that I have ever seen.
Finally, great developers must develop their code test-first, on this there can be no debate. To consistently produce readable, maintainable, efficient, tight code you must develop test-first. Today there is no other single tool, methodology or library that will do as much to improve your ability to be a great programmer as will Test-First Development.


1 comments:
Good luck finding very many people with that laundry list. Many of the things you mention (OO, TFD, design patterns) are relatively new to software development. Does this mean that there were no great developers before TFD was invented? Heck, several years from now some of those acronyms may be extinct -- we'll be using yet to be invented techniques instead.
I think a good developer is simply someone who is both smart and passionate about software development. If you find someone like this, most of the other things on your list will follow anyway.
Post a Comment