It is time again this week. The national finals of the Microsoft Imagine Cup are going down. The cup is a technology contest for students. It is divided into categories (this year it’s Games, Innovation and World Citizenship) and in each category three German teams compete against each other. There has already been a preliminary selection during regional Finals. The winner teams of each category will be able to participate in the world’s international finals in Seattle and will also receive a few other rewards. And in Seattle even more honor and fame may wait for them. Because the competition there has a high degree of visibility to certain people like investors, supporters and other interested parties. I am emotionally connected to the Image cup as well, because me and some friends competed in 2009 and reached second place in the national finals. Including a handshake with the German minister of development 😉
But this time will be special in one certain aspect, because I will be part of the Jury for the Games competition 😉 I have to be honest: I am a little nervous. I have never been on a Jury in a contest of any kind. People who know me also know me as a passionate gamer who has literally consumed hundreds of games in his lifetime. That’s why I will try to do my best to be an objective and fair judge. After having a first look on the three competing teams I can say: It’s going to be exciting for sure.
The award ceremony will be on Friday during the opening of the Microsoft Community Open Day (COD), which I will attend in my role as .NET Usergroup lead in Essen. During the COD many Usergroup leads, most valuable professionals and other people from the Microsoft Community gather to discuss, network and see interesting talks. I am exciting about that as well and looking forward to meet old and new faces.
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!