When I learned about TDD it boosted my productivity as a developer and made my professional life easier. By following this simple cycle, I was able to efficiently and effectively transform specifications into working software in an iterative manner. I’ve always wondered if there is something that supports the learning process in the same way, knowing it is also a crucial part of my job. As my career progressed, I accumulated practices that helped me speed up my learning. However, it wasn’t until I read the book “Get Better at Anything” by Scott H. Young that all the pieces fitted into a picture that worked for me: the Learning Loop.

The four Steps of the Learning Loop

There are three key factors that determine how much we learn, according to Scott:

  • See: Studying the work of the masters provides us with the opportunity to learn from their experiences and to increase our own knowledge.
  • Practice: In order to build skills, we must actively apply our knowledge in a learner-friendly environment again and again.
  • Feedback: Applying new skills to the daily work allows us to validate them and reflect on the experiences we’ve gathered so far. As a result, these insights become part of our memory.

Putting all these components together, I created my own personal learning process.

Learning Loop

For each iteration of this loop, the starting point is made up of a collection of experiences that I make in the course of my daily work. The process is then broken down into four steps that form the following sequence.

  1. Create insights by reflecting on experiences from your work.
  2. Study software engineering resources to deepen and extend your insights.
  3. Use the knowledge you’ve gained to train your skills so that you can apply them successfully in your daily work.
  4. Validate the skills and knowledge that you have gained in the workplace by applying what you have learned.

Over time, this will create a self-reinforcing cycle that enhances learning. Having seen through the process, let’s have a closer look at the individual steps that make up the process.

Reflecting on Experiences from Work

It is common for software engineers to gain valuable insight into software engineering during their daily work. However, when we are under pressure and focused on results, we may not notice such experiences or do not have the time to examine them in depth. Therefore, it is important to devote a portion of time to reflecting on the observations we make on a daily basis, bringing them to our attention, and transforming them into valuable insights. Through this deliberate practice, we will be able to process these ideas in order to make impressions on our own ideas and memorize them for future use. There are a couple of techniques that will be able to help us do this.

  • Mini Essays or “Today I learned”-Posts: Writing down the thoughts you have in a 100 to 300 words sharpens them up and leverages the generation effect to memorize them. This can also help you think about it more deeply.
  • Discussion with Peer Group: Taking part in a peer group discussion with other colleagues gives you the opportunity to not only reflect your thinking through the perspective of others, but also learn from them as they go about their day to day work.
  • Gen AI: An AI conversation can provide a unique opportunity for you to challenge your ideas in front of the collective knowledge in software engineering. They can also provide a space for new ideas and perspectives to be shared and debated. This can help you to identify potential solutions to your challenges.

Studying Software Engineering Resources

There is a high probability that we are not the first ones to encounter the problems that arise in Software Engineering. It is important to remember that we are standing on the shoulders of giants, and by utilizing their knowledge we can improve or find new approaches to solving our problems. Therefore, it is necessary for us to review the resources available from the engineering community in relation to our own insights. Some of the techniques that facilitate this are as follows:

  • Taking Notes: By writing notes while reading books and articles, listening to podcasts or watching videos, we transform external thoughts into our own new thoughts. This helps us to better remember and understand the material, as our own written notes capture our own ideas. It also allows us to organize our thoughts and process them more efficiently.
  • “Read it Later” List: It is very easy to become distracted when studying resources by clicking on links or references not relevant to the topic at hand. By delegating the links to a list that you will review later you will be better able to stay focused.
  • Study Groups: Taking the time to read and discuss a book chapter by chapter as part of a study group is not only motivating, but it also encourages a deeper understanding of its content as well.
  • Research Databases: There are many searchable databases available today, such as Blinkist and the O’Reilly Learning Platform, that allow researchers to find good resources. These databases provide easy access to a wide range of sources, including books, articles, videos, and podcasts. They can also be used to quickly identify the most relevant resources for a given research topic.

Training for Skills

In order to get the most benefit from the knowledge that is gathered through study, we need to turn it into skills that are applicable. Practicing is the best way to achieve this goal, or in the words of the violin teacher Shinichi Suzuki:

Knowledge is not skill. Knowledge plus ten thousand times is skill.

– Shinichi Suzuki

Practice is different from applying your knowledge in the real world as it allows mistakes. We do not have to be careful when trying out new methods, technologies or tools, but rather we can concentrate on understanding how they work so that we can adopt them quickly. In addition, we don’t need to worry about time pressure in a project so that we can keep practicing a new skill over and over again until we become fluent with it, even under difficult circumstances. There are a lot of different practice forms that you can use; here are just a few to give you an idea of what you can do:

  • Katas and Koans: While Katas are used to learn coding techniques like TDD, Koans are exercises to learn a new programming language. As both require a simple setup and allow you to focus on a single subject, they reduce cognitive load. Training resources like these can be found online.
  • Breakable Toys: These are usually small applications, which can be used to learn new frameworks or patterns. There are often sample applications provided by framework providers, such as the Spring PetClinic, but you can also create your own toy application.
  • Forking your own Project: more realistic training scenario can be achieved by forking your current project. As you are familiar with the code, you don’t need to spend time learning the training setting. Furthermore, it provides a safe and controlled environment for practicing and improving coding skills.

Validating Skills and Knowledge

By applying the newly acquired knowledge and your improved skills to your work, not only do you reap the rewards of your learning efforts. In addition, it allows you to test your skills in real-world scenarios and learn about their limitations, leading to new reflection points so that you can gain further insight. It’s clear where this is going, isn’t it? We build a self-reinforcing learning loop by closing the cycle!

Conclusion

In the same way as TDD, the learning loop is an iterative process that lets you accomplish your goals incrementally. In each step, we only focus on one of the three success factors of learning: See, Practice, and Feedback. In this way, you can reduce cognitive load and maximize the efficiency of your learning.