Where are the great developers?

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.

To conclude

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.

  • http://www.music-explained.com john barnes

    Do you really believe that you have to have at least 5 years experience to gain these skills?

  • http://www.mark-kirby.co.uk kirby.mark

    Not all of the skills, but a deep understanding of a language requires an intense or prolonged period of using it in a range of situations and projects. The longer you have been using a language the better you will be with it. It takes time to get that experience. Note I use the word ‘often’ as well – some who focus on just one language and work flat out could certainly gain the skills in a shorter time. Same with any trade or skill though – guitarist, roofer, builder, business owner…always takes time to become an expert.

  • http://yiibu.com Bryan Rieger

    Reminds me a little of the ideas Malcolm Gladwell presents in Outliers – http://en.wikipedia.org/wiki/Outliers_(book) – namely the 10,000 hours to be become truly proficient in anything.

  • Fahad

    So it will take like 6 or 7 years for me to be like you.okay next year I will take admission in a good university and then I will start making my own aPps after getting some knowledge.
    Thanks btw . Your articles are very helpful for rookies !

  • http://www.mark-kirby.co.uk kirby.mark

    Hi Fahad – I am not at this point myself yet, but I have certainly met, listened to and read books by those who are. I have worked with a range of languages over 8 years and have gained a deep knowledge of programming in general, and enough in each language to code apps which work well in the timeframes I am set. However, you need an even deeper understanding of a single language to be a truly great programmer in that language.

    There is also a place for people who know the basics (and a little more) of a range of languages. These will identify the best tool for the job, and seek out great developers in that language. These people will make good lead developers at companies who aren’t tied to a single platform. They are also in a place to choose a language to become a specialist in. It may be worth trying a few languages before you specialise.

    If you study and go on to make some apps in a selected language, you will be on the right path, but yes, it will take time. Don’t forget the other aspects also – some of these can be gained a lot quicker (and some people will have these before they learn any programming).

  • Tiffany

    That’s a brilliant answer to an ienrtesting question

  • Dmitry Pavlov

    Absolutelly agree! In toptal.com we are all the great developers according to these statements.