Alberto van Oldenbarneveld

Learning to Learn as a Developer

My personal process for learning deeply as a new developer: structure, mental models, practice, and long-term growth.

As I’m pretty sure happens to everyone who starts out as a developer, I’ve recently come to realize how much I don’t know. The complexity at work is ramping up fast, and I feel like I am hanging on for dear life. As a result, I’m trying to keep up in my free time, and I’ve been thinking long and hard on how to improve fast.

While learning I’ve been forming this mental model and refining it to improve the structure of my learning in order to accelerate it. I’ve been testing it, and it seems like it has settled into a stable structure, so I thought it might be worthwhile to reflect on it.

Learning as a developer

Learning things deeply requires a process that goes from receiving information, to understanding it, owning it, and then being able to reproduce it. These for me are the fundamental steps of acquiring knowledge.

I’ve found a way to work through these steps that makes sense for me and would like to share it both so it can be helpful to others, and also as a way to internalize the process for myself (let’s call this the reproducing part of my own knowledge.)

Step 1: Acquiring Information

There is a lot of information out there. Youtube courses, Udemy, Scrimba, The Odin Project, Free Code Camp. So many ways to learn how to code. Analysis paralysis is so dangerous here. Even going from course to course without structure can make you lose so much time. Without a clear structure, you end up jumping between resources and losing time.

I myself tried The Odin Project, but found it too text-heavy, and had a hard time bridging the gap from reading to putting into practice what I was learning. I also tried Scrimba, which is a great platform, but felt like it taught snippets in a way that felt too easy and didn’t feel like I was learning a lot. Both of these platforms are absolutely great, but for me they didn’t click in a sustainable way. Other options like FreeCodeCamp are also popular.

After trying lots of resources, what really clicked for me was Frontend Masters. Frontend Masters is an incredibly high quality platform, taught by renowned experts in the industry and their respective fields, with a high efficiency model. They focus on the key things you need to know, and focus on teaching you the mental models you actually use in real development work.

After trying lots of resources, what really clicked for me was Frontend Masters. Frontend Masters is an incredibly high quality platform, taught by renowned experts in the industry and their respective fields, with a high efficiency model. They focus on the key things you need to know, and focus on teaching you the mental models you actually use in real development work.

The subscription is pricy, but the value is excellent. The ROI is so high for your professional career that it becomes a no brainer if you can afford it and if you take the time to acquire the knowledge. It’s a platform that will pay for itself a dozen times over. However, being able to get the info from a source is one thing. You still have to fully understand it.

Frontend Masters offers exercises that are good for practicing the knowledge, but there is a previous step that can sometimes be hard and can be lacking. You can replay the videos until you fully get it, but the content can’t answer the specific questions you have. That’s where step 2 comes in.

Step 2: Owning the Information

I call this owning the information because this step requires self-direction in understanding the mental models, especially being able to detect where your understanding is lacking and question it so you can get a complete mental picture. This step therefore requires taking a proactive stance on your knowledge.

As soon as I feel like I am not grasping a concept fully and have to replay a Frontend Masters video a few times, I’ll get the transcription or the main parts that I’m not getting and paste them into ChatGPT. To me ChatGPT is an incredibly powerful tool that needs strict handling, because otherwise it will run away from you, and you’ll need to spend a lot of mental capital to get from it what you really want.

As soon as I feel like I am not grasping a concept fully and have to replay a Frontend Masters video a few times, I’ll get the transcription or the main parts that I’m not getting and paste them into ChatGPT. To me ChatGPT is an incredibly powerful tool that needs strict handling, because otherwise it will run away from you, and you’ll need to spend a lot of mental capital to get from it what you really want.

What I use for this is the Socratic method. Rather than reexplaining the concept I’m not getting (which it has a bad habit of doing), I’ll ask it to pick holes in my reasoning. Sometimes I will read the code out loud to it to help myself understand the code, and then reason what I think it is doing.

With closures, I struggled to understand exactly how the inner function retains access to the outer variables. Instead of it telling me how it worked over and over again, I would try to guess how it worked based on my understanding, and I would ask it to tell me where I was wrong and why. Through this progressive method I’ll at some point reach a decent understanding, at least to the point where I am able to explain what I am trying to understand.

This is the hardest part of the entire process, and requires a lot of willpower to get through. Luckily, ChatGPT will never run out of patience, so let’s be thankful for that. Once we have a basic understanding of the concept, the best way to integrate it is putting it in your own words.

