When you’re trying to grow by learning new skills or sharpening existing ones, there are often many directions in which you can go with it. This is especially true in wide-ranging industries like software, where the skills used are many and varied. It can easily leave you wondering on many occasions what you choose to learn next, as well as in what order long-term.

How to answer that is not easy, but there are a few things to consider that will help in doing so. The excitement of learning something new can be missed if you get stuck in a case of paralysis by analysis just figuring out what to learn. As someone who has a long “wish list” of desired skills and/or topics to learn about or advance with, I have to deal with this often.

The first question is if there is a skill you need to either learn new or enhance in the near future for what you do. Are you about to be put on a project that will require you to have a better understanding of C++ than you presently have? Will your next project call on you to deal with a TCP/IP implementation while you don’t know much about it at the moment? In that case, it’s relatively easy, with the bigger challenge being to find the suitable learning material.

Over a year ago, I knew I was going to work with a commercial real-time operating system (RTOS) that I had not worked with before but had an interest in. That meant this particular RTOS went right to the top of my priority list, and suddenly a Udemy course that I was interested in became one I would purchase and take very soon. It also meant that when I found a training series run by a consultant I respect highly that is based on that RTOS, I jumped at the chance with my company paying for it.

Previously, I had worked on a project that used C++ extensively for a year. During that time, I picked up my my C++ learning, including through Udemy courses and some book reading. Now that I am not actively working with C++, it has moved down my priority list.

The second question to consider is if there is something you don’t need for your work now, but likely will one day and that you have a real desire to learn. Is there something you find really interesting, something you are really curious about? Is there something that you think will be useful to you down the road either personally or (more likely) professionally? There may well be something for which the answer to both is “yes.”

Having spent a lot of my career in the embedded systems space, I am among other things familiar with RTOSes, some tools often used and microprocessor/microcontroller architectures. Among the embedded microprocessor architectures I am familiar with, however, are none of the Arm family, notably the Cortex-A or Cortex-M. Arm is basically eating everyone’s lunch in this world, so unquestionably this is an architecture one should pay attention to. As such, this is high on my list, and I have had some opportunities to learn about it and will add more to it soon (more on this shortly).

At a recent conference, I checked out a presentation on the Zephyr Project, which I had heard of before, and was even more intrigued. It likely will not be used in my daily work anytime soon, but I intend to occasionally devote time to learning more about it because it looks interesting and might well be relevant to what I do down the road.

Finally, is there a skill or subject area that you really could use on an ongoing basis, but are not very well-versed on or feel like you’re at an intermediate level and want to become an expert on? There is such a vast world of technical knowledge that it’s impossible to cover them all, but there are some things that we should be learning about and improving upon fairly consistently.

In the world of software, things like software architecture and secure programming are often great examples of this. These are subjects that cross a wide range of programming languages, techniques and technologies, and they are core to what we do. You can never really be too well-versed in these subjects, so it’s a good idea to find a place at least some of the time to cover subjects like these, or any other that you need to at least keep up at a good level.

A good example of this for me is the Linux operating system, which I understand as a user, developer and at the kernel level. Since a lot of my work is done in Linux, any knowledge I gain can help me in the immediate, while also helping long-term as I pick up new concepts and techniques and refine concepts I already understand.

Right now, my learning is mainly focused on some real-time operating systems (not just the commercial one I am using), Arm processor architectures and software architecture. To that end, the main books I am reading are one on RTOS design and architecture, one on the Arm Cortex-M3 and M4 architectures (as they are popular ones and I own development boards with processors of those architectures) and a software architecture classic (Software Architecture in Practice, 2nd Edition – the fourth edition was just released but the second is still a good one).

All of these check a particular box noted for me at this time. Later, other subjects might do that, including ones I am just a little curious about like Zephyr, or something like graph databases, which are part of the big subject of data structures and algorithms.

While there isn’t time to learn them all right now, or even in a longer time frame, the great thing is that there is always something interesting around the corner. That helps mitigate the fact that there is some decision-making involved in what to learn, and hopefully what I have shared here is also helpful for you.

Share Your Thought

This site uses Akismet to reduce spam. Learn how your comment data is processed.