Photo by Francisco De Legarreta C. on Unsplash

ℹ️ Info

Thanks to my friend André Gonçalves da Silva for reading and reviewing earlier drafts of this post

If you work in software development, you’ve certainly heard phrases like “Never stop learning,” “You have to stay updated,” “Our field changes very quickly,” and so on.

Of course, all these phrases are right, to some degree. But going around repeating “never stop learning” like a parrot isn’t the most useful thing in terms of providing direction for your learning.

What often happens in practice is that many people, having never learned how to learn properly, make many learning mistakes that compromise their professional development. These mistakes can lead to slow progress, frustration, and even career stagnation - something nobody wants to experience.

That’s why, in this post, I decided to compile what I believe are the most common learning mistakes that developers generally make. This list is the result of years of personal experience, observation of fellow developers, and many conversations with people in the field. I know what I’m talking about from practical experience because many of these mistakes are things I’ve made myself.

(Being honest, I still make some of them and I’m always having to check myself to stop, but don’t tell anyone. ;))

Identifying and understanding these mistakes is the first step to overcoming them. By avoiding them, you can optimize your learning process, accelerate your professional growth, and stay relevant in a field that’s always evolving.

So, without further ado, here’s the list of learning mistakes to avoid. For each mistake, you’ll see:

  • the explanation of the mistake
  • the problem it causes
  • how to fix it

Let’s go!

Table of Contents

Thinking That Content Consumption == Learning

I started the list with what I believe to be the most common learning mistake currently, simply because we live in an era where content is produced in massive quantities.

Why Do We Fall Into This Trap?

Consuming content is easy, convenient, and (potentially) fun. Let’s understand why:

  • Easy: It’s passive, you don’t have to think much or make decisions, and humans tend to seek the path of least resistance.
  • Convenient: You can usually consume content while doing other things:
    • Listen to a podcast while exercising or washing dishes
    • Watch a video while eating lunch
    • Read posts on Reddit while waiting in line at the bank
  • Fun: Many creators realize that to engage their audience, they need to add entertainment value and transform the content into a performance that holds attention.

There you have it - the trap is set. Then you go ahead and create a strategy to fill every free moment of your day with podcasts, YouTube videos, blog posts, Reddit, and whatever else.

The Consequences of This Mistake

In the end, you will have:

  1. Consumed your time with superficial information
  2. Retained almost nothing of what you consumed
  3. A vague feeling that you “learned” something

But when it comes to applying this meaningfully in your daily life? That’s where things don’t add up.

Long-term, the consequences can be even more serious:

  • Professional stagnation, as you’re not really developing new skills
  • Frustration when realizing you’re not progressing as expected
  • Possible burnout from constantly trying to “keep up” with everything

To be clear: the mistake here isn’t “consuming content.” It’s thinking that just mindlessly consuming content is enough for you to evolve as a professional.

How to Fix This Mistake

The solution is simple in theory, which doesn’t necessarily mean it’s easy. Here it is:

Decrease the portion of your learning time spent on passive content consumption, and increase the portion spent on practical learning, especially personal projects.

Here are some suggestions:

  • Create or contribute to an open-source project
  • Make a website or application for a nonprofit, charitable organization, or your church
  • Solve a problem that you or a family member has by creating a simple automation
  • Reinvent the wheel: Implement a known technology or tool (examples: git, Docker, an HTTP server) simply with the goal of learning.

The list above isn’t exhaustive but serves just to start inspiring you. Five minutes of Google or ChatGPT will yield many ideas for cool projects to do.

Not Applying the Content from Learning Resources

If you buy a book and don’t read it, you’re wasting money. If you buy the book, read it, and the learning doesn’t impact how you do your work, then you’re wasting both your money and your time!

The same applies to courses, tutorials, and other learning resources. Being a software developer is a practical profession; how do you expect to benefit from what you’ve learned if you don’t put it into practice?

Before anyone complains: yes, of course there are books, videos, etc., whose content doesn’t have a direct practical application. Maybe you read The Mythical Man-Month to get some insights and learn about software development history, but that doesn’t necessarily change how you write code. And that’s fine, these cases exist – use your common sense.

How does mistake #2 differ from the previous one?

We can summarize the first mistake as “spending 100% of your learning time consuming content.” In other words, you don’t do anything beyond consuming things.

This mistake here is along the lines of “not applying what you learn from the content watched.”

