You’ve probably heard the statements before:

  • If you are in a tech field, you need to be able to learn new technologies.
  • You need to get used to being uncomfortable.
  • If you do not keep up with the advancements in tech, you will fall behind and eventually be replaced.
  • If you do not like learning, better stay away from tech as a whole.

Now, it’s easy to throw these statements around, and for the most part, I agree with them. But what is this concept of “learning” that everyone mentions all the time?

The “learning” we do as humans is actually a really complex topic which I do not have enough knowledge to explain. Therefore, in this post, I will try to simplify the scope by focusing on learning in the tech field, which is a very volatile field by its nature.

The things I mention are all coming from personal experience.


Why Is Learning Important?

First things first, let’s discuss why learning is important in tech.

Anyone that has researched a little bit about the tech field would quickly see that it’s a vast field, almost endless even, which covers a lot of ground in our lives. In other words, it’s not something that we can understand fully by reading a couple of books, then practice our learning in the field. It’s simply impossible.

So, what seems to be done by everyone (myself included) is to start from the other way around: instead of learning the entire thing and then practicing it in real life, we learn piece by piece in places where we see a need.

This subtle change in our approach regarding learning effects pretty much everything we do as software engineers. Essentially, this means that our perspectives are pretty limited at the beginning. You can think of this as a map of a game we play all together. The places where we can go are pretty limited at the beginning. We can only unlock new places as we discover them on the map.

From the map analogy above, we can see that the “unlocking new places on the map” part corresponds to learning new things to improve our perspectives. Therefore, we can come to the conclusion that learning is a prerequisite for becoming a better software engineer.

In a field where everything is basically a tradeoff, analyzing tradeoffs and proposing a proper solution requires a broad perspective. That is why I believe learning is pretty important for software engineers. In other words, stopping learning is probably the most harmful thing we can do to ourselves, especially at the beginning of our careers.

So, let’s unravel the process of learning in tech.

The Learning Process

The process may start in a couple of different ways:

  • There might be a concept which intrigues us,
  • There might be a lack of information about a current problem at hand which requires us to learn new concepts to solve it.

There are probably more ways that I cannot think of right now.

Nonetheless, the important part here is that we have a destination we want to reach. Here is a naive visualization:

Current point ---------------> Destination
    \(^ . ^)/                   \(^ . ^)/
       ||                          ||
       /\                          /\

We can say that the whole part in the middle is the process of learning. Here is what we look like during that process.

Current point ---------------> Destination
    \(^ . ^)/     (- . -)       \(^ . ^)/
       ||           ||             ||
       /\           /\             /\

The frustrated stickman in the middle was actually me yesterday, while I was trying to understand how lifetimes work in Rust.

While the way people learn might differ from individual to individual, it is more or less common to feel frustrated during the process. At least that’s what I’ve seen from myself and the people around me.

It’s actually a painful and uncomfortable process (see the hint?), because we are actively go out from of comfort zones to improve ourselves. There is also the fact that the process requires serious time and effort. So if we combine both, we become like the frustrated stickman above.

We can’t suppress the nice, cushy feeling of our comfort zones, so what can we do to make the journey of learning as less frustrating as possible? Here is what I’ve found throughout the years.

It’s not running away from the frustration, but embracing it.

Step 1: Accept the Facts

The very first thing we can do is to acknowledge the state we are in during the learning process.

1 - We should acknowledge the fact that the state we are in is an uncomfortable one for our body.

We are intentionally pushing ourselves to get out of our comfort zone to improve as a whole. Therefore, we are internally facing resistance. This makes us question the process we’re investing time in, which pushes us further away from our goals. At this point, we should accept that the feelings we experience are quite normal and expected, and this state of discomfort will be a temporary one. This is why people frequently say to be comfortable being uncomfortable.

2 - We should acknowledge the fact that the learning process will take some time and effort.

Nothing worth chasing comes to us in an easy way. If that was the case, then it wouldn’t be something that is worth chasing. Unfortunately, this is the fact of life, and the distractions we have in our lives (e.g. social media) intentionally play on this feeling, which makes the whole process even harder to push through in this day and age.

3 - We should acknowledge the fact that it is not something that we do once in our lives and be done with it.

Learning is something that will just go on as we live our lives, especially in tech. The amount of things we may need to learn may change eventually, but the learning process will happen more than once nonetheless.

The facts are laid out, and the road ahead is already hard enough. Having this mindset is probably the most important thing in our journey to being a better software engineer, but it is not enough.

We’ve set the mindset in here pretty well. So, let us discuss the actual effort we’ll be making during the process.

Step 2: Be Honest and Fearless

Now, when it comes to the actual effort, it’s really easy to fool ourselves to a point where it may become a little bit harmful, considering the effort we’re making just to start the actual process.

So, I’ll just tell the hard truth I’ve experienced throughout the years:

In order to learn, you need to get feedback. The best way to get feedback is by failing.

In addition to the frustration that comes from getting out of our comfort zone, the actual learning process should add additional frustration as well. The best way to learn something is to just actively get exposed to the thing that we are trying to learn, and spend time with it.

There is no magic that makes the whole thing easier and faster for us. If there is a way that claims this, be certain that it won’t be beneficial for you to invest time in that way compared to facing the concept head on. At the end of the day, learning is hard. That’s it.

In tech, facing a concept head on is quite hard to pull off, since the concepts themselves are hard as well. Along with this, everyone and their friends are putting out tutorials that claim to help people. So, naturally, when an individual wants to learn something, they lean more into these tutorials, which all have a nice roadmap laid out with lots of examples.

