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
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.
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.
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.
- 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
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.
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.