Once I feel like I get the concept, it’s time to put it in my own words. For this I use Obsidian MD. It’s a notetaking app, where I store all my personal knowledge in what is called a knowledge vault. The info is easy to format, it uses markdown, and you can relate concepts to each other, so your notes need not be structured, because you can always do that later on.

Once I feel like I get the concept, it’s time to put it in my own words. For this I use Obsidian MD. It’s a notetaking app, where I store all my personal knowledge in what is called a knowledge vault. The info is easy to format, it uses markdown, and you can relate concepts to each other, so your notes need not be structured, because you can always do that later on.

The structure does not matter anyway; what matters at this stage is being able to write in your own words what you just learned. This helps greatly because just in case you didn’t understand anything fully while handling it with ChatGPT, this will show you your gaps in your knowledge immediately, which you can then use to go right back to talking it out until you get it. Once you can write it out, you can proceed to the next step.

Step 3: Putting It Into Practice

Frontend Masters provides its own coding examples, and you should definitely do them, because they are tied in directly to what you are learning, but I wanted a more structured way to get my problem-solving reps in, in a variety of concepts and while translating text problems to code.

The best way I found to do this is through the platform Exercism. Exercism is a non-profit that creates structured paths of coding exercises that help you integrate your learning, but it is important to understand that it is not a learning platform as such, because explanations are basic — more like brief summaries than full learning material.

The best way I found to do this is through the platform Exercism. Exercism is a non-profit that creates structured paths of coding exercises that help you integrate your learning, but it is important to understand that it is not a learning platform as such, because explanations are basic — more like brief summaries than full learning material.

The exercises, however, are somewhat difficult if you are a beginner with a surface understanding of the concepts, which is why they are perfect for this stage. This part is hard, because you need to be able to apply what you just learned, but if you did the previous step well, it shouldn’t be as hard as starting from scratch.

How hard this step is depends directly on how seriously you took the previous step. For me personally this has been the hardest part of my experience, but as I am getting more comfortable with the exercises, I’m really starting to like it.

Once you have the exercises done and have a somewhat solid base, it’s time to apply the knowledge in real projects. That’s where the next step comes in.

Step 4: Applying the Knowledge in Real Projects

Now that we’ve practiced the concept in isolated snippets made specifically to apply, we need to be able to use them in bigger contexts, where projects come in.

Projects however can be vague, too big in scope, and therefore make it hard to focus on what you are trying to learn in that specific instance. Here is where Frontend Mentor comes in.

Projects however can be vague, too big in scope, and therefore make it hard to focus on what you are trying to learn in that specific instance. Here is where Frontend Mentor comes in.

Frontend Mentor is a platform where you can do directed projects, aimed at integrating specific learning but in contexts that reflect real-life work. The beauty of it is that it is self directed but more open ended, and you can see yourself tracing a line from what you learn to its real-world application.

This part of the process also requires some self-direction, because you need to be able to pick projects that relate directly to what you are learning.

Step 5: The Final Optional Step, A Complete Showcase Project

This is the big one. Once you are on solid ground, and especially if you want to show off all your learnings, at some point you will have to pick one ambitious project to work on, and make it as close to a real-world application as possible.

For this you need some reflection. Try to think of a real-life pain point you have, or something that you wished would exist, and try to build it yourself. It could be a todo list app that solves things that you wish the one you use had. Or a better instant messaging app. Or maybe a household organizing platform. Maybe a better budget dashboard. Try to think of any digital services you use, which are good and useful, but you wish they would be better.

The point here is not to make a startup that directly competes with it, but to have a project that personally motivates you, you have a vision for, and most importantly you can work consistently on.

This self directed vision of putting an idea into code is one of the most valuable things you can do. It will help you understand what coding is for, and will make you think about your work as a product. You will have to think about system design, structure, pain points, useful features, and priorities.

Owning a project like this is one of the most impactful things you can do for your career.

The point of it is not to create a perfect product to showcase, but the process you go through while trying to get it to work. It will showcase your thinking, which is the most important part. The product can be unfinished, and not working, but as long as you work on it consistently and try to get it up, it will force you acquire invaluable skills.

Conclusions

This is my pipeline for learning. It may seem long and complicated, but for me it just streamlines a process that needs to take place in order to fully learn things. This is my way to reduce the chaos that is known as the messy middle in the path of learning as a dev. I wish I could just follow a single course from end to finish, but for me this is the best way to acquire the knowledge I need to advance. The most important part for me is that while slow it builds upon itself, and I don’t have to back and relearn what I thought I already know as much. As they say, slow is smooth and smooth is fast.

Now that I’ve reached this point I hope I am able to pass this knowledge to the people coming up in this world behind me. If you have any questions, feel free to ask!