As a developer, you probably want to improve your skills constantly. Be the best developer you can possibly be. But how you can actually improve is a tricky question to answer.
The Software industry is obsessed with the idea of 10x engineers. These are engineers who are supposedly 10 times better at their job than their peers. But how does anyone become so talented?
"The best programmers are not marginally better than merely good ones. They are an order-of-magnitude better, measured by whatever standard: conceptual creativity, speed, ingenuity of design, or problem-solving ability." – Randall E. Stross
Here are four actionable steps I have used myself, or seen others use to succeed in improving their skills.
If you are new to programming, I think this is a great thing to read first.
Teach and Write as Much as Possible
“What many people underestimate is that being a good writer, whether that is through emails or through documents, allows you to be more impactful. I see many engineers ignore that skill.
You might be proud about your code. You should also be equally proud of the craft of writing… Writing is a highly underestimated skill for engineers.” – Urs Hölzle (Google’s first VP of Engineering)
You are the person who's the most responsible for your skills and development. Being a better developer is largely up to you. It's your job to improve your weaknesses and hone your craft. Being a better developer is an ongoing process that never stops, and writing helps you learn more.
By writing, you force the boundaries of your comfort zone. You learn about new topics to discuss, and you "put yourself out there". You start a discourse where when you're wrong, people are very happy to correct you and offer feedback.
The best way to become a better engineer is to teach 10 people what you know, and empower them in their development skills.
Put your expertise online and open source what you know. Your technical writing acts as portable capital as you move job to job, to show the depth and breadth of your knowledge. Writing not only showcases your skills, but develops them, too.
Read A Lot
Mark Twain said that the person who can read good books but chooses not to do so has no advantage over the person who actually can't read a book.
Reading is such a powerful tool. Read a big well documented open source codebase, read technical books, read your colleague's code and read technical documentation.
Find the brightest minds on Twitter, engineers with decades of experience and people who create the specs you love. Be a fly on the wall for their conversations.
As a starting challenge, change your watch preferences on a codebase you are most familiar with (a work repo, or an open source one). Then review and read every change (or as many as you're comfortable with) that goes into
If there is syntax/code you don't understand or can't work out, ask the person who did it. Learn from everyone. It will help the coder clarify what the code is doing (if you can't work it out, it mustn't be very clear!) and will help you have more context on the changes for the ecosystem you work in.
Work on Passion projects and/or Contribute to OSS
"We are what we repeatedly do. Excellence, then, is not an act, but a habit." – Aristotle
One of the largest jumps in my skills and confidence came when I made my first major program that visualised path finding algorithms. I started with Djikstra and did A* too.
It forced me to:
- plan something out start to end
- give estimates
- hold myself accountable
- work on new API's I was unfamiliar with
- plan out my own architecture
- consider how to implement clean design patterns
If you aren't sure where to start, that's ok. Here's a link to lots of public API's you can dev against, or some project ideas I collated here.
If you haven't got a personal website, start there!
Even just publishing my personal project was an amazing educational experience in itself. You end up learning the entire SDLC start to end, and fill in the gaps in your knowledge.
For me it was deployments and CI builds that I didn't know a lot about (I use Netlify). Working out things like:
- How do you want to test your project?
- How will you release it?
- Do you want automated builds?
- Do you want to buy a domain for it?
You begin to self-educate in an intensely practical way, as you have an end goal in sight – getting the thing online!
Everyone's passion projects look different. Plough away on some open source project for a few months, and see how much you grow. When you begin to interact with people from different countries, who have their own formed opinions and who don't know you, you can't help but learn from your mistakes.
You get the added benefit of identifying one smart person you get on well with, from whom you can glean valuable insight based on their years of coding and expertise.
If this works well for you – that is, having someone with whom to discuss your tech progress – you can apply for a mentor (for free) here.
You don't even have to code an entire program or app, but just work on something that you enjoy. Solve Leetcode problems or Codewars katas. Write a compiler and a language. Or read through almost 400 ideas here.
The biggest jumps in growth came when I had a few small projects I was trying to implement. Having lots to do (that I enjoyed!) forced me to adapt to become more time-efficient and made me code quicker.
Make Sure to Exercise and Get Plenty of Sleep
"It is a shame for a [person] to grow old without seeing the beauty and strength of which [their] body is capable." – Socrates
Exercise helps your memory and your thinking, directly and indirectly. The direct benefits of exercise are many, but among other things it:
- allows your body to reduce insulin resistance and inflammation
- stimulates chemicals in your brain to affect the health of brain cells
- encourages the growth of new blood vessels in the brain, and
- even increases the quantity and survival rate of new brain cells.
Indirectly, it can help you improve your mood and sleep and reduce stress and anxiety (which, research indicates, can impair cognitive function).
Studies have also suggested that the prefrontal cortex (clarity of thinking) and the medial temporal cortex (memory) have greater volume in people who exercise versus people who don’t.
Just as it's important to look after your mental health, you need to look after your physical health as well. IQ drops off as we age, and one theory is that the amount of oxygen our brain receives slowly declines if we get old without staying in good cardiovascular health.
My final bit of advice that ties all of this together is to try and consistently challenge yourself.
There is a middle ground while you're working normally referred to as flow. It happens when you're feeling fully energized and "in the zone".
If you start something too difficult you won't complete it due to feeling overwhelmed. If you start something too easy, you won't complete it due to boredom.
You need to do your best to balance something being difficult enough to challenge you to learn new things and make you grow your skills versus being bored to death doing something well below your skill level.
This is hard to accomplish when you first begin, because everything just feels too difficult. If you find yourself here, I'd recommend starting the freeCodeCamp curriculum at the very beginning and working your way through the certifications.
Keep a notebook of ways you can grow and what you would have done differently when you make mistakes. Be kind to yourself, and keep moving forward learning all the way.
I tweet my articles here if you would like to read more of my writing.