In other words, it’s possible to make the second mistake without making the first one. For example, you might dedicate 60% of your learning time to creating personal projects and 40% to content consumption. But if you still don’t apply in any way the content you learned in those 40% of the time, you’ll have made mistake #2. Is that clear?

Reason for This Mistake

Why do so many people (including yours truly) make this mistake? Probably what happens here is a certain psychological pressure that many of us feel, in terms of hitting numbers. How many people do you know who create goals like this?

  • Read x technical books per year
  • Complete y courses by the second semester
  • etc…

If you really feel like achieving this type of goal, there’s no way around it: you need to “spend” as little time as possible with each piece of content. Otherwise, the math doesn’t work.

Problems Caused By This Mistake

A serious consequence you might suffer from this mistake is lack of motivation. You read all the famous books in the field that were recommended to you, completed all the courses in your IDP, and it seems like nothing changed. It’s hard to stay motivated to persist in learning when it feels like none of it has real impact on how you work.

That’s the frustration with lack of career evolution that we mentioned in the previous mistake. Another serious consequence of this mistake is the waste of time, money, and energy itself: learning is an investment that needs to have a return to be justified.

What’s the Solution?

The remedy for this mistake has two steps:

  1. Prioritize quality over quantity
  2. Constantly apply what you learned

So, here’s my practical suggestion: only start another course/book/etc. after you’ve applied the learning from the previous one.

For example, let’s say you’re taking a Udemy course. After each lesson or section, stop and create a small project where you exercise what you just learned. It doesn’t need to be a big project, or even useful. Preferably, throw it away after you finish: the important thing is the practice.

Here are some more examples:

  • After watching a programming tutorial, dedicate time to replicate the project on your own, without looking at the video
  • Read an article about a new refactoring technique? Apply it to a personal project or at work
  • Heard a podcast about code best practices? Review an old project and see where you can apply these practices

Regarding technical books, I recently created a rule for myself: when I finish a book, I can only start another one after I’ve applied the content of the book I just finished. This application can take different forms:

  • do the book’s exercises, if it has any
  • create one or more projects to exercise that content
  • propose/implement a new practice at work based on what I learned

In the end, that’s what matters: that you find a way to apply the learned content to improve your professional life. A stack of books whose content didn’t impact you only serves to collect dust or as a monitor stand.

Lack of Focus

There are many more “learnable” things than you have time or energy to learn. You’ll never know everything, and you’ll never clear your learning queue. This is a fact and you need to accept and embrace this fact, unless you’re really in the mood for burnout.

Unfortunately, we feel the pressure to “always be studying,” even though that phrase itself isn’t helpful—it offers no guidance about what to study, or what strategies to use.

It’s common for this pressure to come from our own companies:

  • Read book x!
  • Take this course!
  • Complete this learning path!

And these people are well-intentioned, but that doesn’t change the fact that you have a limited amount of time in your day and, more importantly, a limited amount of energy in the time you have available.

But then you give in to the pressure and end up making the mistake of this item: jumping from course to course, book to book, tutorial to tutorial, without ever completing anything, or at least achieving any significant progress.

A Disclaimer

Look: I know that in day-to-day work, it’s very common to encounter a huge number of different problems that need to be solved, and the deadline is always yesterday. In these situations, often the right thing is indeed to learn just the surface level of a topic to be able to handle the demand and generate value for the user as quickly as possible.

The ability to distinguish when it’s time to invest in a certain item more deeply and when surface knowledge is enough is something that’s extremely valuable for any professional’s career, and the only way to perfect this ability is through practice.

The mistake I point out in this item is a different situation from the above scenario. More specifically, the mistake is about trying to learn many things at the same time, in depth, with dense resources.

Problems Caused By This Mistake

The main problem caused by lack of focus is that you never go deep into anything. You end up with a vague impression of knowledge in a million things, but when a critical situation arises where deep knowledge would be necessary, you don’t have anything to show.

As I’ve said before, it’s impossible to go deep into everything. But you should, indeed, go deep into the things that matter most, those that generate the most value for your career. I’m referring to those fundamentals that many people talk about, but I’ll talk more about that in another topic.

How to Fix It

This mistake might be the hardest to fix, because the solution involves a high dose of self-knowledge and a very strong sense of prioritization.

