3 awesome books to improve your soft skills

Productivity as a developer may be measured in lines of code produced by cup of coffee consumed, but it’s not a very useful metric. Effectiveness, or doing the right thing, is more important that cranking out code and learning yet another new technology. To do this, you need to step away from the keyboard for a while and focus on knowledge and soft skills that will allow you to use your programming skills more effectively.

These are my 3 favorite book to learn the skills you need to be more effective and do the right thing. I suggest you read the books in the order they’re presented since they build nicely on each other, but they are all worth your time individually.

Essentialism: The Disciplined Pursuit of Less

With all the new ideas going around and all the skills you could potentially learn, it’s easy to be pulled in many conflicting directions. This book will help you figure out what’s really important in your life and your career and help you focus on it.

I’m pretty susceptible to this myself : if I let my guard down for a few weeks, I’ll end up with a thousand things on my plate. This book was was a great help in refocusing and choosing goals for the next year so I can go forward with a few things that really matters to me.

The Slight Edge: Turning Simple Disciplines into Massive Success and Happiness

Once you have a few good goals, how to you apply them? I believe that small efforts over the long term is the recipe for success, and I’ve lived according to this principle for a long time. I was glad to find that book, which describes how it works in simple and accessible way.

You want to keep moving in the right direction most of the time: in the end, the results will delight you. But be careful since it works both ways. If you do a bit of the wrong things and dismiss it as not being “that bad”, you’ll end up somewhere you didn’t intend to go.

The Power of Habit: Why We Do What We do in Life and Business

Since small efforts over the long term are a great strategy for success, how do you manage to do it? By building habits in your life that makes doing the right thing natural and effortless. Many things in our lives are driven by habit: you might as well take control and build the right habits.

This is the definitive book to understand habits, how to use them to your advantage in your life and how to get rid of the bad ones. If you could read only one book on soft skills ever, you should read this one and apply it religiously. This is the kind of book that can change your life, one habit at a time.

Note: The links in this post are affiliate links, so I’ll get a small commission if you buy the book using them. You can also search for the books directly on Amazon.

My 3 steps process to learn new skills as a software developer

In my previous posts, I wrote about mapping your current skills, and using this knowledge to decide which skill you should learn next as a software developer.

Once you’ve went through this, you should have found a few skills that are really worth investing your time and energy into, and have a good idea why you want to learn them. On the other hand, those skills are still very general and won’t help you figure out what should be your next step. How to you break down a complex subject so you can work on it and learn something useful? What is the most productive way to get started? Here is my 3 steps process to get a solid understanding of any new skill you wish to learn.

learningpyramid

Exploring

To get started, you must first get an high level overview of the skill you wish to learn more about and get familiar with it. Get the big picture by listening to a few podcasts or recorded conference talk that presents general information on your skill of choice, or skim a book or two.

Learn more about the community and culture around it and find the blogs and other places where people hang out to immerse yourself in the subject. You don’t need to understand everything at this point: you just want to get familiar with the vocabulary and the major moving parts involved.

You should also start playing around with the technology to understand better what people are talking about. Do the setup right now, complete the newbie tutorial and play around just to get a feel for the technology and have a few quick wins. If you’re already ready to get started, it will be one less thing standing in your way when you have a better idea where you’re going.

Planning

You should be familiar enough with the subject and what it involves at this point to know what are the most interesting parts. You can now make a plan detailing what you wish to learn to reach the original goal you had for learning this skill. Most subjects are too big to take in all at once, so you’ll need to break it down in many smaller parts.

This is where your exploration comes in handy. Using your new knowledge and the resources you found, write down a list of specific skills you wish to learn related to the main skill. This list will include specific actions: with each skill, you need to write down how you plan to learn it and put it into practice. In some case it will be working through a specific resources like a book a video course or a tutorial, but in other cases it may involve a small project. For example, the last skill I learned about was creating a small application with Ruby on Rails, and I completed the tutorial at https://www.railstutorial.org/ to achieve this goal.

Don’t be too worried about narrowing down the subject : most subjects worth learning are a combination of many things. What’s important is that the parts are actionable and small enough to be completed in a reasonable time. You don’t want to have to slog through a huge goal, or you’ll eventually lose your focus.

Focusing

Now it’s the time to really put your head down and bring one of the project you planned in the previous step to completion, learning as many things as you can as you go along. Focus is important at this point: you time is limited, so you’ll make the most of it by tackling only one skill at once and understanding it properly before moving on.

