The 2 secret qualities you need to become a better developer
Why our understanding of how to improve our skills is flawed and the keys to unlocking your programming growth
There’s so much we don’t understand about what makes someone an expert programmer. As a self taught developer it plagued me for years that I could never fully grasp what I needed to do to become better, to reach the level of those who seem to code effortlessly. I researched extensively, reading blog posts, forums, asking every experienced developer i could meet, yet somehow I never really got an answer that satisfied me.
After studying the topic of ‘expertise’ for months I’ve realised there’s so much we don’t know about expertise and it’s holding us back from becoming better developers.
What actually is expertise?
From going into the literature of this topic, I’ve learnt that being an expert means you possess 3 qualities.
- Lots of factual knowledge
- A strong knowledge organisation
- The ability to reflect on and correct your approach
As a programming community we are far too focused on the first point and we don’t focus nearly enough on the second and third.
Almost every tutorial, course or teaching attempt focuses on learning more and that being the solution to everything. Want to be a better React developer? Learn about the fundamentals or how React works under the hood. Want to get better at CSS? Learn about specificity or css methodologies.
In actual fact learning more is almost never the solution for developers to reach expertise, most developers will know enough to do 80% of their work after a few of years of learning. After that the focus needs to shift heavily onto the second and third points. These points are not intuitive at all so let me go into some depth to try to explain them.
1. Knowledge organisation
Knowledge organisation is all about how the knowledge is arranged in your mind and how ideas/concepts are connected to each other. This is related to the biology of how the brain stores knowledge.
The way the brain develops and stores knowledge isn’t like how we create and store files on a computer or in a paper filing system. Knowledge doesn’t get created and then filed away in some sort of organised filing cabinet. The brain instead creates a map, an interconnected system of concepts and related concepts. You’ve probably seen depictions of the brain like the below image.
The brain relies on neurons and connections between those neurons to facilitate learning and development. When you learn something new that concept is often connected to many other existing concepts in your mind, through this you access that new knowledge by following the path from your existing knowledge. The key is that the pathways between neurons are covered myelin, a fatty sheath which facilitates the travel of signals. The better and stronger the connections the more myelin forms and the quicker and easier signals can travel across these pathways. Therefore the more and better connections you have between concepts the easier it is for you to retrieve that knowledge and as a result the better and quicker you can analyse and interpret large amounts of data.
Think about this, you often find that you or other people can know things, when something’s explained to them they understand it, but they can’t replicate that knowledge on their own (eg I understand it but I couldn’t have got to this solution myself). This is a symptom of poor knowledge organisation. A good knowledge organisation means not just having the knowledge but the ability to quickly and effectively recognise and retrieve that knowledge in the right situations. Without a good knowledge organisation you’ll struggle to recognise which problems require what knowledge and what solutions you’ve seen and how to implement those in the current context.
So knowledge organisation is super important, but how do you develop it? To do so you need to focus on how you are arranging/organising knowledge as you are learning. You need to put a focus on whether you are learning in the right way to facilitate a good knowledge organisation. When you are learning you need to focus on these 3 things.
- Arrange knowledge so form matches function
When learning new things, think about how that knowledge needs to be applied and ensure the ideas/concepts flow in your mind according to how they are used. Eg to write a component in react you need to know about components, render function, jsx, local state etc — all those ideas need to connect and flow from each other so when the time comes to use them you can recognise and access each element as necessary.
2. Develop a dense knowledge organisation
Connect concepts to other concepts. A good knowledge organisation is a dense one. Concepts should be connected to many other concepts, this helps you see the bigger picture and recognise more complex patterns that aren’t always immediately clear. Eg knowing how props in React are connected to component re-rendering and how the virtual dom works. Therefore if you have an issue with your component not re-rendering you can understand why and how to fix it.
3. Develop meaningful connections between concepts
Connections need to be meaningful. Often concepts are connected in superficial ways. Eg props are connected to components as you pass props to a component like an attribute when you render it. This is true but it doesn’t reflect the deep connections between the two concepts and without understanding that it can be hard to use them in complex ways. Create meaningful connections by trying to figure out the true relationship between concepts and learn the deep features between them.
2. Reflecting on and correcting approach
The other less understood element of expertise refers to how you tackle problems.
When you are approaching a problem you will think about ways to solve it and pick one which you think is the best. The difference with experts and novices here is that novices will often pick an approach they think will work and just implement that. What they don’t do is consider the approach, think about whether what they are doing is the best approach, whether there are any other ways to do this, whether the solution may create other problems etc. This usually leads to novices implementing solutions that work but can often be messy, don’t adhere to good or clean coding practices and can create issues/bugs elsewhere. An expert would consider all these things as they code but also would constantly be reflecting on the approach as they are writing it and will often course correct if they realise an issue or think of a better solution.
How you approach problem solving in programming is incredibly important, without being able to recognise the differences between approaches you’ll never be able to write good code and write elegant and robust solutions.
The way to improve this skill is to practice reflecting on your approach and thinking about your solution and other solutions as you code. You should constantly stop to think about your approach and think about whether your approach good, whether there are any issues and whether there are any other/better ways to solve this problem. You need to understand there are different ways to approach your problem and don’t default to the first or easiest solution, understand and learn to intuit the differences between solutions and what makes one better than another. Unfortunately there’s no easy way to do this, it just takes practice. The more you get into this type of thinking while coding the better you will become at this skill.
This was a relatively brief dive into all the research I’ve done into what makes an expert and how to apply those principles to becoming a better developer. Thinking like an (expert) programmer is the key to getting better at coding, practice the skills mentioned in this article and you’ll find yourself well on the way to becoming an expert.
Sources (among others):
This excellent talk but Carl Wieman who covers a lot of this material — https://www.mediatheque.lindau-nobel.org/videos/36150/lecture-scientific-approach-learning-physics
This really good book which goes really in-depth into some of these points and others — How Learning Works: Seven Research-Based Principles for Smart Teaching (Wiley Desktop Editions) https://www.amazon.co.uk/dp/0470484101/ref=cm_sw_r_cp_api_i_fP86CbN7HA1GX