How To Study and Learn Complex Software Engineering Concepts
5 Strategies To Help You Thrive In Any Computer Discipline

Great developers never stop learning! And while there is a nearly endless set of study strategies out there, in this article, I am sharing the ones that have helped me learn and master the subjects I chose throughout my academic and professional career.
1⃣ — Write It Down
Writing down what you are trying to learn uses a different part of your brain to reading. Although I have tried being efficient by using my laptop to jot down notes, using the old-fashioned pen-and-paper way has proven to be more effective in retaining the information at a lower level. The very act of writing fosters comprehension and retention, as a variety of mechanisms come into play: repetition, reinforcement and critical reflection on new material.
There are multiple techniques for note-taking and it all depends on your learning style. I am a visual learner, so I like creating diagrams, mind maps, concept maps, flow charts, summary tables, formulae, and so forth. Everyone processes information a little bit differently, so try to find those that help you soak up new concepts faster.
2⃣ — Deconstruct It
Chunking is a powerful technique to learn new concepts by breaking big and complex subjects down into smaller, manageable units that represent the core concepts you need to master. Let’s say you would like to start your Data Science journey. Grab a book or find a comprehensive online curriculum on the subject and begin by scanning the table of contents and skim-reading the chapters by browsing the headers, sub-headers and illustrations. This allows you to get a feel of what material you are about to explore and make mental observations on how it is organised as well as start appreciating what the big picture looks like, so you can then fill in the details later.
After this first stage, you need to start learning the ins and outs of the individual chunks. It is not as intimidating as you originally thought, as you have already formed an idea of what you will be studying. So, carrying on our previous example, you can go through the book chapters in-depth, and then supplement your knowledge by looking at Wikipedia, watching video tutorials, finding online resources, and taking extensive notes along the way. This repetition may feel redundant, but it means that you have more opportunities to cross-reference what you have learnt, rather than just memorise facts.
I love this strategy as it is effectively a divide and conquer method to learn a new subject little by little and, at the end, when you put the pieces together you are able to see how it all works in unison. It is not only applicable to big topics like starting Data Science from zero but is also apropos of broadening your understanding of a complex topic you have already learnt. Let’s say you would like to dive deeper into the inner workings of garbage collection in Java. You first need to understand what the types of memory are, i.e. heap and stack. Once you feel comfortable with these terms, you can move on to object allocation, and so on…
You repeat this process until you fully digest these terms and what they represent, and at the end, you will have attained the whole nine yards.
3⃣ — Simplify It
I came across the Feynman Technique as a fresher at the university in one of the first lectures I attended. My then professor exclaimed that we will never learn deeply any idea unless we can explain it to a child. He then declared that in his experience, a lot of Software Engineering professionals are using jargon and domain-specific vocabulary, but their lack of understanding is revealed when it comes to elaborating on the details. He then urged us to take the next 30 minutes to explain to a pretend 10-year-old what recursion was. Wow, that was hard!
Here is how the method works:
- Grab a piece of paper and write the name of the concept you would like to learn as the title. Research the topic and keep extensive notes.
- When you are ready, explain it in your own words or as if you were teaching it to someone else — especially to someone with different background to yours, e.g. a child. Focus on using simple language.
- Review your explanation and uncover gaps in your learning. Go back to the source material to build on your knowledge.
- If there are any areas in your explanation where you have used a lot of complex or technical terms, try to re-write it in simpler words, cutting away clutter and using examples and analogies to sharpen your explanation.
This methodology has stuck with me for all these years, but as I now have to juggle my full-time job with my family commitments, I am taking a shortcut (guilty as charged) to only following steps 1 and 4 above. So I actually:
- Study.
- Create educated analogies and visual aids to simplify the concept.
As a side note, I think the Feynman Technique is a powerful weapon to use when conducting an interview: in order to gauge someone’s declared experience I start by asking basic questions on the subject. Trick questions may quickly get the candidate stuck, but when I start from the basics, I can understand their level of competence and whether they know something or they know the name of that something.
4⃣ — Just Do It
While studying new information is important, putting the new knowledge into active practice is undoubtedly the best way to improve your learning and assimilation. This is how information shifts from working memory to the unconscious, allowing you to advance to higher-level thinking and in fact convert this knowledge to a new skill.
You can read ten coding tutorials on how to design a rest API, but once you try to build one yourself, you may end up falling on your face. I have met a few colleagues with PhDs that know the theory inside out, but they have (respectfully) created some of the worst designed applications I have ever seen! So don’t settle for reading tutorials or watching videos; try to be hands-on, as it allows to self-correct any educational missteps.
I keep a sandbox environment on the ready in my language of choice to try new things and test algorithms out. I do not limit my practice to only doing POCs on frameworks, design patterns, or trying out new syntax, but also:
I code anything that can be coded, even if coding is not the task at hand!
A recent example is when I was revising the Bayes Theorem: although the book I was reading was mainly covering the maths side of it, I reinforced my learning by creating a program that fetches a dataset of patients with breast cancer, plots it and calculates the probabilities of false positive and false negative tests.
💡 Top Tip: Embrace Struggle
Practice makes perfect; we all know that! But all practice is not created equal. It is not the quantity but the quality of our practice that determines how well we will perform. There is comfort in practising what we are good at (e.g. always using the same tech stack), but it is only when we expose ourselves to the uncomfortable sensation of feeling incompetent that we grow.
That makes the so-called: deliberate practice by its very nature, quite hard.5⃣ — Deep Dive and Backfill
Thus far, I have described bottom-up strategies to learn, i.e. building up knowledge from foundational concepts to more advanced. This is great when embarking on a new discipline, as we can rely on previously learnt blocks of information, but also has the drawback that many of these concepts are not particularly interesting by themselves.
So what I do is to start from the end and reverse engineer my way back to the basics by filling in the gaps in my knowledge as needed. This is a top-down approach, which is perfect as I understand why I am learning a specific concept and also creates a clear path of the required skillset. An obvious downside is that potentially I can build my understanding in shaky groundwork, but I can get back on track pretty quickly by self-assessing my knowledge, especially by applying the Feynman Technique.
Life Long Learning for Success

Unless you would like to be a world-class achiever in your chosen field, you probably do not need to clock these 10,000 hours of practice. Performing well-enough for your professional development is the most valuable purpose of skill acquisition. Josh Kaufman, author of the ‘First 20 Hours’ book and speaker of the ‘How to learn anything’ TEDx talk, suggests that 20 hours may be just right, as it is not that long to discourage you from starting in the first place but also long enough to have a significant improvement in the skill you would like to learn.
With that being said, learning does not have a beginning, a middle and an end — it is a never-ending process! It is impossible to know everything about a concept, but you should embrace the impossibility and enjoy the ride! You only need reliable educational resources and the willingness to venture on an indefinite learning quest.
Thanks for reading!
I regularly write about Leadership, Technology & Data on Medium — if you would like to read my future posts then please ‘Follow’ me