In general, the tip is: define ONE point of evolution for your career, and focus on it for a considerable time, until you evaluate that you’ve made progress.

Some examples of improvement points:

  • Improve my knowledge of parallelism, concurrency, and performance
  • Learn the main design patterns and know how to apply them in real projects
  • Acquire advanced SQL skills
  • Learn a new language and reach a productive level

It’s not easy to identify this point of improvement, but here are some tips:

  • Ask for feedback from managers and colleagues.
  • Talk to a technical mentor you trust.
  • If you’re actively participating in job interviews and failing, analyze the points where you did poorly in the interviews to identify where to improve.
  • If you’re not actively looking, pretend you are. Ask a friend or mentor to do a mock interview with you, and then ask for honest feedback.

Lack of Consistency

What’s better, dedicating 30 minutes per day to learning, every day, or 5 hours on the weekend, once every three months? The answer is obvious.

Our profession is practical, deliberate and consistent practice is necessary for you to internalize the things you learn and know how to use them when the time comes.

Consequences

The consequences here are pretty obvious, right? There’s simply no way to make progress if you don’t make consistent effort. This actually applies to pretty much anything in life: physical activity, language learning, playing an instrument, and so on.

If you invest, for example, 1 hour per week to learn something, that gives a total of about 51 hours in the year. Now, if you learn 15 minutes every day, that gives a total of 5,475 minutes in the year, which is more than 91 hours!

Studying just once a week has another disadvantage. If something unexpected comes up and you need to miss it, when you return two weeks will have passed. This way, it becomes complicated to keep the momentum going; you need to remember where you stopped 14 days ago, and regaining the lost context isn’t easy at all.

How to Fix It

Solving this mistake requires thinking about strategies to make learning become a natural part of your daily routine.

To start, define duration: that is, how much time you’ll dedicate daily, in a realistic way. There’s no point in committing to 2 hours of daily learning if your routine simply doesn’t allow it.

Another essential thing is choosing the time of your learning period. To really establish the habit, ideally it would be at the same time every day. When choosing this time, take into consideration how your energy levels change throughout the day. Are you a morning person? Put your learning time in the morning. If not, at night.

I’ll give an example of what works for me. I know that if I leave my learning time for after work, I’ll be too tired and probably won’t do it. So, for me, the best is to reserve about 50 minutes before work for learning.

To make learning a habit, the key is to integrate it into your routine and reduce friction. You know those people who sleep in their gym clothes? Same idea for studying. Leave your PC on with VS Code open in your project, or configure the browser to open directly to the Udemy course. The easier it is to start, the better.

It’s also interesting that the time to decide what to learn and the time to learn be distinct moments. If you have 50 minutes per day for learning, but spend 20 of those minutes every day deciding what to read/practice/watch, you’re wasting 40% of your time.

So here’s the tip: on Saturday, define your learning routine for the following week. You can create a spreadsheet defining the days and what you’ll do, or create a board in Trello, or even use paper and pen, it doesn’t matter. What’s important is that you have this defined beforehand. Then, during the weekdays, you simply check and follow the planning made.

Finally, something that works for many people is making some kind of public commitment. You declare, publicly—for example, on your LinkedIn—that you’ll study without missing for x days. The simple fact of having made this commitment often helps people maintain the routine without missing.

A cool initiative in this sense is 100 Days of Code, which encourages people to code for 100 consecutive days, without fail, interacting with other participants in the process.

Underestimating the Importance of Fundamentals

Many people underestimate the importance of learning computer science fundamentals. Yes, I’m talking about those boring things you didn’t like studying in college: algorithms and data structures, computer theory, algorithm complexity, and so on.

These people argue that you don’t need to know all these things to make your code work. Yes, this might be true most of the time, but not always.

We can think of computing as several layers that abstract the previous layer. When you’re working in one layer, you usually don’t need to worry about the others. This is a good thing, and it’s literally the reason why we use abstractions: to “hide” things that aren’t essential, reducing the complexity of what you need to deal with.

Consequences

Unfortunately, abstractions aren’t perfect. As Joel Spolsky warned us more than 20 years ago, abstractions eventually leak.

In other words: just because you use an ORM doesn’t mean you don’t have to know SQL. Even those who use a managed language like C# or Java can benefit from having an understanding of memory management: at minimum, you’ll be able to write code that uses lifetimes correctly, doesn’t create unnecessary allocations, and puts pressure on the garbage collector.

