What is a "Framework for Learning"?
Let's start by laying out what I mean by "framework for learning" so that we can be on the same page for the rest of this post. When I think of a framework, I think of a system or process that provides structure to accomplish something. Often times frameworks can be opinionated in that they gently push the user down a certain path. Depending on what you're looking for in a framework this can be a good or a bad thing. So when I refer to a framework for learning, I'm referring to a system that is consistent and aids in achieving learning outcomes.
Why Frameworks are Helpful
I encountered this quote some time ago and it stuck with me. I've seen it (or variations of it) attributed to a few different people including Benjamin Franklin and Winston Churchill, but I'm thankful for whoever coined it.
If you fail to plan, you are planning to fail
I think this quote fits well with the message that I'm trying to convey in this blog post, which is that aimlessly trying to accomplish my learning goals without a consistent system to follow is difficult and will most likely not yield great results.
As a software engineer, learning is part of my daily routine. Whether that means keeping up to date on the latest language or framework releases, diving into the documentation to solve a problem, or spending time during the evening learning something completely new. Over time I've developed a framework that works well for achieving my learning goals. I would like to point out that everyone learns differently and that this framework is not one size fits all. What I do hope is that by sharing my process, you are able to create your own framework to accomplish everything you set out to learn. Let's take a closer look at how I structure my learning.
The Framework
I've tried learning with just about every medium out there, this includes books, tutorials, courses (free and paid), documentation, blog posts, side projects, etc. After trying all of these different methods of learning, I've found that there isn't just one or two that work well for me. It's actually the combination of three or four methods that allows me to consistently reach what I set out to learn. I'll break down my learning framework into phases.
- Exploration: This is just getting your feet wet on the topic. It might involve reading some basic documentation and doing a quick tutorial
- Practice: This phase is aimed at becoming familiar and confident with the topic. It might involve working on a small project that uses the knowledge gained in exploration.
- Deep Dive (optional): This phase is optional depending on your learning goals, but for me, it involves reading a book or blog posts from experts on the topic I'm trying to learn.
Let's take a closer look at each phase to get a better understanding of what they entail.
Exploration
The exploration phase is meant to be a quick on-ramp to a new or unfamiliar subject. Let's take an example of trying to learn React. If I were approaching this I would first head to React's website to see what the documentation is like. My initial goal would be to gain a high-level understanding of what React is and what problems it will help me solve.
Once I feel comfortable and want to move further I might start looking for tutorials. The first place I'll look is on React's website, but if there aren't tutorials (there actually is, but hypothetically speaking) then I'll checkout YouTube or Reddit looking for highly regarded tutorials. I think tutorials are great for the exploration phase because they help with familiarity and usually leave you with some end product that you can refer back to in the future.
That's what my exploration phase looks like. For you, it might be other mediums and that's cool too. The main thing is that you take this first step to explore the topic you're trying to learn.
Practice
Once exploration is complete, we can move on to the practice phase. The practice phase is important in confirming the knowledge gained in exploration, as well as continuing to improve knowledge on a topic. In this phase I find side projects to be most beneficial because they force me to just figure things out as I go. The exploration phase isn't meant to be comprehensive, but more so provide the information needed to feel comfortable moving to self-guided practice.
During the practice phase, my goal is to get to the point where I can work independently with the topic. For example, if my goal is to learn a new programming language like F# I wouldn't want to be relying on a tutorial or copying examples from a book during this phase. I want to be using my foundation built during exploration and then supplementing that with relevant searching to solve problems. To expand on the learning F# example, let's say I am working on a side project. I would hope to have the language fundamentals down but maybe rely on searching to learn best practices or certain features involved in my project beyond the basics.
Another outcome that I've found useful for the practice phase is writing a blog post like this one. Writing a blog post forces me to feel comfortable enough to write about a topic, which means I need to know what I'm talking about (at least to the extent that I can). I've found blog posts to be a great way of reinforcing the knowledge that I've gained through practice.
Again side projects and blog posts work great for me in this phase, but try out a few different options to see what works best for you.
Deep Dive
As I mentioned earlier this phase is optional depending on how far you are looking to take your learning. This phase is potentially the most rewarding, but also the most time-consuming and challenging of the three in the framework. For me, the deep dive entails finding books, essays, or blog posts by experts on the topic I'm learning. The reason I find these sources so valuable for this deep dive stage is that they are mediums in which the author must invest a great amount of time to complete, which hopefully results in a quality result (not guaranteed, so do your research!). Whereas a tutorial or video course can be published in a much shorter amount of time, it may not have the depth that I'm looking for in this phase. This phase is similar to the practice phase in that it can conclude with a blog post confirming what was learned throughout.
If the deep dive phase isn't required or not something that sounds interesting then it may make the most sense to repeat the previous phases or move on to a new topic. The deep dive phase is also good for jumping into particular aspects of a topic that may already be familiar to you. For example, I am familiar with SQL and SQL fundamentals, but I might want to do a deep dive on indexes to see how they work under the hood and different ways they can be used to improve query performance.
I think it's also important to call out that the method I choose to learn with will most likely be influenced by my current knowledge of the subject or how much I want to learn. If I'm not sure how much I'll enjoy or use a topic, I may just explore and not move into the practice phase. I think that's why I've structured this framework this way. As you work your way through the phases the reward increases, but so does the risk. Making it all the way to the deep dive on a topic means that you've spent months learning and hopefully for good reason. Whereas the exploration phase is pretty low risk. If the topic's not interesting, important, or appealing then not much is lost by moving on to something else.
I hope you've enjoyed learning about how I structure my learning. It has served me well over the last few years as I continue to grow and push myself to become a better software engineer. Feel free to use this as a base for creating your own framework and adapt it to what works best for you. Happy Learning!