One question people often ask me is:
- How can I become a Pro / Senior software engineer, and how long will it take?
And if I have to be honest, I don't think this is the right question to ask.
I've been coding for over 15 years, and to this day there is just so much stuff that I still don't know.
There isn't really a magical moment when you become a Pro.
Rather, you should have the right mindset, and realize that programming is a long and winding journey. It can have ups and downs, but also be very rewarding and enjoyable.
So in this article I'm sharing 23 top tips that can help you become a better software developer.
The Tech industry is very volatile and things change all the time. There are so many technologies to learn and so many languages to choose from.
This can be quite intimidating. But if you have the right mindset, and you like learning new things, you can enjoy the journey without feeling overwhelmed.
And of course, everyone learns differently. So find the method that works best for you, and get good at it.
If you try to learn too many things at once, you're more likely to lose your motivation and give up.
Forget about the endless stream of articles and people telling you that you need to learn this new language or that new library.
Instead pick just one that you're excited about, start with the basics and stick with it until you're comfortable with it.
As you get started, it may be a good idea to read the documentation and follow some tutorials, to get a basic grasp of the language.
But after that, there's no better way to learn a language than to build something with it.
Only after you have a good understanding of the fundamentals, consider learning a new language to broaden your skills.
Maybe there's an app or a website that you wanted to build for a long time.
Make this a side project.
If you can, set aside some time to work on it every day.
Maybe you'll feel that you're not accomplishing much on any given day, but Rome wasn't built in a day.
After a few weeks or months you'll see your product coming to life, and this is extremely satisfying.
Choose a project that challenges you, but is not too far above your skill level. As you build your confidence, you can go bigger and tackle more complex projects.
In fact, you only improve when you keep challenging yourself. Keep building new and different things.
If you are just starting to learn, it's very easy to fall in a trap where you do tutorial after tutorial after tutorial.
Guess what? Once you get a job no-one is going to hold your hand, and there won't be a tutorial for every single task you need to get done.
Try to break out of this cycle, and figure things out on your own.
By solving problems yourself, your learning will improve considerably and you'll have a more concrete understanding of how things work.
This is the single best way of breaking out of tutorial hell.
And the good news is that, documentation is just one click away. You can easily see the documentation for your SDK or libraries you use right from your editor.
To be fair, not all documentation is created equal and some languages have it better than others.
But knowing how to read it and use it, means that you no longer have to rely on tutorials.
Coding is great but it can also be a frustrating experience.
It's hard to know upfront every state that your code can be in (though writing tests helps with that).
Sometimes things won't work, and you'll find yourself stuck for hours without making progress.
So what can you do when that happens?
If you're getting some errors in your console, read them carefully as they may contain the information you need in order to solve your problem.
Try to become familiar with the debugging tools in your code editor.
Use print statements and breakpoints to step through your code and verify your assumptions, and learn more advanced debugging techniques too. These can save you a lot of time.
This is an essential skill that programmers use all the time, even senior ones.
So knowing how to find answers effectively can save you a lot of time.
If you encounter an error, you can copy paste it into your favourite search engine, and carefully review all the relevant answers.
It may take you a bit of time to figure out how to do this effectively, but you'll get better at it over time.
We've all been there. We found some code on Stack Overflow, and added it to our project, hoping it might work.
Don't just stop there. Take the time to understand how the code actually works. Make sure that it works under all possible cases, and adjust it to fit your project style and conventions.
As a word of caution, code that you find on StackOverflow or other forums gets quickly out of date. See tip #5 about reading the documentation.
If you can't find the answer you need, don't let that discourage you.
You can always post your question on StackOverflow. When you do this, choose a good title, and try to give enough context so that others can help you.
Also, find out if your specific language or framework has a Slack or Discord channel, and join it.
You may just find that there is an entire community of developers that are willing to help, as long as you're polite and ask nicely.
This will make you a better developer, and force you to think about all possible edge cases in your code - not just the happy path.
It will also teach you how to write testable code, and learn about important concepts like dependency injection.
When you choose which tests to write, ask yourself:
What would be the impact if this feature didn't work?
Then prioritize writing tests by impact:
- a broken link for showing the terms & conditions in the setting page may not be a big deal.
- a purchase flow that fails and doesn't unlock core features in your app is a big deal.
Try to have good test coverage for business-critical code, and automate as many tests as possible.
No matter what area of programming you're in, you need at least some basic knowledge of Git and the command line - you'll be using these tools day in, day out.
Try to learn about the more advanced features of Git as well. These will be very helpful when you work on projects with multiple collaborators.
Also, become familiar with continuous integration systems and how to set them up.
The reason you're coding is that you're trying to solve a real, tangible problem that your users or customers have.
So always try to focus on the users and business needs, and have the big picture in mind.
That way you're more likely to add value to the product.
One mistake that I often see other developers make, is to get stuck on one problem and go deeper and deeper into the rabbit hole.
That's not a very effective use of time.
So the next time this happens to you, set a time limit. Once the time is up, stop and take a break. Maybe the solution will come to you later in the shower. 🚿
Customers/companies will pay you to solve their problems, not to know the syntax of language X.
Learn how to break problems into smaller ones that are easier to solve.
To solve big problems, you need to think about the big picture, all the way from UX to system design.
To design and build an entire product, and you'll need (at least some) knowledge of:
- UI/UX design
- data structures and algorithms
- design patterns and system architecture
- networking and databases
Of course, if your role is more specialized you can focus on one specific area.
But in any case, you'll need to choose the right tools for the job.
Problem solving is an abstract, broad skill that takes time to develop.
My best advice here is to work on many different projects. As you do this, you'll start seeing what works and what doesn't, and draw on your previous experience.
Quoting Dan Abramov on Twitter:
The reason an experienced engineer moves so much faster than a beginner is because they opened most of the “doors” they encounter in code thousands of times before. They stop to think, but so much is done purely by recall. This is why you need to practice, practice, practice - Dan Abramov
To be good at coding you need to focus and work without interruptions for a long enough amount of time.
When you're coding, try to avoid all distractions. That includes social media, emails, your cat, as well as Slack and other ways that your co-workers may reach you.
If needed, set specific times for this. Make it clear when you're in the coding zone, and others will respect that.
If you fail to plan, you are planning to fail - Benjamin Franklin
Whether you're working on just one project, or have many things at hand and you need to keep on top of them, try to be organized.
One of my habits is to keep a daily TODO list of all the things that I plan to do.
And I find it very satisfying to tick off all the tasks at the end of the day (though sometimes I move them to the next day 😅).
Beyond that I also have longer term goals and plans, so that I can keep track of my progress and focus on what matters.
To organize all my work I use Notion, which has become my favourite productivity tool (disclosure: I'm not sponsoring Notion - I just really like it).
Chances are that throughout your career you'll spend more time reading code, than writing it.
Getting good at reading code will help you to understand many different codebases.
Where can you do this?
- Read the documentation and source code for libraries or frameworks you already use.
- Find some popular open source projects on GitHub. Once you find a good project, check out the code, and open it in your editor. Then try to run it and understand how it works.
- If you work in a team, do code reviews.
As you do this, try to think about how the code could be improved.
Doing this will make you more aware about style and conventions, so that you can improve the way you write your code.
Your future self will thank you for this. 😉
By contributing to existing open-source projects, you can improve your code-reading skills, and get valuable feedback on your own code.
By writing open source code, you can stop re-inventing the wheel and carry over your best code across projects. And if your project is useful enough, it can have a big impact.
Doing this is also great for your CV. A good GitHub profile shows tangible proof of your skills and coding style, and increases your chances of getting a job.
On a personal note, my GitHub profile alone allowed me to stand out in job interviews and negotiate great offers time and again, before I even became an instructor and a Flutter GDE.
You don't need to read every single article and watch every YouTube video out there.
And you shouldn't be following tutorials only. Trying things out on your own is more important.
But you should try to find the right resources to fast-track your learning, so that you don't have to figure out everything by yourself.
Try to find a list of experts who regularly share quality content, and subscribe to their feeds (if you're into Flutter, here's a good list).
I find this is a great way to stay up to date and learn about new things.
You don't need to become a professional designer.
This way you can make your own work look good, especially if potential employers or clients will see this.
But it also expands your sphere of knowledge, and helps you think about problems in terms of UX and not just code.
This one is super important. I don't think you can be a great developer if you can't communicate well.
You should be able to explain things in plain English (even if it's not your first language), so that non-technical people in your team can understand you.
Beyond that, always communicate clearly what you're working on, what problems you're facing, and make sure you do what you say you'll do.
If you work remotely, take 5 minutes every day to share your updates. I always do this, and my clients really appreciate it.
All this builds trust. Being reliable and trustworthy can be your single best asset, and is absolutely critical if you are a freelancer.
Your work is your brand. Your brand is what sets you apart. So always aim to deliver the best work you can.
If you can impress the people you work with, they're more likely to recommend you when you're looking for a new job.
And when you publish your own work, whether it's a GitHub project, your portfolio, an article or YouTube video, that is for everyone to see. So make it look great.
When you learn something useful, blog about it. Explaining things in writing can improve your knowledge on a certain topic.
Practice making your writing more clear and concise. This is a valuable skill in itself - especially if you work remotely.
Keep writing, and you'll build a trove of knowledge that you can share with others, and come back to when you need.
This will also boost your profile and CV, and help you engage with your community.
Life is short and things can go wrong faster than you may think.
So drink plenty of water. Do exercise. Eat & sleep well. Don't work too much.
Look after yourself and others close to you.
We've covered a lot of stuff. If all this feels a bit overwhelming, don't worry.
Take things step by step. As long as you're learning and continuing to grow, then you're on the right track.
Check out this Developer Roadmaps website. It includes learning roadmaps for frontend, backend developers and more.
UPDATE 2020-06-18: A new Flutter Developer Roadmap 2020 was published on GitHub. Check it out here!
When I started writing this article, I had four items on my list. I ended up with 23, and there are still many more that I have left out.
What are your top tips? Let me know in the comments.
Thanks for reading!