Lack of understanding of algorithm complexity can bring down a system. You test your code locally with a few hundred values, but when it goes live and has to deal with millions of items, it simply can’t handle it.

In summary: you can make something that “works” without knowledge of fundamentals. However, it works in some scenarios, some of the time, with unacceptable performance, and without taking edge cases into account.

Beyond the problems that lack of a solid foundation can cause in the systems you work on, this mistake can bring another very serious consequence for your career.

Yes, I’m talking about not being able to pass companies’ hiring processes. It’s very common for companies to use technical challenges that require good knowledge in topics like algorithms, data structures, complexity, concurrency and parallelism, the memory model of your preferred language, among others.

Not having this knowledge means being summarily rejected in these processes.

Solution

If you don’t have a college degree, I strongly recommend studying Computer Science. If you’ve already finished college but forgot all those topics, try to remember/reinforce these concepts.

On the internet, you can find plenty of content about Computer Science. For example, the Teach Yourself Computer Science project has a roadmap of topics to learn, with bibliography and video lectures from renowned universities.

NeetCode is a site that provides a roadmap for studying algorithms and data structures. It also offers courses and the ability to practice real questions used in job interviews.

Living Under a Rock (Not Keeping Up with What’s Happening)

I thought it would be interesting if the last mistake was exactly the opposite of the first. While the error that opens the list was “just consuming content and thinking you’re learning,” this one is “never consuming any content at all.”

Why Is This a Problem?

We work in a field that changes constantly, and increasingly quickly. Not staying updated can lead to:

  • Obsolescence of your skills
  • Loss of career opportunities
  • Difficulty in solving problems using more efficient approaches
  • Lack of inspiration for innovation in your daily work

In other words: lack of updating hurts your performance in your current job, and at the same time reduces your chances of getting a potential new job. That’s not what you want, right?

Finding the Balance

On one hand, using every free second to consume every possible podcast/article/video isn’t a good strategy. It’s like eating lots of junk food: you’ll feel full, but that food won’t bring the benefits your body needs.

But on the other hand, consuming no content is equally bad. As a developer, it’s extremely important that you have at least a notion of what’s happening in the software development world.

What to Keep on Your Radar

Here’s a small list of things that would be interesting to keep on your radar:

  1. Release of technical books about topics you’re interested in, or from authors you already follow
  2. New features in the latest version of your main language or framework
  3. Tools or techniques that can make your life easier
  4. Emerging industry trends (for example, AI)

Where to Find Relevant Content

There are many valuable sources of information for developers. Here are some suggestions:

  1. Reddit:
  2. Hacker News: Excellent for news and discussions about technology in general
  3. YouTube:
    • Search for channels related to your specific interests
    • Watch technology conference talks
  4. Technical Blogs:
    • From technology companies (for example, engineering blogs from Netflix, Spotify, etc.)
    • From influential developers in your area
  5. Technology Podcasts: Great for consuming information while doing other activities

Conclusion

We’ve reached the end of the list. I hope this compilation of learning mistakes you just read is useful for your career. With this list I covered what not to do, but what should you do then?

Maybe in the future I’ll write a post just about that: how to learn the right way, and what to focus on. Leave a comment if you’re interested in something like that.

But, for now, to know what to do, just imagine a learning strategy that’s the opposite of the mistakes above:

  • Learn with consistency, preferably a little every day
  • Have focus: prioritize one main improvement point at a time
  • Prefer project-based learning, supplemented in part by content consumption
  • When consuming content, always apply what you learned in some practical way
  • Learning about tools is important, but having solid fundamentals is more important

Now comes the most important tip I can leave you with.

Done is better than perfect.

Skipped a day of learning? No big deal, continue the next day. Dedicated 30 minutes to your project instead of the planned 50? That’s still infinitely better than having done nothing.

Trends are more important than data points. Going in the right direction is more significant than arbitrary goals like “I’ll read 6 technical books in 2024.”

It’s difficult to deal with the constant development pressure we feel in this field, I know that well. As much as possible, try to relax. Don’t be too hard on yourself. You’re going in the right direction.

Just the fact that you’ve read to the end of a post of almost 4,000 words shows that you’re much more interested in your development than most. For that, I thank you very much. If you need help, don’t hesitate to get in touch.

Found a typo or mistake in the post? Suggest edit