My driving instructor gave me a very useful insight on learning. To train your (driving) instincts, trust them and act on them. The feedback from your actions will help you develop your instincts further.
I have been thinking about revisiting my blog post on “Learning to work on existing codebases”, and I decided to apply the above strategy to it.
In the original blog post I wrote about “what” you need to successfully work with a legacy codebase. But I think this mental model is good way to answer the “how” part.
When you encounter a new codebase, forming initial assumptions can help you quickly establish a mental framework to make sense of the unfamiliar territory. This enables you to start exploring and asking more informed questions.
Developing assumptions is akin to forming hypotheses. You can use these hypotheses to guide your investigation. As you validate or invalidate these assumptions, your understanding becomes more refined.
By forming broad assumptions about the larger structure or purpose of a codebase, you can efficiently narrow down your exploration to areas that seem most relevant or impactful.
Jumping to conclusions doesn't mean settling on them forever. It's a stepping stone toward understanding. Continuously revising and updating your assumptions based on new information ensures that your understanding evolves.
Assumptions often lead to questions. As you interact with the codebase, you're likely to encounter discrepancies or areas that challenge your assumptions. These moments are valuable as they prompt you to dig deeper and seek clarification.
Assuming a certain context can free you to experiment creatively within that framework. This experimentation can help you identify new possibilities or angles of exploration that you might not have considered otherwise.
What is your strategy to learn complex things?
Cover image by Austin Neil on Unsplash