Learning is no simple task. And learning how to learn is no laughing matter.
🤪 Although writing that line did make me chuckle a bit.
For the past 4 years, I have been on a constant journey of learning how to code.
Granted, I was no #codenewbie at the beginning of this process, but I quickly realized I didn't know as much as I thought I did either. When I initially learned to program, we were taught using tools that are no longer even relevant (☠️ RIP Flash).
In those days we built websites with more photoshop than I'd care to admit. Don't believe me?
Check out some of these articles from back in the interweb history, talking about why photoshop is no longer a relevant web design tool:
Still curious? Wondering how anyone ever built websites this way? Well, check out this tutorial on creating slices 🔪 from images using photoshop:
Anyway, the point is this wasn't my first foray into web development or scripting for that matter.
What changed this time around was my approach. In all my other attempts with web development, I did my damnedest to avoid using code. I used tools that abstracted away from the code layer as much as possible (🤨 I'm looking at you WordPress...).
I guess you could say I was #nocode before #nocode was a thing, 😔 — I wouldn't say it, but I'm sure you could.
For me, the web has always been a creative outlet, and as much as I stared at and played with code it never really clicked for me back then. I thought of coding as more of a supplemental utility, rather than the foundation of my application.
Eventually, my resistance to code and my need for better solutions came to an impasse. I'm sure that every #nocode aficionado even today can sympathize with this sentiment. Somehow this gave me the motivation to learn how to code and eventually started me off on this journey.
I'm no expert when it comes to coding or learning for that matter, but what happened along the way in the process of learning how to code is that I also ended up developing a framework to help myself learn and intake new data. After years of learning in literally the wrong way, I realized I needed to — learn how to learn — more efficiently.
So my process discussed below is an amalgamation — pieced together from several different widely used learning frameworks and concepts. Personally, none of the frameworks fully addressed my needs. It took a bit of trial and error to lock down a process that worked for me.
So this is the process that has helped me learn more efficiently.
Generally speaking, we as humans often approach learning as a stop in between where we are now and the destination (a.k.a. the skill or knowledge) we want to get to. So we treat it as a means to an end, and in doing so we tend to defeat the entire purpose before we even get started.
The other glaring issue with this approach is that it incentivizes the act of cramming, — here the destination is more like simply passing a test or just building out a partial feature of your application.
My theory is that this occurs because we were never actually committed to the act of learning.
Instead, we are focused on reaching that destination by passing that test or completing that feature. The act of learning, in this example, is like a fleeting pit stop along the way. Instead of retaining the knowledge or developing that skill we simply let it drift away as the moment passes.
And this is where we lose sight of the problem, we spent all that time learning something that will probably end up being a one-trick pony in our toolbelt at best! This is because we never internalized the knowledge to help develop that skill.
I suggest you start by reframing the context, in this approach learning can be a seen EVERY STOP along the way to our destination. Also for the sake of this example, let's imagine the destination is not just a single location, but instead — several locations along the way. And each stop - in between each destination - represents a skill or topic you acquire while traveling from destination to destination.
Learning, in this scenario, becomes an ongoing process, and depending on the topic it could even be looked at as a life-long journey.
In my opinion, this is a healthy starting point for attempting to learn a new topic. It's about the journey, and making the most out of it, not necessarily about the destination and how fast we can get to it.
There are many neurological reasons why this is the case and if you're interested I suggest looking into focused and diffused learning modes. I also posted an article recently that highlights some of the main lessons learned from the discovery of these different learning modes.
By reframing our intention to focus on the process rather than the result, we can now use several common techniques to help us fill in the blanks in our process.
We all have gaps in our knowledge, this is particularly noticeable when learning an entirely new topic, but even with topics we are already familiar with - we still have some gaps in our knowledge of that topic.
You can't know what you don't know, but now you know... that you don't know.
So how do we being to fill those gaps in our knowledge?
The first step in this approach is to identify 3 things about the subject matter:
- What you know.
- What you don't know.
- What you need to know.
That sounds silly when you say it out loud, but that's the first step, realizing the difference between what you already know, and all of the things you don't know.
One easy way to accomplish this is to pick up a book on the subject and turn to the table of contents. There you go. There's your outline! These are all the things you need to know about this topic (at least, according to this book you've chosen).
You could also look at online courses on the topic and run through their syllabus to achieve a similar outcome.
NOTE: For technical learning, you can usually modify this approach and use the documentation as a reference instead of a book.
As you're going thru each item in the table of contents — make a list, or if you have a physical copy of a book make some marks in the margins. I like to call this process identifying knowledge gaps.
Sometimes you'll approach a topic and there's a prerequisite that you're also unfamiliar with, make a note of this as a blocking topic. You'll need to learn these items first before proceeding to the content you wanted to learn.
For example, you want to learn how to multiply, but you've never be taught how to add. In this scenario, "addition" would be your knowledge gap, you'll need to focus on that first to progress onto the multiplication tables.
Without the fundamental concept of addition, how could you possibly internalize that multiplication is like the shorthand notation for complex repetitive addition tasks?
I'm not saying it isn't possible to learn one without the other, but I will say that you're very likely stacking the deck against you by attempting to do it that way.
As developers we can even utilize larger road maps to help us learn complex interconnected subjects:
Now that we have an outline in the form of our knowledge gaps, we can take that one step further, and dig back into the book (or reference material) we used to make our outline.
This time around we're going to take each topic we identified as a gap in our knowledge in the last step as and we'll flip to the chapter that discusses it. Now we're going to first flip to the back of that chapter, and see if there are any review questions or a summary there. If we have both, then we're going to read through the summary and attempt to answer the review questions. If it's just a summary read through it and make highlights of important topics.
Several learning frameworks that suggest this approach and it's by far one of my most effective methods of learning.
If we currently lack the knowledge to answer a particular review question, we'll make a note of that, again if you're using a physical book, it makes a lot of sense to highlight the question so that you can refer back to it later.
The last step is to make a quick bullet list in your own words of any topics that you just learned from doing this exercise.
phrase your bullet points as questions, and write this answer below, this will allow you to turn this new bit of knowledge into flashcards or a quick review tool, later on.
Now you can repeat this step for each item on your knowledge gap list. Iterate through the list and you'll have learned a whole new topic.
You can take as many or as few notes as you feel you need to. I take notes profusely. I record each and every step in the process as a reference.
This helps me create a searchable index of every topic I've attempted to learn. This same data is then available to me no matter what device I am on, it's like having my own mini-wiki.
Consume content from multiple sources, take note of the different approaches.
If you used a physical book as a reference in the previous examples, it makes complete sense to look to other sources to fill in some of your more complicated knowledge gaps. This is where a good quick google search will take you a long way. For more complex topics you can try StackOverflow or Reddit.
Dive into some blog posts on specific topics you've identified as your knowledge gaps. Take notes along the way, be sure to constantly summarize everything you learn in your own words. This is the secret sauce.
The act of summarizing alone won't help you remember the content any better, but it will provide you will relatable explanations that you can use as a review. The fact that they were written in your own words means that it will take less processing power on your part the next time you review this material.
In my experience, I learn well through video, so at this stage, I'll usually hop on youtube, and try and see if I can find a video about the specific topic. I don't want an entire course (at least not yet), instead I'm looking for a brief video with a quick overview and an example. I'll take notes through the video and often even follow along if it's something technical.
fireship.io videos are particularly great for this.
Practice makes permanent
Make the reviewing of your notes a daily process, block off a small chunk of time for this once in the morning and once at the end of your day. Be sure to keep adding new material you've learned into the rotation as you progress.
If you phrased your summary bullet points as questions then you can use this free online tool to create flashcards out of that material: quizlet
If you come across any difficult topics that you're having trouble wrapping your head around I suggest opening a discussion somewhere relevant and when in doubt you can ask people on Reddit or Twitter. Be sure to preface the question in the context of "Hey I'm just learning, and I have a few questions...", I find this wards off most internet trolls and invites responses from individuals who understand where you are in your journey.
This part should go without saying, but so many people don't put this into practice, including me. You should build early and often — is a programming sentiment usually expressed about deploying your application, although here it means that we should tinker with the new knowledge we gain along our learning journey at regular intervals.
Did you learn a new way of fetching data? Awesome! Now go back to an older project and implement what you learned again. Do this sooner rather than later, and do it as often as you deem necessary and you will soon begin to experience the effects of those some new neural connections being formed.
I think one of the keys here is to not be afraid to break things in the process and also be open to reaching out for help when you're absolutely stuck.
This last part is a new addition to my repertoire. I'm genuinely a very introverted person. I tend to be able to get out of my own way - long enough to do what needs to be done, - but choosing to post in a public forum about my learnings and struggles is the last thing I want to do.
So this article is my way of starting on this next part of this journey, by starting a discourse about things I am interested in and things that are most relevant to me.
Going forward, I want to make it a point to post about things I've learned and distill them down in ways people can relate and learn from. Hopefully, this helps someone else out there who is struggling with the topic as I did.
Teaching has long been considered a great way of solidifying the concepts we're still learning. It helps us put the learning into action by forcing us to clarify the concepts in our own minds to help others reach the same understanding.
I hope this post has helped get you pumped up about applying a learning framework to your learning goals. If you find this information useful, please do feel free to pass it on to someone else who needs it.
Let's just wrap things up with a brief rundown of what we learned in this post:
- Learn new things by identifying your knowledge gaps and scoping the problem
- Look for supplemental sources of information to help clarify complex topics.
- Take quick notes along the way and review those notes daily.
- Build things, break them, and ask questions.
- Teach, knowledge is meant to be shared - don't be a hoarder.
Hey everyone, I'm Gaurang, a full-stack developer that is constantly learning and building in public. I love that I was able to change my career at such a late stage in life all by learning online with so many different resources. I generate content to reinforce what I'm learning and to help others like me in the future.
If you enjoyed my content, please feel free to connect with me wherever you spend your time online.