4 Steps on How to learn efficiently new things in Software Engineering
We’ve all been here and sooner or later we’ll all land here again. But first what about this post? I don’t wear a white coat meaning I am not a doctor so this post is not really a prescription but what I am trying to do is putting out tips and cheat sheets that I’ve been using for almost 3 years now and each strategy I talk about has a particular scenario where it would be applied.
So lets jump right in.
What do I mean when I say efficient learning?
Well it’s rather abstract but to put in, I’d say learning skills for the long run not just getting a piece of code to work or implement something but rather taking in the knowledge, harnessing it and then applying in your own way (designing your solution to the problem) keeping in mind the good practices.
Step 1: Know the history
You have to know the past to understand the present. ~ Carl Sagan
We and our world is build upon evolution and everything that’s out there in the world be it technology or products or even food has had it’s own journey of evolution.
The main question I want you to ask while learning a new tech is “why is it the way it is?”
Now I don’t mean for you to start looking for technical reasons why a certain tech works in that manner under the hood but what I necessarily mean is try to find answers to the below questions and yes you guessed it right we’ll be going back in time:
- What problem does this tech/product solve?
- Why did that problem arose in the first place?
- When the problem did arise, what all were the other solutions proposed?
- And finally why did this tech/product beat the other solutions.
To better explain let’s take an example of Apache Kafka. To learn it I would essentially ask what problem does Apache Kafka solve, why did that problem arose in the first place. When that problem did arose what were the other solutions the world sought after and finally what did Apache Kafka do that it made it such a favorite in the tech community?
Advantages of the approach:
Well if you follow these steps, you’ll not only know what is Apache Kafka but you’ll also know the other alternatives of Apache Kafka. Most importantly you’ll learn when not to use Apache Kafka and opt for another solutions for the same problem maybe RabbitMQ. Now if you’re not aware of these technologies it’s okay just remember they both are often debated on the internet as which one to use and where the keywords are hyperlinks to feel free to check them out.
Step 2: Swords and Shields
Well this is my own analogy so if it doesn’t fit right my apologies. So humans are full of survival instincts and when in danger humans would use all tools (skills) in the toolkit (that they know) to survive.
Essence of the strategy
So for the sake of example all the skills and technologies you know are shields and what you don’t know are swords (because no human knows how to fight out of the box). So let’s say you’re starting out to be a warrior and you know how to use a shield (being your strength) and you need to learn how fight and for that you need to know how to use a sword.
For example if I know Python (shield) but don’t know what are APIs (sword) I can simply look up things online to learn “How to make an API using Python” by a simple search on the internet and I’ll get a lot of tutorials in many languages and multiple accents.
But this is not something new, almost everyone does this so why the fancy name to a strategy? Well I am glad you asked, the above example is quite simple but what if I say you don’t know python and you don’t know what is an API and you have to make an API in python (now you have two swords and no shields). How would you tackle it?
I’ll tell you, we all do it. We first lookup what exactly is an API (pick a single sword, learn enough to make it a shield) and then search how to make API in Python (the second sword with API concepts as a shield).
You cannot learn to fight using swords in both hands and no shield given you’re just starting out. Sorry to say but it just doesn’t work that way.
So how is this strategy different?
So back in March 2019, I was given a challenge to learn and implement Akka using Java. And I was a C# developer who was just a few months inn with learning python. Now I didn’t know Java and I didn’t know what is Akka (Two swords). So I picked the way we discussed just above I started with Akka and it’s history (from Step 1) and soon I had a deep understanding of what exactly Akka is and what problem does it solve and why did we pick Akka to solve the problem in the first place but 0 knowledge on how I could actually code and get a sample running. The documentation was intimidating rather I still can’t understand their documentation and every tutorial I watched in Java didn’t make any sense. So what did I do?
I did a Swords and Shields assessment, my Shields were C#, Python, newly attained knowledge about Akka. My Swords: Java, Coding Akka solutions. So I looked for Akka implementations in C# and Python and I found one called akka.net for implementing Akka using C#. I spent the weekend working on a project in C# to learn how to code with Akka in C# and when I went back to work on the Monday I knew what is Akka, why to use it and how can we code for it (now a shield) and then since I knew what I wanted to do, I just had to search “how to do this/that akka java” (java being the sword) and the web worked in my favor this time.
Step 3: Steal a syllabus, kidding just follow one
This is mostly for the one’s just getting started in the field, but is quite helpful. There are a lot of websites/applications that have online courses to learn and they all come a price tag attached and not everyone can afford these subscriptions and what they all end up doing is going to YouTube and searching for content and a lot of them are successful but a lot of them aren’t. Because there is so much noise out there a lot of us tend to get lost and eventually loose interest. If you find yourself in such a situation I have the perfect cheat sheet for you and it’ll cost you a total of 0 money!!
The Cheat Sheet
Go to any of these paid membership, subscription only websites and find a course that you’d want to go through. Found many? (one will also do) Perfect now classify these courses into 3 stages Beginner, Intermediate, Advanced (a lot of these websites already have their content classified as this). Now that you have the courses all sorted out, pull out their table of contents and merge all the table of contents into a single one under the 3 categories (Beginner, Intermediate and Advanced) and there you have it. You have a top to bottom syllabus of things you’d have to cover to be at beginner level of a tech then you’ll have to learn these topics to transition from beginner level to intermediate level in this tech and so on. Now that you have the list, set up a targets to help you stay motivated and now just YouTube specific topics in that your shinny new syllabus and learn away. To start with you’ll see a tremendous difference in what you search for. From “Python for beginners” or “learn Python” you’ll be searching for “list comprehensions in python”. The noise just went out the window (someone please turn off Noise Cancelling)
Step 4: Test your Knowledge
And Now that you’ve put all these tips and cheat sheets to work and learnt something new it’s time to test your knowledge so that you can readjust your path in case you diverted. For this I present to you Stack Overflow and other online forums where people post their questions looking for answers. From highly experienced to freshly starting out, all sorts of people ask questions there. Try to answer their question based on the knowledge you attained. Trust me on this you will be able to answer a few questions here and there and then other people would post their answers too. Now benchmark your answers to the other answers and try to see which one would be better and why. This would give you enough hands on with the tech you’re trying to learn and speed up your process. Don’t be afraid to fail because in a lot cases you’ll get the answer just right.
There are a lot of ways and resources you can learn and this blog just shares some more ideas. So feel free to use the comments section to let me know of what you think? And don’t be afraid to use online forums to ask silly questions or answer someone’s question. You’ll end up helping them and you’ll end up helping someone stuck on their code and giving a boost to your knowledge.
Like this article? Follow @iam_Carrot on Twitter. Maybe click the 👏 button a few time to show your support ⬇⬇