15 April, 2019
"Formal education will make you a living; self-education will make you a fortune." -Jim Rohn
Since beginning my journey I have had to learn several new programming languages, frameworks and concepts by myself. The purpose of this article is to reflect on how I learn, distill it into a process and produce recommendations for others wanting to replicate my results.
If you don’t have a clear understanding of what you want to learn then you will inevitably end up switching context constantly to the next interesting idea. I am convinced that the best way to move ahead is to pick a scope of work, complete it fully and then begin the next topic. Constant context switching is will not let you learn a complex skill or concept with any efficiency. I would rather focus on a topic for 2 months than plod along for 2 years.
This requires identifying exactly where you want to end up at the end of the learning exercise. As an example I am currently teaching myself Machine Learning. I’ve scoped my learning to being able to produce basic machine learning applications involving the full pipeline from data ingestion to deployment. To set myself on the correct path I’ve given myself several milestones such as completing a Kaggle competition and deploying a machine learning-powered application for a paid client. As I progress I may change my learning trajectory slightly but I will continue on this path until I complete this scope of learning.
Enthusiasm is fleeting. As a teacher I have seen many students be excited about learning a new skill but then the enthusiasm fizzles out as the difficulty increases. While it isn’t always the case, generally the more difficult something is to learn, the more valuable it can be to you. There is a certain defensibility inherent in learning difficult knowledge. The majority of people will stop progressing once a topic gets hard.
This isn’t a character fault necessarily. It’s hard to know what something is like to learn and do until you get into it. Sometimes what you think is a good idea doesn’t match your expectations. It is better to do some initial theoretical and practical learning before you commit or abandon learning a new skill.
Before you can understand the path of learning you will need to do an initial period of immersion. Continuing from step 2, learn the fundamentals of the topic and start to build a map of what your learning pathway will look like. It’s important to keep your end goal in mind during this process. I would not recommend mastery as a good end goal. Delivering a basic but tangible project is a much better goal for a novice. Once you have your goals and learning pathway drafted together, your learning can begin in earnest.
Often learning pathways are already available from subject matter experts or through courses. I would use these as the basis of your own learning roadmap, especially for the initial stages. Following an existing learning pathway can be effective but acknowledge that the creator may not have the same objectives as your in mind or may not know the content as well as they portray. Try to use the most critiqued and industry-supported materials where possible. Pure academics tend to stay in academics which has vastly different goals to business. This has a tendency in academics not always teaching what industry needs.
Once you have a grasp of basic concepts, complete a number of tutorials. These don’t have to be the best tutorials necessarily. Often doing a badly constructed tutorial and having to solve the issues within is a good learning experience. Try to do a variety of tutorials from different teachers until you find a teacher that you really like.
Teachers I recommend:
Tutorials can get you from theoretical knowledge to some practical ability but not to the stage of building custom solutions. In my opinion this is the biggest leap in the learning roadmap. Following on with tutorials is relatively easy compared to diverting from the established path with custom applications.
To begin with you can build custom applications that are similar to tutorials you have done. This is where it really pays off to have done a wide variety of tutorials. As you become more confident and learn how to freestyle a solution you can get more advanced.
You don’t need to be an expert before you reach this stage. You should have some ability to deliver but it helps to have mentors to call on to assist in a crunch (note: do not form a dependency on these mentors, it will restrict real learning at this stage).
Make sure to set your client’s expectations appropriately. Let them know that you have some skills but are still learning. Give them a discount on the work. I have found that when pushed against the wall, people tend to find a way to deliver. Being under the pressure of taking someone’s money is a great incentive to progress your learning and deliver a tangible solution.
The capstone of any learning pathway is to teach the topic to someone else. This will help you solidify your learning as well as push you to learn areas that you neglected. After teaching you will be able to communicate the topic much more clearly and have a much better rounded understanding. Communication is a key skill that technical people often neglect but it gives you the best opportunity to excel. The better you can communicate your knowledge, the better you will be understood and engaged with.
In conclusion, this is the process I have used to learn a number of technical topics and the way I have enabled hundreds of my students to learn effectively. While it is possible to learn with other processes, and certain people may be more amenable to other processes, as a generalisation I believe this a robust and effective approach.
If you have feedback, please send to jcerexhe [at] gmail.com