I’ve talked about this post during the recording of the latest This Week In Testing episode (soon to be available). It is well written post by the blog owner - Derek Hatchar that explains his take of the skill a developer need to have in order to survive in this highly competitive work – read it here.
I feel that I didn’t give enough credit during the webcast to the post – this is a good list and I guess that every software developer (or manager) has a similar list that he (or she) thinks are essential in order to “stay relevant”.
What I did not like in the list is the fact that it seemed to be mostly (but not only) technology based – I don’t think that every developer out there must know how to print or send email with his language of choice.
During the webcast Doron has asked me about my list of development skills needed and it took me more time to answer then it should have, it should have been an easy task – name the skills make one developer better at his work then others – I’ve though of the subject quite a bit and the list below is my take on the survival skills for developers:
- Basic operating system knowledge
It pains me to meet developers that have no idea how memory is managed, what are threads and that file is just a bunch of bytes. I don’t think that you need to compile your OS kernel daily nor do I think that every developer should use Linux, Solaris and Windows - but you do need to know the basics.
Although OS understanding seems pretty theoretical subject I cannot start to count the times this knowledge had helped me write better code, solve a task or find a bug.
- Programming languages
I said it before and I say it again this is the main tool of our trade and the more tools you have the better you can do your job. You don’t want to be the guy that only knows C# and cannot read the VB.NET examples or that fellow who only solves problems in Java even if the rest of the system was written in C++. But there is much more to learning programming languages then adding another line to your C.V. with each programming language you learn and use you acquire insight to how to do things in another way. If you’ve been using OO language since graduation – try learning functional or dynamic programming by learning a new languages and see what happens.
- Communication skills
Unless you’re the owner and sole employee of your company as well as it’s owner you need to interact with other people to get the job done. Explaining your view and ideas is important. Most positions you’ll fill will require the ability to influence others without authority – from software developer to architect or a contractor we all need to be able to communicate our ideas and not less important listen to others.
- Know your tools
That where I think scripting languages, unit testing, XML, HTML and some of the points from Derek’s post come in. Whatever you do you need to be in control in whatever you need to get the job done – efficiently.
- Learn, Learn and learn
There is no simple truth in the business of software development, the only constant is that it keeps on changing all of the time. You must have the curiosity and the will to keep learning to stay in the race. You can always settle for a well used technology and keep using it as long as possible but sooner or later something new will come and you’ll become obsolete. Knowing how to learn is much more important – or as my co-host said during the webcast - I don’t know how to print documents but I guess I can find out quickly if I ever need to.
That’s my list of essential skills – what is yours?