A mental model for learning as a developer

A mental model for learning as a developer to help you navigate your learning journey and decide what to learn next
Yair Cohen
Yair Cohen
JAN 20, 2024
6 min read

If you’re aiming to acquire new knowledge as a developer, you might have experienced choice overload or felt stuck in an endless loop of learning that sometimes seems meaningless.

In this article, I will discuss a mental model I use to navigate my learning journey as a developer. This model helps me address such dilemmas, assess my current knowledge, and decide what to learn next.

The Learning Box

Imagine a box – not a tangible one, but a conceptual space where each skill and piece of knowledge you acquire as a developer is stored. Let’s call this the “learning box.”

The learning box

A simplified example of a learning box, for a FullStack role

As you progress in your career and accumulate experience, your learning box grows. You gain deeper insights into the technologies you use and face new challenges and solutions.

Each developer’s learning box is distinct, molded by their unique experiences. Some may see their box rapidly evolve with cutting-edge technologies and tools, while others experience a more gradual change, deepening their expertise in familiar areas.

Regardless of the contents of your learning box or its rate of change, a critical realization stays true:

The learning confined to your job role is inherently limited by the scope of that role.

In essence, if you don’t actively seek learning opportunities outside your role, you’ll be restricted to the knowledge that your current position offers.

Learning Dimensions

In devising a learning strategy, we can consider two dimensions that represent different types of knowledge: vertical and horizontal.

These dimensions not only reflect what you know but also the depth of your understanding and the breadth of your knowledge.

Vertical Learning: Depth of Knowledge

The vertical dimension relates to how deeply you understand a specific area. It’s about the depth of your knowledge in a particular field.

Take the learning box we discussed. It might contain various technologies and skills, but working with a technology like Angular doesn’t necessarily mean deep knowledge of it.

Knowledge varies in depth, your understanding of any subject exists on a spectrum, influenced by factors like your experience and the extent of your engagement with the topic.

Consider a learning box model that includes the vertical dimension. It might reveal that a developer, despite working with certain technologies, lacks in-depth knowledge in some areas.

Learning box with vertical dimension

A learning box model that now takes into account the vertical dimension shows that the developer is missing a lot of knowledge in certain areas, even though they worked in these technologies in their role

This gap often arises when learning is confined to on-the-job experiences. You might know enough to perform your role effectively, but there’s a whole deeper level of understanding that can significantly enhance your capabilities. This deeper understanding has practical implications. To name a few:

  • Accelerate your problem-solving skills, allowing for more efficient and effective solutions.

  • Make your interviews easier (from both the interviewer and interviewee side)

  • Help you learn other things (for example, if you understand how JS compiles, it will be easier to understand how other languages compile)

Horizontal Learning

Alongside the vertical dimension, there’s another dimension to a developer’s learning journey: horizontal learning.

This represents the breadth of your knowledge and how it relates, in one way or another, to your current work.

The relation can be direct or indirect, but it’s always there. Many times indirect knowledge can be used as inspiration, and sometimes it becomes practical.

Learning box with horizontal dimension

The learning box now includes both vertical and horizontal dimension. On the right are things that are directly related to your role with high chances of incorporating them in the near future. On the left, are things that are somehow related but are more for the long term. You may not have a chance to incorporate them at your current role.

Expanding your horizontal dimension offers two significant advantages:

  1. You will be able to incorporate new ideas that directly contribute to your current role.

Often times a company works in specific way, developers are working with technologies that are already there, and might not know there are better technologies/processes that could be incorporated to help solve different pain points.

When you’re expanding your horizontal dimension, you will be able to bring in new ideas and make impact in ways that aren’t bound to what your company already knows.

  1. You will improve as a developer, and take control of the type of opportunities that will be available to you.

One great advice to get a promotion is to get to a level where you’re already operating at what the next role requires. The switch from there to the new role makes much more sense, and almost becomes the obvious choice.

The same advice applies to getting a job that suits your goals better, for example if you’re a Front-End engineer that wants to move to a FullStack role it will be much easier to do so if you’re already learning about Back-End, and actively doing Back-End projects.

Learning things that will get you to where you want to be as a developer, is very empowering, as it allows you to take control of your career and skills.

Subjectivity in Learning

One important thing to note is that the actual subjects you decide to learn are subjective to where you are as a developer.

In the learning box above, I put certain topics that may be applicable to certain developers. Your learning box might look entirely different.

You need to figure out:

  1. Where you stand right now - what do you know well, and what are the skills that are most required to do your job well

  2. Where you want to be - Where do you see yourself? Do you wish to be more of a generalist, and spend more time on expanding your horizontal dimension? Or would you rather go deep on what you already know, gaining more expertise in a specific subject.

Learning is a marathon, not a sprint

There’s a lot to learn. Choosing what specific article or book to read between an endless choice of ones can feel like a daunting task.

Setting a specific plan to read certain articles/books and sticking to it can help.

Another thing that can help is prioritization.

When it comes to prioritization, I recommend prioritizing the subjects that could directly impact your work in your current role first, and if you don’t have that opportunity or want to mix it up, pick something that could help you broaden your horizontal/vertical learning dimension.

Action Steps

  1. Map out everything you need to know in order to perform well at your current role
  2. Map out everything you want to learn in order to get to where you want to be
  3. Build a habit (I recommend daily) of learning.

Last but not least, enjoyment is a fundamental part in learning. Besides making knowledge stick better, it makes the whole process feel effortless.

Leaving time for exploration, and following your curiosity can definitely help enjoy what you’re learning.

But as with a lot of things, enjoyment from learning might be more apparent only after you got good at it and have done it consistently for a long period of time.

Thank you for reading, and I’d love to hear your thoughts about learning.