The 4 Most Important Skills for a Software Developer

With the vast array of technology, language and platform choices available today, it can be very difficult to figure out where to best invest time in training your skills as a software developer.

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.

I’ve been giving this quite a bit of thought lately and I’ve come up with what I think are the most important and timeless skills that a software developer can attain which will give them the best career opportunities and make them the most effective.

Skill 1: Solving Problems

problems thumb The 4 Most Important Skills for a Software Developer

I’ve talked about the need to learn how to solve problems before and I’ve even given some steps of how to learn to solve problems, because I believe this skill is critical to any software developer.

Software development is 100% about solving problems.

Without problems there wouldn’t be a need for software.

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, but I know from personal experience that it was the practice of solving problems on TopCoder that was the turning point in my 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 have 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 a base skill of carpentry, just like problem solving is the base skill of software development.

Skill 2: Teaching Yourself

learining thumb The 4 Most Important Skills for a Software Developer

There is probably no more important skill in life than learning to learn.

This skill is especially important in software development, because no field I know of changes more rapidly than software development.

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 truly want to have a skill that will propel you through your software development career, learn how to teach yourself.

The only way to develop this skill is to put it into use.  Go out and learn a new programming language or technology, even if you think you’ll never use it.  You’ll be surprised how quickly you may be able to pick it up because of the foundation you will already have in what you know.

If you can quickly adapt to the rapidly changing software development market and technologies and platforms associated with it, you will have skills that will always be in demand.

Although I am a bit skeptical of some of Tim Ferris’s claims, he has an excellent book called the 4-Hour Chef which has some great techniques about how to learn things rapidly.  (I was wanting to write a book about this very subject.)

Skill 3: Naming

naming thumb The 4 Most Important Skills for a Software Developer

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 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.

Skill 4: Dealing with People

dealing thumb The 4 Most Important Skills for a Software Developer

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!)

