This article is for junior engineers. Many of you are great, and you should keep doing what you're doing. This article is not for you; itâs for the junior engineers who are failing. Iâm talking straight to you. And Iâm giving you my best and most generalized piece of advice: learn how to learn.
Hopefully, you picked this up in high school and college. If you didnât have the privilege of attending those institutions, or if you didnât perform very well in them, you may have some remedial training to do. And while you wonât get a letter grade, I guarantee that your performance in this subject will affect your job.
Software engineering is an exercise in learning. You can tell this is the case by considering what you did at work today. I read a bunch of documentation, asked some colleagues some questions, read some more, coded a little based on what I read, google something related, and ran six or seven experiments with the code. All I did at work today was learn; the application of that learning was a relatively small part of my day. Thatâs why this skill is so essential for a software engineer. It is the job. If you donât believe me, take Dave Farleyâs word for it:
[âŚ] Software development is always an exercise in discovery and learning [âŚ] if our aim is to be âefficient'â and âeconomic,â then our ability to learn must be sustainable.
Dave Farley, Modern Software Engineering, Chapter 1
This is the primary reason I think programmers should attend a quality university. The four years of university attendance required to get a bachelorâs computer science degree wonât just teach you how to program; it will teach you to think clearly, write precisely, and learn quickly. And if it doesnât teach you those things, something went wrong. These skills are more important than any other skills. With them, you can do anything. Without them, you will fail.
Junior developers who know how to learn can read documentation and remember what is important. They donât shy away from topics they are unfamiliar with. They can pick up new information quickly and apply it to their work. Junior developers who know how to learn can pick up new languages and frameworks in short order and find answers to questions independently. Learning how to learn unlocks the path to senior engineer, team lead, and staff engineer. Itâs essential.
How to Learn how to Learn
Iâm sorry for the increasingly meta titles here. But we are talking about meta-learning.
I canât give you a precise formula for improving your learning ability. I imagine itâs a different experience for everyone. But I can tell you what I do to get better at it.
Design an Experiment
First, experiment with learning. A good way to do this is to try to learn a new programming language. For the task of learning a new language, whatâs the learning resource that would most suit you? Is it a video series? Or what about a book? How about an online course? Or is it better for you to dive into a new project immediately? If youâre not sure, try them all. You can find free or very cheap versions of these things with a simple Google search.
This takes a time investment. But unless youâre in a hurry (and I admit that you might be), it doesnât have to be a large one. Just a few hours a week will do. But thereâs no avoiding it; you have to put in the time. If you think you canât put in the time, I sympathize with you. But every time I look at the statistics for how long I stare at my phone every day, it sets me straight.
Test Yourself
Next, you need to find a way to test yourself to see if you remember what you learned. A simple program will suffice. If youâre ambitious, try to write a longer program. Take a mental note of how much youâve improved and which learning method was the most helpful. Repeat this process until youâve formulated an effective method to learn independently.
Share What You Learned
Learning on its own is good, but sharing knowledge is better. It helps if you have like-minded friends or co-workers to talk to. If you canât broach the topic with them, you can share it online. Write an article, or start a little website. Make a post on Twitter. Or even just write a markdown file and keep it in GitHub. If you donât rephrase what you know, youâll likely lose it. This also gets you in the habit of synthesizing information so that you can explain it to someone else, which is the most certain way to tell if you really know something. Thatâs why high school and college teachers are adamant that you write papers - it proves you know something well enough to teach someone else.
Adjust Your Method
After some experimentation, I realized that my method depends on how deeply I need to learn the topic. Only a book will do if I need to learn something in great detail. Many books I read slowly, taking notes and experimenting with the content as I read. I like videos or skimming documentation if I only need to learn something superficially. You need to find what you prefer and create systems to aid your learning.
That might mean you need to invest in a good place to take notes. You might want to consider a tool like Obsidian or Notion. You can also use a pen and paper or the notes app on your phone. Or maybe you just need to be able to spin up a test project faster. Whatever it is, investing in a good system of learning for yourself is part of learning how to learn.
Recently, Iâve found that I can organize a large amount of content with browser bookmarks so that it is easy to refer to as Iâm learning a topic. When I begin to learn about a new topic, I find all the content I can on that topic and save it in a bookmark folder. Then, I start my study of each, filtering out the content that isnât useful. This is a new technique for me. Your learning techniques will change as you get more experience.
Show That You Can
Once you start improving at learning, you can impress your boss. Youâll be able to deliver software faster, and it will be of a higher quality because now you know more and learn more in a shorter amount of time. Donât be shy about letting your boss know. But also, donât get cocky. Thatâs how you get to senior engineer. And from there, the world is yours to conquer.