Updated December 13, 2017
With the vast array of technology, language and platform choices available today, it can be very difficult to figure out when you need to work on increasing your Software Developer Skills.
I’m often asked advice on how to be a better programmer.
Most often the question someone asks is based on whether or not they should invest their time in a particular programming language or technology versus another.
This is a very difficult question to answer. It's almost impossible to guess what languages will be the best to invest time into.
However, there are a few skills that always seem to conquer the test of time. That is, there are some software developer skills that will give you the most opportunity to succeed in your career.
Solving Problems
I’ve talked about the need to learn how to solve problems before and I’ve even given some steps on how to improve your problem solving skills. I believe problem solving is the most critical software developer skill.
Software development is 100% about solving problems.
All software is designed to solve some user problem and within that general solution is a wide array of smaller problems that make it up.
It really doesn’t matter what programming language or technology you use, if you can’t solve problems, you won’t be very good at developing software.
It is amazing how bad most developers are at solving problems.
I constantly hear complaints about job interviews that are too hard because they ask the developer to solve some difficult problem.
I’ve talked about why hard interviews are good and part of the reason is because they test a developer’s ability to solve problems.
I know that many developers still disagree with me about this point and don’t see why a site like TopCoder would improve their development skills so much. I'm a strong advocate of TopCoder because I personally used it to hone my own software developer skills. Problem solving on Topcoder is directly associated with a turning point in my software development career.
Think about a carpenter. If you want be a successful carpenter, you should probably be good at cutting wood. You should probably have practiced doing all kinds of cuts and using many different tools to cut wood.
It doesn’t matter how many years experience in carpentry you've had or how well you can design furniture or cabinetry if every time you try to cut wood you struggle with making the cuts.
Cutting wood is an essential skill for carpentry. Problem solving is an essential software development skill.
Teaching Yourself
I believe one of the most important skills in life is learning to learn.
Learning to learn is an especially an important software developer skill because software development is constantly changing.
You can’t know everything about everything. You can’t even really invest the time it takes to be a master of one particular framework or technology — things are moving way too fast!
Instead you need the ability to quickly acquire the knowledge you need for the task at hand.
If you want a skill that will propel you through your software development career, learn how to teach yourself.
At first this is going to be very difficult. But it's absolutely essential to a successful software development career. And in the same vein, teaching yourself quickly will unlock even greater potential.
I made a course specifically for teaching yourself things quickly. If you struggle with self-teaching, or you find you're a “slow learner”, this course might just change your life.
Get it here: 10 Steps to Learn Anything Quickly.
If you're able to quickly adapt to the rapidly changing software development market, technologies and platforms, you'll have an incredible advantage over other developers who stick with the same technologies and refuse to adopt new ones. You're software development skills will always be in demand and you'll likely have a high-paying job because of it.
If you want more information on learning things quickly, I wrote an entire section in my book: Softskills: The Software Developer's Life Manual.
Softskills has an average rating of 3.98 (with almost 1200 ratings) on Goodreads.com and an average rating of 4.7 on amazon.com with almost 250 ratings.
Naming Variables
When people ask me what I do all day, I mostly say “read things other people name and name things.”
Ok, no one really asks me that and I wouldn’t really answer it that way, but I certainly could.
Software development is all about describing the metaphysical. Most of what we are building can’t be seen.
We have to construct in our minds an entire world with authorization managers taking authorization requests and spitting out an authorization response alongside user repositories using user factories to assemble new users.
Every time you are writing code you are naming things. When you read code that you or someone else has written, you are gaining most of your understanding about that code from the names of things in that code.
Most of the time I can accurately predict a developer’s skill level by looking at how they have named methods, variables and classes in code they have written.
A developer who lacks the ability to give good names to concepts and data in their code is like a mute translator. It doesn’t matter if you can understand something, if you can’t adequately explain it, the moment it leaves your head it is gone.
The best way to improve this skill is to always put it into practice. I’ll often rename things in code I am just reading to get an understanding. As I start to understand what a method is doing, I’ll change the name to match that understanding. I’ll do this while I am reading the code, not even making any logic changes to it.
The more you focus on giving good names to things, the better at it you will become.
This is also the most visible thing about your code. It is hard to know if your code is correct or efficient by looking at it, but if I read it and can understand it, I am going to assume you know what you are doing.
Dealing with People
[responsive_video type='youtube' hide_related='0′ hide_logo='0′ hide_controls='0′ hide_title='0′ hide_fullscreen='0′ autoplay='0′]www.youtube.com/watch?v=DHXTIPXx1OE[/responsive_video]
I list this as last, but in many cases you could say it is the first or most important skill.
Everywhere you go there are people.
Unless you work alone and develop software just for yourself, other people are going to influence your career as a software developer.
I’ve talked about why you might not want to criticize someone else before, but there is much more to dealing with people than not pissing them off.
I always go back to the famous book by Dale Carnegie, “How to Win Friends and Influence People,” because this book is so important in learning how to be a successful human being.
I’ve said it before, but if you want to develop people skills, read this book!
The basic problem is that humans are not logical creatures, we are emotional ones. Sure, we like to pride ourselves on our ability to reason, but the reality is that most decisions we make are more influenced by emotion than reason.
What this means for you as a software developer is that unless you can effectively deal with other developers, managers, and even customers, you will constantly face trouble despite how good your ideas are or how valuable your skills are.
Being active and involved in the software development community in general can also help you immensely in your career. It is not just about networking, but getting your name out there and building good Karma.
Doing this successfully hinges directly on your ability to deal with people. (Want to take a big shortcut in learning how to deal with people? It’s simple. Be nice!)
Technical skills
Notice I didn’t include anything in my list about a particular technology or even as broad a skill as web development or mobile development?
It is certainly important to have a solid foundation in a couple of technology areas, but what those areas are is not nearly as important as the 4 skills I mention above.
If you can solve problems, learn things quickly, name things well and deal with people, you will have a much greater level of success in the long run than you will in specializing in any particular technology.
With that said, of course it is important to thoroughly learn a programming language or two and to have a general area of specialization, but as long as you don’t go too far off the beaten path with those choices and you focus on these 4 important skills, you will be ok. For more information on technical skills check out this post I made on The Technical Skills You Need as a Software Developer.
In my new book The Complete Software Developer's Career Guide, I dedicate an entire chapter talking about the various technical skills you need to master. As a general rule, the Career Guide will probably answer all of your questions, or give you a good idea of where to find the answers.