This post is highly subjective and denotes the skills that I think a developer should have in his/her tool belt by default. I’d love to see this post grow by people adding their own ideas to it from their own experiences.
1. Good VCS Skills
I have added this as number 1 because I feel that at an interview we are not usually asked to demonstrate our knowledge of a version control system (VCS). In my opinion, we should have an understanding of why we use the system and basic practices around this system. Recently, I have discovered a developer who doesn’t use source control properly. The developer checks into VCS maybe once every 10 days or so. This developer was puzzled as to why I would challenge him on this.
As developers we should be checking our code into source control at least once as day. Not the use of the broad term ‘source control’ here as this article is not going to talk about good VCS practices as it is a very hot topic and justice cannot be done to that topic in just a few lines. We need to make sure that we are able to revert our local changes as quickly as we can on a main repo so a good VCS habit is needed for that.
2. Ability to write ‘expressive’ code
I’m quite fortunate to have read the book Clean Code by Robert C. Martin early on in my development career. This book changed the way I worked and made me slightly opinionated. Every piece of code I write now is reflected upon as to how it can be refactored, named better, more succinct or reused elsewhere.
Unfortunately, there are a lot of developers who don’t care about the code they write. They will copy and paste classes and methods, perhaps only changing 1 line (if any). This makes maintainability very tough as there are multiple instances of code to change. Developer can sometimes not use expressive names in their code. Others write very long methods that are difficult to follow. The list goes on of ‘code smells’.
I take a great deal of pride in what I do and it frustrates me beyond all belief when I look at code and know the developer hasn’t put a lot of effort or thought into. The lack of a key skills can very fast turn a nice codebase into a monolithic, legacy application.
3. The ability to care
As software professionals, generally, we get paid well for what we do. To me, coding is a hobby and I think I am very privileged to be able to be paid for a hobby. In return for my salary, the least my employer deserves is my full care and attention to my work. IT should be as good as it can be. We wouldn’t accept second best on a football pitch so why would we accept second best in the office?
Do not onto others what you would wish not them do onto you.
4. The ability to use basic tools
On our CV, we list what tools we are proficient in using. As a developer who writes in C# it may include Visual Studio. As we have listed this on our CV, we should really be able to use it. When it comes to an interview saying you have not used a tool that is listed on your CV would look very bad.
Falsities (I won’t call it lying) can cause concerns amongst the team. These concerns can harm the trust levels in the team and we cannot afford to let issues like this harm the balance of the team.
5. A willingness to grow and learn
In development, there are many ways to get a job done. There is no ultimate right and wrong answer but there are tried and tested methods that can help. As a developer, we should be able to accept that others may have a better way of doing something. If this is the case we need to be mature enough to accept that this is the case. When writing code this could take the form of a code review. If the reviewer points out an are that can change, then the reviewer and the developer can help to come up with something together. There may even the the transfer of new knowledge as well.
Too many developers feel their solution is the best possible way to do something or refuse to change the code if something better is pointed out to them. The ability to do the best job possible means we need to be constantly learning as developers. I do not know of a single developer who can be confident they know everything (queue jokes).
In order to do our best we must continually look at better ways of doing things. This could require reading blog posts, going to conferences or reading books etc. Not only will it benefit us, but it may also benefit our team as well.
6. Ability to communicate
Have you ever seen a sports team that don’t communicate? They are effectively a bunch of individuals and they could crumble. Why should we communicate as a development team? Creating the best solution, in order to learn from each other and to communicate issues )or successes) are a few of the reasons. This to me is a prerequisite skill for development. When I interview developers, part of the exercise is to pair program with them. This tests how effective they are at communicating with me. This is just as important as how good their code is.
If i was able to work with more developers with the skills (attitude) as these then I don’t think I could be in a better environment. I have one final question though – does such a perfect environment exist?