What it takes to learning a new skill
Recently, I have been helping out with designing the new competency model for the my current employer. It has been a great learning experience, and as a result I have been trying to apply some of the learning to my personal development. This blog describes how I am planning to structure my own learning in the future.
The different stages of learning
When we describe how good someone is at something, we often compare them to ourselves and rated them based on how good we are. If we are just a beginner then someone who is proficient will be rated as "amazing" when in fact they still have a lot of room to improve. This kind of inconsistency will cause a lot of problem in companies where rating and review needs to be consistent to ensure fairness.
So how should we rate people's competency level?
- No knowledge - never encounter this before
- Awareness - can talk a little bit about the given skill e.g. framework, library or tool
- Learn - currently developing this skill, can complete some basic tasks but still requires supervision and support
- Use - able to start from scratch and complete a complex task without any support
- Teach - not only do they have the skill, they understand the best practices and can coach others in this area.
- Expert - leading the exploration, producing work that influences the development and progress of this field
An example
The descriptions above might be somewhat abstract and is too high level. Let me take you through an example I always use when explaining how to learn CSS.
Stage 1 - no knowledge
Someone who is not technical at all, and has no idea how CSS works on a website.
Stage 2 - awareness
Someone started creating simple static web pages, and they want to be able to changing colours and layouts on the page. After some research they understand they need to use CSS to do so.
Stage 3 - learn
Someone who has started using simple CSS to change the look and feel of a web page, but still lack the ability to implement complex designs. This person also doesn't fully understand the reason behind how everything works.
Stage 4 - use
A web developer with a couple years of experience, will be able to implement a web site based on designed wireframes.
Stage 5 - teach
A more experienced web developer who has read in the field about CSS methodologies and best practices in organising code to ensure consistency and maintainability.
Stage 6 - expert
For this stage, I think of someone who has created a CSS framework that is well received by the community.
My biggest take aways
Create a learning catalogue
When learning something new it is easy to get lost in all the different opinions and conversations around the field. It is important to do some research and list out all the important topics to cover before diving in head first. What I always find myself doing before is getting lost in the minor topics such as "how to optimise x", "comparison between y and x" and etc. These type of knowledge can be very useful when I get to the "use" stage, because knowing about all these would help me to understand the best practices and thus teach others about it. But being exposed to it too early will distract me away from the more important things.
Say I'm learning about a new JavaScript framework, by creating a learning catalogue, I can be confident that if I follow it through I will complete the "learn" stage and get to the "use" stage. However, if I'm still at the "learn" stage and I'm already looking at minor topics I mentioned above then it doesn't help me to move on to the "use" stage. The most obvious problem is that, I find myself in situations where I know some of the stuff other do not. But at the same time I wish I had a better understanding of the more fundamentals.
Personal projects helps to learn
Some might argue that different people learn differently, but here I'm going to recommend no matter what your learning process is, be sure to create something as you learn.
I have 3 reasons:
- Getting your hands dirty will help your brain to strengthen the neural pathways created by reading/watching. So you remembered things better and will be able to recall things later.
- Nowadays, it is important to show evidence of your work when applying for jobs. The ability to demonstrate you skills is essential for getting a senior role. For example, if I'm applying for a tech lead role. I'm going to need more than a few line of text on a CV to convince them that I have the right skills for the job.
- The last reason is actually the most important one for me. When trying to do something, no doubt I'll encounter problems. This forces me to think about digest the spoon fed information better.
Learn intelligently
In the world of software engineering, there are a lot of old technology and even more new technology. Learning new things is always more exciting and probably will provide better job security. But it is not always the case, for example languages such as C is 45 years old, it was introduced back in 1972. But it is still widely used today.
When people ask me where they should start when learning JavaScript framework. Instead of telling them go and learn React .jsor Vue.js (which in my opinion are the 2 best frameworks to learn right now), I would recommend them to go back and learn Angular.js 1. Why? Because it is easy!
- The syntax is user friendly
- When working on simple single page applications the set up is straight forward
- There are a lot of resources online, in terms of plugins, questions and answers
jQuery is my first Javascript framework, but creating a single page application with it is messy and confusing for new beginners. Creating an application with Angular 1 people will learn the basics of web development. Even though the philosophy is not as up-to-date as the component based development, it creates a much better learning process in my opinion. This reminds me in school textbooks how sometimes children are taught the wrong information in Science, because the correct explanation is too advanced for them to understand (if you are interested I'm referring to the atomic structure diagrams).
After knowing the fundamentals, learning the other JavaScript frameworks will be easier because the person would understand why things happen certain ways. However, it is not easy to understand what is the best way to learn. Having a good coach to support you is extremely useful.
Find a role that creates opportunity to learn
When working as the same role for too long, it could prevent a person to reaching the next step. Not because the person doesn't want to learn, instead the role simply does not provide the opportunities to do so. For example, code maintenance can teach me a lot about how other people work and this would be extremely useful I was at the "learn" stage. However, I could never reach "expert" stage by maintaining code everyday. This might not be a problem if being an expert is not one of your career goals, but if it was then I would recommend changing the role or job.
I often find a person can learn 80% of the skills related to his/her work within 3 months. Continuing doing the same thing will have little benefit after that. Of course this is just an timeframe I came up with based on my experience, so take it with a pinch of salt.
Final words
This blog was more or less a brain dump of the ideas I have been having recently after helping to develop the new competency model. I hope it was a useful read, and please leave comments to let me know how you found it.