Development Key Skills (or lack of them!)

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?

Comments (7) -

Troy Hunt
Troy Hunt
7/19/2011 4:41:39 AM #

This is a great post Paul and I totally agree with every one of your sentiments. What really worries me is that in this industry, the vast majority of developers either lack most of these skills or are far from proficient in them.

This is far from a localised view too. I spend a lot of time talking with and looking at the work of developers from a lot of different locations across the globe and the patterns are very constant: They understand the bare minimum needed to deliver a working product to the customer and not a lot more.

Now the counter-argument is "what's wrong with that"? Unfortunately when you don't understand basic VCS concepts are or able to leverage simple tools (c'mon - even monkeys have perfected that!), your efficiency sucks and I'm pretty sure I know who pays for that. And then when you can't write expressive code or are unable to take advantage of new language features because you're not keeping abreast of news then the support costs go up (keeping in mind ongoing support is always a significant proportion of total project cost), and again, I know who pays for that.

Interestingly, I do observe different traits across the different cultures I work with. Some of them are very process focussed, some of them are very deliverable focussed and others are just plain consistently incompetent. I won't name names on a public forum for obvious reasons but it's amazing how consistently these patterns appear across multiple independent developers and vendors from the same countries.

The last thing I have to say is that in terms of effectiveness in their role, the order of magnitude between the people who get the concepts you talk about and who don't is astounding. The Mythical Man Month talks about "good" programmers generally being five to ten times as productive as "mediocre" ones (and other studies suggest significantly more). Think about it - one guy sitting there on his own who can embrace and exemplify these skills could be just as effective as a team of ten people who barely grasp the concepts. Now that's worth thinking about.

Phil
Phil
7/19/2011 9:29:57 AM #

Humility.

Mainly being open to feedback and criticism goes a long way.

Passion? Wink

Neil
Neil
7/19/2011 12:41:35 PM #

So much of this rings true of my company. A small development house, we can't affort to take on liabilities (poor developers), but it's increasingly difficult to know from a short interview process who has the tallent.

The ability to _efficiently_ problem solve is paramount for me. It tears me appart when I see a dev being unable to hit google/bing and quickly (and consistently) get to the bottom of a problem. Is this a quality that can be learned?

Self motivation is also in the top 5 for me, but that's even harder to interview for or teach.

Adam
Adam
7/20/2011 1:13:58 PM #

Good reason to check into VCS more often - how reliable does he think these SSDs are? Smile

DavidS
DavidS
8/3/2011 9:58:10 AM #

I agree broadly with what you've said. However, I was curious about your keeping abreast with technology. I don't mind doing it but it has to be done during work time i.e. the employers need to set aside this time simply because it will benefit them in the long run.

However, from past experience, most employers do not understand the fact that we have to keep up with a cross section of technologies and as time goes by, specialisation will be required otherwise developers will end up disillusioned and output shoddy work.

Chris
Chris
8/31/2011 9:08:29 PM #

the "ability to care" is indeed a highly undervalued skill nowadays. You need to talk to someone fist befor you can see his/her motivation for the project. cheers

Peter "shawty" Shaw
Peter "shawty" Shaw
11/16/2011 12:01:42 AM #

Great post Paul,

I agree with everything except the VCS points.  Don't get me wrong, I'm not saying that you shouldn't use a VCS system, and I agree that you should absolutely check in often (The more the merrier) however, I don't believe that a good developer should need to know his/her chosen VCS system inside out.

I use SVN personally, but I've been in positions where I've used TFS, Mecurial & others.  Do I understand either of these as well as I understand SVN?  No, not at all.  Does this lack of understanding prevent me from using them?  Again, not as far as I can see.

I was always still able to check my code in, and check it in often.

As for the other points in your Post, I see questions on Lidnug and other places on a daily basis, and most of them are as a result of poor practices in the development environment, generally because the business has a lack of understanding in just what it is that the development teams do, to put it another way there's still an air of 'We Believe in the magic box syndrome' in an awful lot of places.

2 Things I'd like to add to what you've already put down:

1) I firmly believe that programming should be brought back into to comprehensive syllabus in UK schools, instead of just putting a reliance on the text book ICT education that most get these days.  As part of this re-addition, programmers should be trained in these good practices right at the beginning of their career path.

2) Programming and development practices should be taught by those that have spent time in the trenches, and not by those that have simply read a text book, in the UK at least there is far too much text book teaching and not enough practical teaching even at university level, if these practices where ingrained into the developers life before they even got into the workplace I think things would be a lot different.

Pingbacks and trackbacks (1)+

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

About Me

 

Web Developer. My most used framework is C# with MVC but use Webforms on occasion. Im an advocate of clean, maintainable code and am very passionate for what I do. Absolutely obsessed with Continuous Integration and how it should be used in every day development scenarios. Trying to move towards a system of Continuous Deployment
Follow Me on Twitter

Jetbrains Academy Member

 

MVB Blogger

 

Friends Of Redgate

Month List