What about practical 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.  (You could even learn C++ wlemoticon winkingsmile The 4 Most Important Skills for a Software Developer)

  • http://gravatar.com/stevehazen Steve Hazen

    interestingly, I fell I am strong in all four areas. But I wonder if others would agree. I should ask.

  • http://twitter.com/martin_english martin english

    Just a few words in support of your approach to practical skills…
    Technology does not stand still, but the need for problem solving does not. The good Software Developer uses the most appropriate technology to solve their problems, not the the technology they know.

  • http://rbonazzo.wordpress.com rbonazzo

    A reblogué ceci sur rbonazzo and commented:
    Solving Problem – Teaching Yourself – Naming – Dealing with People Je suis parfaitement d’accord avec se point de vue

  • http://www.codeconquest.com/ Charles @ CodeConquest.com

    Hi John, interesting post. Particularly how you include naming. I hate reading code that’s full of single letter variables – that’s just laziness.

  • Pingback: Dew Drop – December 10, 2012 (#1,459) | Alvin Ashcraft's Morning Dew

  • Pingback: Looking for a job? Read this first - Colorblind Programming

  • http://khanhtoan.wordpress.com/ khanhtoan

    Reblogged this on Ghi chép cá nhân.

  • Pingback: Линкблог #8

  • http://www.vertexplus.com/ Software Developers India

    This is very nice and informative post and it is very helpful for every one and author can explain each and everything in these points i can really appreciate the nice work.

    • http://simpleprogrammer.com jsonmez

      Thanks for taking the time to post that. :)

  • http://rajahcraig.webs.com/ Quentin Lindsey

    Offshore software development in India has change into most recent development in the Web sector. There is certainly surge in number of organizations from assorted places worldwide who at present want to outsource to India for numerous reasons.

  • Pingback: 软件开发者的四大“看家本事” | 博客 - 伯乐在线

  • Pingback: Liens de la semaine #8 « frenchcoding

  • http://gravatar.com/quanxavier quanxavier

    John,

    I think your 4 points were spot on. I’ve had the same thing in my mind for a long time however I’ve never put it into bullet points as such. I’m moving into a lead role in the New Year and I was looking for something as concise as this to be a lantern to what my leadership would look like.

    • http://simpleprogrammer.com jsonmez

      Thank you. And good luck in your new role.

  • Pingback: Pick of the week links for programmers « Cogitas Blog

  • http://minolvirad.tumblr.com/ Hu Langley

    According to me, years of experience only matters if you are able to deal with any type of problems in the same field to what you have experienced. Rather than experience it does make more sense how much you know and the way to tackle the problems related to software when it comes to you and you succeed to it.

  • Pingback: 软件开发者的四大“看家本事” | 易诀

  • http://abhishekpsen.wordpress.com abhishekpsen

    Reblogged this on Abhishek's Hangout and commented:
    I really liked this post.. Reblogging it therefore..

  • Pingback: The 4 Most Important Skills for a Software Developer. | Sriramjithendra Nidumolu

  • Pingback: People Skills to Develop as an Entrepreneur | Kelly Business Advisors, LLC

  • Luke Mac

    What would be the best programming language to learn that would give me employment opportunities THIS year in either USA, India, or Brazil?

    I need a career change, am already a voracious learner and self-teacher, and I am an INTJ…which is a mastermind personality type…which would work perfectly in software developing…I love breaking down problems and systems and figuring out how to build up a system etc. Math was my best subject and I went to pre-calculus in high school with ease…straight A’s in math and language classes.

    So I have all the skills built in…which brings me back to the question at the beginning of my post…where do I start in order to learn a language NOW to get a job developing software in say… 3 to 4 months?

    I know that may sound impossible, but I am unemployed and even once I can actually find a temporary job….I have nothing to do for 7 hours a day… I could do something else obviously…but my philosophy is “work now so I can play later.”

    I think 7 hours a day for 3 or 4 months should be plenty of time to learn enough to find a job somewhere…even if just for a small business.

    And yes I am quite computer savvy…taking my laptop apart to install more memory and currently learning Linux.

    Please, any advice on where to start (especially the best language to begin with in today’s competitive market) or the best teach-yourself books, video tutorials, or websites would be greatly appreciated for this newb to software development and programming

    Oh and please don’t even try all that “u have to get a degree” bologna on me…the head of the IT department at the university I went to was an 18 year old just out of high school who taught himself everything he wanted to know about computers…I agree with Matt Damon’s character in the movie “Good Will Hunting”…anyone could get a Harvard quality education just from educating himself

    • http://simpleprogrammer.com jsonmez

      You can definitely do it in 3-4 months. Perhaps even less time.
      You need to narrow the scope though.
      Pick a particular language and technology.
      Start learning that language.

      I author courses for Pluralsight, so I am slightly biased, but honestly I would get a membership there and watch the beginner videos on what you want to learn. It is a ridiculous deal. And I think they have free temporary memberships for unemployed.

      Last word of advice, take a humble approach to this. You may be very smart and talented, but you are a beginner, there are going to be many things you don’t know, so it will be in your best interest to demonstrate and eager willingness to learn.

      I would be glad to assist you more on your journey, just send me a personal email if you have any questions or need some more guidance.

  • Luke Mac

    Thanks so much Json! I really, really appreciate that.

    I know that my first post sounded a bit prideful, but I merely mentioned all that stuff about myself to avoid any questions such as, “Do u think it would be the right fit for u?” etc. etc. And when I was posting, I was addressing anyone who may read the post and respond, not u personally…I get so tired of hearing about the lie that is “the necessity of a college degree” that I kick that dog before anyone else can…don’t want to hear it for the millionth time. College degrees CAN be great…in fact I am looking into an associates degree for web design or computer science, or both…but it’s not a necessity for everyone

    Alternatively I found a couple of websites that also had some advice and free resources. What do u think of their advice?

    http://tech.yipit.com/2012/08/21/how-i-taught-myself-to-code-in-8-weeks/

    http://forums.construx.com/blogs/stevemcc/archive/2007/08/12/how-to-self-study-for-a-computer-programming-job.aspx

    One last question…for the associates degrees, would I Iearn more in a classroom setting on campus or could I learn just as much doing online courses? I’d prefer online, since it saves on gas money and the nearest community college a good 25 minutes from here…and I don’t like driving…been in a couple near death situations in cars…but I’m willing if it increases my learning drastically over online courses.

    Thanks again for your time and support!

    • http://simpleprogrammer.com jsonmez

      Your welcome. Those links look like good advice.
      I actually think you learn the most by online and self-study, you just have to be focused and motivated.
      If you have problems staying focused or motivated a traditional classroom setting might be better, because it forces you to commit.

      Good luck and let me know if I can be of further assistance.
      Also let me know how it is going. :)

  • http://www.paddlingiowa.com/phpBB/profile.php?mode=viewprofile&u=192820 http://brechas.pilcrowcommons.com/casadelaamistad/index.php?title=How_Espresso_Roasting_Works

    I blog frequently and I seriously thank you for your information.
    The article has truly peaked my interest. I’m going to book mark your blog and keep checking for new information about once per week. I opted in for your Feed as well.

    • ashizuri

      piqued

      • jsonmez

        Awesome :)

  • Pingback: 软件开发者的四大“看家本事” | 易踪网

  • Pingback: Software Developer: Your Job Title Is Wrong, Here Is What It Should Be

  • Pingback: Career-related links - Colorblind Programming

  • Pingback: The 4 Most Important Skills for a Software Developer | Avantica Technologies Blog

  • Pingback: 4 Things I Wish I Would Have Known When I Started My Software Development Career | 天天三国杀

  • Wilson Raul Balderrama Gomez

    Thanks for the article I really enjoyed it.

    • jsonmez

      Your welcome

      • Claudia Al-Meida

        *You’re* #couldntHelpMyself

  • Pingback: Thinking about how to be a better software engineer | My Lane

  • Pro IT Online Training

    Hello,
    This is a very nice and informative article! I agree with each and every word you have mentioned, I have got some points from your article, which I need to improve and will start that process to be better programmer.
    Thanks.

  • Pingback: Ephemera

  • Elango M

    Awesome post.I Really Like This..

  • Jacob David C. Cunningham

    I don’t think cutting wood is an example of problem solving. Solving the problem in my opinion comes before the cutting but hey, you wrote this article before I commented.

  • Fendy Azman

    Having red this articles makes me feels that i am one lousy software developer. I don’t consider myself an expert software developer because i only have 3 years of experience in this field. Haha. I develop an internal application for my company. In terms of learning, i’m struggling to learn all of the these technologies and languages such as Java, Grails, Groovy, MySql, Apache, Networking, HTML, Javascript, PHP. When reading the programming books, i have to read it multiple times just to have an understanding on what it’s all about. There are just too many things to learn and i dont know if i can store all of it in my tiny brain!!. Btw there are only 2 programmers in my company and sometimes i handle the project myself through all the stages of requirements gathering, design, coding and maintenance. I can simply say that dealing with people in developing a software is a nightmare!. I just hope that i’m strong enough to cope with all of this and someday become a better software developer.

    • Preston Sandberg

      I am trying to obtain my computer science degree in the software development field and I was just wondering how much should I expect to make (salary wise) right out of college?

  • Sreejith Babu

    Thank You Very Much!!!.
    This is very useful information. A much needed information for me. I really doubted my software skills and didn’t know how to move forward. At least this article gave me some direction to look into. Thanks a lot!

  • Pingback: Private Krankenversicherung

  • Pingback: How To Be A Better Software Developer This Year | Simple Programmer

  • Nahdia

    A good read. Thanks :)

  • Pingback: How To Be A Better Software Developer This Year | Naik Vinay

  • Pingback: How To Launch A New Software Company In Less Than 6 Months - Tech Exclusive - The latest Tech, Gadgets and Games

  • Pingback: Why can’t I programme?! | Caroline Wood RES701

  • Preston Sandberg

    I am trying to obtain my computer science degree in the software development field and I was just wondering how much should I expect to make (salary wise) right out of college my first year?

    • jsonmez

      I really depends. If you have already been building some applications and market yourself correctly, it is possible to jump right into an $80k / year job. But, most people start out around $50-60k, (Location matters as well.)

  • Pingback: Make The Successful Career In .NET Using The Highly Prefered Programming Techniques | Lamar Hays's .NET Blog