The best way to focus on projects and actually complete them is to build an habit of continuous learning. If you want to keep growing and improving as a software developer, slow and steady wins the race. Motivation is fickle and will fail you. It will give you a quick burst of learning which will be fun and rewarding in the short term. Unfortunately, those bursts will be followed by long periods of not learning as your attention get caught by something else. I wrote a detailed post about creating good habits to learn here: http://blog.cindypotvin.com/maintain-habit-learn-coding-skills/.

While you’re working, make sure you stay mindful and understand what you’re doing the best you can. You can get things working by copy-pasting code, but you won’t really learn about what is going if you don’t take your time. You’re not cranking out widgets: the best use of your time is learning and understanding, even if you stay stuck and have some unproductive sessions. You’ll get better at getting unstuck with practice and have more confidence that you’ll figure it out.

What is the next skill you should learn as a software developer?

In my previous post, I wrote about mapping out your current skills to know where you stand and take control of your learning. But knowing where you are is a lot easier that knowing what to learn next.

Choosing what to learn next requires gazing in your crystal ball to guess if the technologies you want to learn will stay relevant. With the number of frameworks and tools that are churning out at a furious pace, you don’t want to guess wrong and have to start over in a few years.

Fortunately, you can put all the chances on your side and reduce the amount of guesswork needed. First, you need to focus on skills that will always stay useful and that you can build on. If you’re only learning just-in-time with no thoughts for the future, your skills won’t form a coherent whole.

Also, you need to have an idea of where you wish to be in the next decade, even if you will probably be wrong to some degree. You’re still going to be working in the next decade, right? It’s best to plan for it and take control since the time will pass anyway.

Back to your skills map

We’re going to start a bucket list of skills and concepts you wish to learn to help you figure out the best way to go. We’re only brainstorming at this stage: writing down a skill on your list is not an obligation to learn it. You’ll evaluate the ideas on your list later.

Going back to the map of your current skills, you can already identify some gaps that must be filled using your own experience and knowledge. Write those down on the top of your list. I’m sure there are also some skills you wish you knew, even if they’re not relevant to you current job or skills: write those down too.

Make sure you don’t forget to write down skills that are always valuable regardless of the tech stack used: patterns and architecture, programming languages, low-level concepts, project and time management, speaking, writing, and tools to help you learn how to learn.

Here’s my own bucket list of prospective skills:

SkillsToLearn

You’ll always be adding new items on this list, so don’t worry about it being 100% complete.

Managing the bucket list

Now that you have a list of prospective skills to learn, how to you manage it? The same way you created your skills map: you first must have strong core skills that will serve your long-term goals before spreading out to other kind of skills.

If you’re starting out or moving to a new specialization, rank the skills on your list in order of importance to the best of your knowledge, starting out with core skills. Once you’ve learned more and grown your knowledge of your industry, you can rank the skills on your bucket list more accurately. Also, don’t forget to update your map with your newest skills!

But how do you know what skills are important and will be the most productive use of your time? You must take the pulse of your industry on a regular basis to know where it’s going and understand how you fit in it.

It doesn’t need to take ages: a few hours a month is enough to get a decent handle on what’s going on. Here are some of my favorite strategies: as a bonus, they will help you find skills you didn’t think about and that will be worth adding to your bucket list.

  • Speak to other developers at user groups,
  • Go to a general conference in your field,
  • Read blogs and listen to podcasts,
  • Browse at the library, on Amazon or on training site such as Treehouse or Pluralsight,
  • Stay curious!

Beyond the bucket list

When your core skills are strong, you can choose more freely and rank skills on your list based on what interest you and has the most long-term value. Unless you’ve chosen to learn a skill that’s totally obsolete, there is no wrong answer, and no one path to mastery as a software developer.

Learning cannot be forced: you need to be mindful and focused when you’re learning, so choosing skills to learn based only on their value on the market and the latest “must learn” fad will burn you out in the long term. Once you’re strong at learning and have good core skills, picking up a new framework or API will be something trivial that can be done as needed anymay. You’re better off focusing on skills that are valuable to you and that will help your grow as a software developer.

In most cases, I would rather learn skills that make all my other skills stronger such as testing and JavaScript patterns, and soft skills such as blogging, but I’ll throw in an unrelated skill from time to time to add some perspective. Another good approach is to invest in a strong combination of skills instead of focusing only on programming. For example, if you have a strong understanding of finance, security, big data or mathematic in addition to your programming skills, you can go a lot farther in those specialized fields.

In the next post, I’ll conclude this series by explaining how to drill down on a particular skill and outline a plan to learn it.