Last November I attended the Clean Code Days in Munich and gave a talk about how discontent I was with many developers in Germany who I met or had to work with during my past career. But that was a rather pessimistic approach to look at the world. So in today’s post I will reverse that point of view and write about what I think it means to be a good developer and what it takes to become one.
Developers I am friends with, my growing network, and especially my work in the Microsoft Community have led me to meet quite a number of developers whom I would deem as committed and talented on an above-average level. Of course during those meetings you regularly ask yourself how to rate yourself among all those developers. In order to rate myself somehow, I spent quite a lot of time thinking about what distinguishes an average developer, a good developer, and the exceptional ones as well.
There are a few skills/abilities that I noticed are essential in that context, and which seem to be especially well-developed by those types of developers I am talking about. Among those are:
- A readiness of mind. The better a developer is, the quicker he will be in my opinion if he has to delve into new topics and technologies. This also applies to non-technical domains.
- The ability to abstract from details and focus on them when necessary. And especially to switch between these two modes.
- A broad spectrum of knowledge. Good developers look past their own field and strive to expand their horizon. They like to learn new technologies and have possibly mastered multiple platforms and languages. They know their way around networks and protocols and might as well have had a look into hardware-related and embedded stuff.
- A good general education and various interests that go beyond their own line of business. Many of the good developers I had the honor of meeting have a wide range of hobbies and interests. Some are active musicians, other work in social projects, do sports, etc. They keep up to date on the latest news in the world, are politically informed and can in general be called good citizens.
- They love their job, are committed above-average and work a lot. Especially the freelance-developers I know are not working 40-hour weeks. Almost all of them work much more, as they do not perceive their work as stress or a strain. On the contrary, they love it. They consume Blog-posts, videos and other content about software development and beyond. They test and comment on that knowledge and further develop it and pass it on in their own blog posts. Spontaneous coding sessions in the middle of the night because of a cool idea are not a rarity among this group. As are weekends full of work.
My first impression of these skills is that they seem to be mutually dependent. He who enjoys his job and gets credit for it (and I assume most developers do, at least financially) will probably put a lot more time and passion into it. A committed person like this will probably excel in any job, no matter the line of business (may it be software development or law). At least that thought makes sense to me. But for software developers there seems to be that already described deep intrinsic motivation. There is a drive behind this that I rarely see in other people I know which work in different jobs and businesses that is not software development. But that may be because in my job and life I do meet a lot of software developers which might bias me a bit.
To summarize, it all boils down to three things: A quick and open mind that shows interests in new things, a regular look past the own work and daily routine and last but not least a strong identification with the own work that exceeds the day-to-day job approach. Letting that sink in you can’t help but notice: Almost none of these correspond primarily to hard technical knowledge. It is mostly soft skills… Does that surprise anyone? Not me.
Should this conclusion contain any truth apart from my personal opinion, then this can be taken as a reason to act on: Put more emphasis on the points I mentioned during education, training, and hiring. Maybe there should be better testing to assess potential students of Computer Science and Software Engineering. This could reduce the rate of of drop outs from studies and exam failures. To all developers and developers-to-be: I cannot stress this point enough. It really pays off to try to learn, train and develop all those things I mentioned. There was a point during my studies where it came to me that this should be the way to go. After that it was a long and painful process of learning. But it pays off, believe me!
The German Clean Code Initiative has a good website as a starting point. It has a lot of info and also references to literature and exercises. Sadly it is only available in German. For all you English speaking people out there, try starting by reading the Books „Clean Code“ and its follow-up „The Clean Coder“ by Robert C. Martin. Those are great to reflect on your own practices and hopefully they will point you in the right direction and to additional sources. Enjoy learning!