What makes a great developer? These core competencies, each building on the previous one.
1 – the ability to make things happen with a given language
Most people who call themselves developers have this ability. They are able to use a given language, often 2 or 3, to the level of ‘making things happen’. If given a task, they can complete that task using code and to the client everything appears to basically work. We can say they are a programmer. They know how to use the functions that are built in to the language and can make their own functions to achieve most other tasks.
2 – they have a deep understanding of a language
This is much harder than just using a language. It takes experience. People will have a deep understanding of fewer languages than the ones they can simply use (1). To have a deep understanding means you will be able to code the fastest, most optimised experience that should never crash. This code will be the best it can be, restricted only by the platform is running on. Very few developers have or actually implement this deep understanding.
3 – they take a structured approach to development
This covers a number of areas, including unit testing, using a versioning system, and following simple guidelines when working in a team. You may have optimised code, but if you haven’t properly tested it, its not going to be perfect. It is perfectly possibly to have this approach, but lack a deep understanding of a language. This stuff is also easier to apply to multiple languages and only needs to be learned once. It is shocking therefore how few people take a truly structured approach to developement, especially when they have so much knowledge in a given language.
4 – they are able to express themselves clearly, in code and in person
Writing easy to understand code, and being able communicate effectively with the other members of your team and your clients are essential skills. If no one can come in and edit your code easily because its a mess, or you cannot communicate problems with the project to the project manager for whatever reason, the project will not succeed in the long run.
5 – they understand and respect good design
Anyone who declares that functionality needs to come first and design later (if at all) is not a great developer. There is more to a project than just the code. The user experience and look and feel of a piece of software is as important as it working well, being responsive and not crashing. An understanding of this will lead to a good relationship between designer and developer (and there should certainly be a distinction between the two), to the developer not ignoring the designers requests because they are considered unimportant, and not pretending things are harder than they really are. Equally a good designer will understand that the developer has to work under contraints and accept when something actually might not be possible.
A great developer will have all 5 of these aspects. Since gaining all of these will take time, don’t expect a new developer to have all of these, often it takes at least 5 – 10 years of experience to gain the required knowledge and skills. Indeed, you may not be able to find anyone with all 5, but you can build a great team if you incorporate people who share some of these, and have all 5 within the team. If you are a developer, and you don’t practice all of these (or even if you do), keep learning and keep pushing yourself, I know I have to.