July 28, 2024
Nathan Peel
An exploration of the core concepts behind learning and how I learn as an engineer
What is a software engineer? Is it someone who knows Java? Is it someone who understands React or Node.js? Is it someone who has experience with AWS? A software engineer can be all of these things or none of them. What makes someone a software engineer is a mix of computer science and engineering fundamentals and an understanding of learning. You build everything else on top of that. In this article, we will focus on understanding how to learn. Everyone knows how to do this to some degree, but the better you learn, the more valuable you will be as a software engineer. Technology is ever-evolving, so knowing how to learn to use a framework is more important than knowing how to use a framework perfectly.
Let's say we went back in time and found an expert software engineer from the 1990s and brought them to 2024. How would they handle software engineering today, 30+ years later? Some things would be the same, but many would be vastly different. This person would not be valuable for the exact languages and frameworks they used because they have changed and new technologies emerged. Instead, they would be useful for using their understanding of computer science and engineering to learn the technology currently being used.
There are many ways to learn new information, an infinite number of ways. However, some general mindsets will help you get further.
I love learning all kinds of things, from history and philosophy to spoken languages and software engineering tools. I loved learning so much that I just wanted to learn everything perfectly, regardless of how long it took. Unsurprisingly, this halted my learning to a devastating degree. I told myself I had to learn the basics before learning what I wanted. Learning the basics is okay, but there is a balance to it. A never-ending hole of basics to learn prevents you from studying valuable ideas. This obsession with understanding everything perfectly and fully leads to a spiral where you always learn more but never progress–AKA tutorial hell. First, you start by wanting to learn a new framework like React. Before that, you need to learn JavaScript. Then, you feel you need to know how JavaScript works, so you learn C++ to understand the engine. Then, you naturally want to learn assembly language, machine code, and so on and on. Next thing you know, you are trying to make a computer from raw materials. My example is an over-exaggeration, but the point remains. There is always another level deeper to go, but you probably don't need to go there.
The reason we spiral like this varies from person to person, but it tends to stem from the fear of doing something wrong and the fear of uncertainty.
The solution? Let go of the need for perfection and the fear of not being good enough. With this perfectionist mindset, you will never reach perfection or be good enough. Accept that you will never know everything and that you will make mistakes. Accepting this allows you to learn more than ever and make fewer mistakes than you would if you chased this ideal.
Another issue was my fear of forgetting what I had learned. Practice and study are essential, but you can do too much. My fear led to endless note-taking, as if the more notes I took, the more I would retain. The reality is we are going to forget things we learned. Our forgetfulness might seem like a flaw in our biology, but it is actually a strength. Consider how the brain decides which information to maintain and which to remove. It is based on which information you use or, in other words, which information is helpful. When you are working as a software engineer, you are constantly using information that you learned. The connections in your brain regarding this information are ever-growing stronger. On the other hand, the information you don't use slowly fades away. Why keep the information you don't need? Accept that you won't remember everything but will remember what is essential.
Solidify and emphasize new material by connecting it to concepts you already know. For instance, when learning a new programming language, you can relate its syntax to a language you already know. Many psychologists have studied and made theories about this idea, but the basic concept is to fit new information into existing information. The more critical the existing information you connect the new information to, the more important the new information will become. Using your emotions is incredibly effective. Focusing on connections works because information in your brain is just connections between neurons. The more connections information has, the better you will retain it.
Everything in this world, in this universe, is connected. All subjects of study are connected in some way. Everything in our lives is somehow connected to everything we learn. Sometimes, these connections are easier to see than others, but they are there.
With software engineering, it is easy to make connections because ideas, frameworks, and languages are similar and connected. However, there are also connections outside of the direct field. Having studied psychology and computer science, I have seen both subjects reference each other to teach new ideas. Deep philosophical and psychological ideas are also embedded in soft skills such as collaboration, productivity, and project management.
Everyone has a different process for learning new skills and information. It doesn't matter how similar your process is to others, as long as you are consciously aware of it and seek to improve it. At the moment, my process of learning new information and skills is going like this:
Sometimes, I take notes, but I find that I often learn more if I just engage with the material and make connections. As I said before, this might be very different for you. If you need to take notes to learn, do that. The point is to be aware of your process and refine it to work for you. Another important concept is making learning fun. I find creating things and doing things hands-on fun, so I try to learn that way if I can.
Learning is a cornerstone software engineering skill, so knowing your process will make you a more productive and valuable engineer.
260 views