Basically, there are some distractions.

If you are one of those people who prefers tutorials, I would strongly suggest you change the way you learn. Allow me to elaborate.

Tutorials Are Comfortable

The reason why tutorials feel better for us is the fact that they are really comfortable.

How?

Tutorials are basically interfaces created by other people which allow us to see a concept in a nice, cushy premade playground. In a tutorial environment, the inputs and outputs are all basically predefined. The creator has the total control, so they can exactly control how things will go as you watch it. This environment you put yourself in has several major issues:

1 - Where is the effort that we should make?

Watching a 40-hour-long tutorial is both a time investment and an effort, but it is not the kind of effort that benefits us in terms of learning. We are not actively discovering the things that are mentioned during the tutorial. Someone else already did, we just see the artifacts of their learning.

2 - The things software engineers deal with in the real world are chaotic.

Nothing is laid out in front of us with everything set in stone. The nature of this profession is to work in uncomfortable situations, which is the total opposite of what we experience when watching tutorials.

3 - The scenario that plays in the tutorial is just one scenario.

That’s it. We might feel like we are good at that, but as soon as something changes, it all falls apart. It’s quite normal to feel this way because we form our opinions based on a comfortable playground, so when one of the variables changes, we get frustrated.

I can keep going with the list, but I think these points would be enough to stress the actual problem.

If you heavily rely on tutorials during your learning process, keep in mind that you are just getting an idea about a concept, not learning it. Be honest with yourself, because no one else will, and do not be afraid.

Okay, so what is the alternative? It’s easy to bash tutorials without presenting an alternative solution. Allow me to explain what I prefer instead. Maybe it might help you for your next learning session.

It’s not something that you haven’t heard before.

The Documentation

Before you say not this again…, I’d suggest you keep reading for a moment.

A documentation for a given tool, or a widely accepted book about a given concept, is a vastly superior way to understand a given concept for certain reasons:

1 - There is no hand holding.

The information is there for you to get it, you just need to allocate time and actually make the effort. This is an uncomfortable situation which is exactly what we need.

2 - There is no abstraction between the source of truth and you.

In other words, there is no loss in information. You do not tie yourself to the learning of an individual, you tie yourself directly to the source which is carefully crafted by great minds behind a given concept.

3 - Reading is another valuable skill for a software engineer.

It is something that you do a lot more compared to writing code. By going straight to the source and trying to understand it, you develop your reading skills along with the actual concept you are learning. By improving your reading skills, you improve your focus, which is fed back implicitly into your learning process and your day-to-day life.

See the difference?

In this scenario, you are the main character who actively makes the effort, no one else. You put yourself in an environment which allows you to have a perfect ground to build your learning upon. This is why, I’d highly suggest taking this path instead of watching endless tutorials to simply not waste your time.

However, this is not enough. Just like how a blacksmith cannot be a good blacksmith by reading books about their craft, we cannot be good software engineers by only reading about things.

Get Your Hands Dirty

Regardless of whether you choose to go with tutorials or with documentation and books, this part does not change.

Remember, the main idea that I’m trying to pass on is this:

In order to learn, you need to get feedback. The best way to get feedback is by failing.

No matter whether you are watching or actively reading, you do not fail in both ways.

So to complete the other half of the learning process, we need to get our hands dirty. This part is sometimes really easy but other times really hard, because you need to find some ideas to work with. If you cannot come up with an idea, I’d say that it is perfectly fine to allocate additional time to research. This might take some time, and that is quite normal. Remember, we’re trying to improve our perspectives, so it’s pretty natural to not have any idea about the things we are trying to learn.

Once you decide what to do, you again put yourself in an uncomfortable situation to gain hands-on experience. During the implementation, you will frequently refer back to the documentation and research. With the things you discovered, you will try them out to solve the problem at hand. Sometimes all will work out just fine, but other times you will fail miserably.

This part of going back and forth will frustrate you a lot more than you think, and this is exactly the feeling we’re trying to experience. Do not be afraid when this happens, because at that point you can be sure that now you are learning!

At the end, once you push through all the frustrations and then finally bring your idea to life, you will be proud of what you achieved! Now the fun part begins!

…or does it? Are we finally done?

We’re done, but just for this time. Oh, @#$%!

Step 3: Learning is Continuous

As mentioned in the first step, the last thing we need to realize is the fact that learning is something continuous.

Combining our map analogy and the learning process, we can say that we successfully revealed a new part of our map. However, this doesn’t mean we are done. There are still a lot of places that need to be discovered. Therefore, this process we just discussed is bound to happen more than once.

At this point, keep in mind that the goal is not to uncover the entire map. As I mentioned at the beginning, it is a pretty ambitious but close to an impossible goal. The goal is to uncover the places where you want to go, and utilize your learning time effectively.

I can safely say that as a software engineer that frequently finds himself in this position, it gets easier as you keep discovering new places. Everything you learn becomes part of your overall experience, which you can easily take advantage of in your next journey.

If you read up until this point, you will see a pattern. Everything that I explained to learn new concepts puts you in an uncomfortable position. That is why you should try to get comfortable being uncomfortable, trust the journey, and in the end, you will reap the benefits.


And that’s it!

I don’t know why, but I love talking about learning. It’s a skill that we utilize at the core of our profession, so investing time on improving this skill feels like time that is truly well spent.

Before closing, I would like to mention that everyone’s learning journey will be different. This is the mindset I formed that works for me, and I would encourage you to actively think about your own learning style.

It’s already getting pretty long, so I’m stopping for now. Thanks for reading!

:wq