How to learn effectively as a developer

I recently received an interesting question from a reader that changed his career path and headed to technology. He mentioned he was getting overwhelmed by the amount of information related to web development and computer science.

He was asking my advice on how to cope with the situation. Given it's a topic that has value beyond the reader, I go through the main points of my response in this post while expanded on several ideas.

Learning is about making sense of things#

My background is fortunate as I was exposed to many technologies and ideas during my time at the university while I was completing my Master of Science (MSc) degree. A lot I learned during that time is still relevant today, and I would say the most significant benefit of education is that it's giving you some idea of what you don't know. When you need to learn more, you then know terms to use for searching.

Essentially learning is about making sense of things. As you encounter information, you'll frame it with other things you've known before. For this reason, people say learning your first programming language is the hardest, and the next one is more comfortable. The same goes for languages. If you know English, it's likely straightforward for you to learn German as it's a language related to it.

Get immersed in the topic#

During the past few years, I've been learning German casually by spending some time with mobile applications each day. Given I live in a German-speaking country, I am immersed in the language as well. Although I'm far from fluent in the language, I've developed my muscles in German, almost without noticing.

Becoming immersed in a topic you want to learn is an excellent way to pick up things as you'll become aware of patterns and become more aware of the terms that people are using.

Learn fundamentals and patterns over specifics#

Fundamentals are less likely to change than language specifics. Often more significant ideas translate from a language to another even if the language doesn't embrace them in design.

Patterns that we learn give solutions to problems that have already been solved. Developing your collection and instinct for dealing with them is an integral part of becoming better at development.

As a web developer, you'll benefit immensely by understanding how the web browser renders data and what technologies it's using. Having a good understanding of the vital standards - CSS, HTML, and JavaScript - is valuable no matter which libraries or frameworks you use for development.

Track development news to spot trends#

Keep an eye on the development news to spot prominent patterns and directions. It's good to see if there are commonalities, and often you can observe that there's a lot of excitement around a specific topic.

You can try to figure out where in the hype cycle given technology fits to see if it's in the early phase or becoming something more stable.

Keep one foot on the ground#

When developing new projects, start at least some technology you know well and add new technologies on top. Keeping one foot on the ground like this is an excellent way to avoid becoming frustrated when trying to learn too much at once.

In the beginning, starting simple and expanding from there is an excellent way to go. The more moving parts you have, the more there is to understand, and the harder it gets.

Learn around specific themes#

Focus on learning around specific themes. For example, two years ago, I focused on GraphQL; last year was more about design systems. This year seems to go into the direction of Deno.

When you focus your attention on a topic, you'll become more aware of any news or articles related to it, and you'll automatically learn more about it.

Work on projects you find motivating#

Work on projects that you find motivating even if it's about learning. It's good to develop projects to learn, but it's even better when you are solving concrete problems.

I've found working on prototypes aside from client work gives me more freedom to explore the boundaries of what's possible. Free exploration is a great way to develop skills, especially if you have a good problem or set of issues in mind.

It's the perfect excuse to try out the technology you might otherwise not be able to test. For example, in a recent project, I replaced a traditional webpack setup with one I built around Deno, and doing this, I learned a lot.

Track what you learn in a system#

Track what you learn in a system so you can refer to it later. I capture information to flat Markdown files that are pushed automatically to the cloud. There are more sophisticated systems, such as Foam or Memex that exist within the space.

Adopt a personal management system#

Adopt a personal management system to organize what to do and when. I use OmniFocus, but any free alternative or your system can work. The point is to have a place where you can push ideas from your mind, not to forget. The broader approach is called Getting Things Done.

Learn from the masters#

As you gain skills, you'll learn to appreciate other people who know more about the topic. There's a reason why sometimes specific music artists are called as the musician's musicians. Those are the people that might not be known by the wider public, but that are true masters of whatever they are doing.

When I was learning drawing and painting, I used to copy the masters' works to figure out what they did and how. I didn't replicate the technique, but I focused on reproducing the result. Doing these exercises taught me to understand better what made the pictures I was copying to work while sharpening my drawing and painting skills. Over time that became something natural that stuck.

Read code from other developers#

There's value in reading code by others and understanding why it works and why it's written that way for someone wanting to become a developer. You'll notice that there are different styles and approaches, even within the same language.

Contribute to open source projects#

One of my first touches with serious programming had to do with Blender, a 3D suite, as I learned how to modify the application's user interface to my liking. Although it started with simple changes, I gained a lot of knowledge about open source, 3D, and programming during the time I spent with the project. Contributing can be a great way to develop your skills and connections.

Sometimes you may notice that a project you need doesn't exist yet. That's why I developed projects such as webpack-merge or Sidewind and many others. Although you may be addressing your own need, sometimes it happens other people have the same problem, and they'll contribute and may even be happy to continue the projects as you move on to other work.

Reflect on what you have learned#

It takes a consistent effort to become better, but at the same time, it's rewarding to see how you gain skills and how much you've improved over the years. That way, reflection has incredible value as it can show much you've achieved despite the obstacles you may have had to face.

Conclusion#

I hope the post gave you some food for thought. Learning is a skill by itself, and likely you'll have to find the ways that fit you the best.

As I'm curious about your learning hacks, feel free to leave comments below the post.

Need help?