Sorry, haven’t gotten around to translating this beauty, yet.
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!
Some time ago, Microsoft started to implement a re-certification policy for certain certifications, resulting in the need to re-certify every two years. The Microsoft Solution Developer for Web Applications is one of these candidates. As I have owned this certification for quite a while now, I was due for a re-certification.
Well, Microsoft was offering a free second shot, so I took them up on that offer and registered without any preparation. What was there to lose? And I was using many of the technologies in my current projects or have been using them in past projects. That knowledge must count for something, right?
But it was not enough. The evil „FAIL“ appeared at the final screen. It was a close call admittedly, as I must have missed only a single questions judging from the score.
„OK“ I told myself. „That was not too bad considering. I did not study for the exam“. Still, some questions had struck me as totally awkward.
Yesterday I took my second attempt at the exam. This time I prepared more thoroughly by reading both exam books and doing additional research into certain topics. It was a rather intensive preparation. It was enough to *drum roll* ……………. hit the spot exactly at the passing threshold. I probably got one more question right compared to my first attempt. Whoa?! And while I recognized some of the questions, I felt kind of screwed over. I probably couldn’t have answered them if I had had the two books at my side. I cannot go into further detail because of exam NDA, but some questions were even riddled with strange mistakes or inconsistencies (even in the supposedly correct answers). I rarely commented so many questions in an exam. And seriously… memorizing configuration file syntax or configuration step sequence is not a thing my mind considers worth doing. Is that what it takes to be a good solution developer? If that’s what it takes, then I do not want to be one.
I conclude: Working through the books only helps with a few of the covered tops. Either you had previously used exactly the classes/methods/properties that were used in the questions, or you were at a loss. I have never before experienced such a poorly designed exam. And it was probably my tenth Microsoft exam I had the honor to do (or simply had to do, depending on how you see it). Maybe Microsoft should implement an „I am feeling lucky “ button into its exams.
Initially, I had planned to launch this new website at the first of May, celebrating the completion of my first year as a freelancer. Of course this did not work out as planned (why did I bother to plan in the first place?) because I was tied up in projects. Anyway, here we are.
In the future, I will try to write some technical blog posts, hoping to share some of my insights from everyday work while solving stuff in my projects or free time.
Feel free to give me feedback about the site.