So, you just switched careers and now you are into tech, a software engineer or you have been doing the programming, coding thing for a few years and the same question is burning through your mind, how do I get my programming skills from 10 to 300mph in less than no time like a state of the art sports car?
Yes, you already know becoming a Dan Abramov (co-author of Redux and create-react-app) or David Heinemeier Hansson (creator of the Rails framework) takes time, however, time is what you do not have and like me, you’re looking for smart ways and hacks to gain proficiency in as little time as possible.
The bad news is everything worthwhile takes time and you’re not going to wake up next week an expert programmer.
The good news is that you can be very deliberate about your growth and cut your time in more than half. You can wake up next week a much better programmer/software engineer than you were today.
To be clear this article does not necessarily address how to grow your career, branding yourself and looking good to the software community. You can appear amazing and not know shit. While the techniques discussed here are definitely transferrable to growing and branding yourself, it is not its main focus.
The focus here is to increment the substance you are made of. Your knowledge base and ability to solve problems like they are nothing, how do you get to become a world-class engineer capable of leading global engineering teams in as little time as possible by employing battle-tested hacks? Let’s take a deep dive.
Practice the basics
Learn how to learn effectively and fast
The software development world moves very fast and tools that are really popular today might be out of fashion a year later as we discover better and more efficient ways of doing things. Learning how to pick up new tools and languages fast as a software engineer is essential sometimes to even keeping your job. Studies show that you learn and remember more when you participate actively. This is achieved by building something small with that tool or language. Also, realize that in most cases you do not need to learn every nuance of that tool. You only need a working knowledge. In the end, employers care mostly if you can solve their problems not necessarily the amount of knowledge you have on the language or tool. I’ll dive deep into this in another article. Stay tuned.
If you do not have a computer science background, chances are that this one will get you frowning. However, you need to embrace it to eventually change your game fast. While you may not use most of the algorithms you study in a real-world scenario, you’ll encounter situations that require you to have knowledge of them. You need to understand space and time complexity and how they affect your application. Additionally, algorithms will help expand your brain’s ability to cope with complexity and improve your problem-solving skills. Also, most top software engineering jobs will make you write algorithm tests and whiteboard solutions. You will cruise through them if you have a good grasp of these. You can improve your algorithm skills using platforms like Hacker rank, Codewars, Leetcode, and exercism.io. The ultimate goal is to solve challenges and get battle scars.
Improve your communication skills
Great software engineers can explain their code and how it proffers a solution to a problem. Good speaking skills are very essential to your growth. You will need to communicate with your team, designers and other people who are not tech-savvy and the mere mention of anything remotely technical gives a headache. Your ability to flawlessly communicate what you have in mind will determine how these people rate your skills. This will likely hurt you the most. Learn to communicate or you’ll remain mediocre.
Study design patterns and clean architecture
One of the things I love about web development and tech, in general, is that things move fast, languages and tools evolve. However, the basic principles remain mostly the same. If you know these principles and design patterns, you’ll most likely pick up any programming language or tool with ease. Learn these software paradigms and they will serve you for a really long time and differentiate you from the pack. As you become more senior, you’ll realize that it’s not enough to get your code to work. that’s just the first step. It has to be reusable, maintainable, follow established best practices and most importantly, simple for other software engineers to understand and work with. You can start with books like Clean code by Robert C Martin, Patterns of enterprise application architecture by Martin Fowler, Design patterns: Elements of Reusable Object-Oriented software.
Learn from other software engineers
T-square your knowledge
As a software engineer, you will sometimes be tempted to learn other seemingly in-demand, attractive tech. There’s always a new, hot technology you should be learning. While it’s important you have an attitude to always learn new things, If you are going to really grow, you need to find a niche for yourself and not jump from one language or framework to another too early. Pick one technology and its associated tools and learn it very well. Go deep first in one language after which you can now explore other technologies. Usually, most of the concepts you learn from a programming language will be transferrable to other languages once you learn it well. There will always be something hot on the block anytime you’re ready. Be an expert in one thing, have a base first before expanding your horizon.
Do deep work
In this age of social media, the ability to focus for extended periods of time without distraction is becoming difficult. However, to really churn out good software at a great pace and learn proficiently, you need to find a way to concentrate and practice your craft for extended periods. You will be surprised at how your productivity and retention will improve. Cal Newport goes into detail about this in his book Deep work or you can read a summary of the concepts here or in this article.
Read other peoples code
Most of your life as a software engineer will be spent understanding other people’s code, fixing it, optimizing it while adding your own bugs which you may still need to fix later. To get ahead in your career, you need to make a habit of reading other people’s code and patterns. You can begin by looking at popular open-source tools in your stack. Study the code, google and ask questions about parts you don’t understand, breaking things down one after the other. At first, it will give you a headache but after some time it will start making sense, then you can start contributing. That alone is a good validation of your skills. Imagine going for a React interview and the interviewer finds out you’ve been contributing to React’s source code!.
Sit down and actually code
Finally, all the best techniques in the world will not help you if you do not sit down and get your hands dirty. To really learn how to swim, you need to get into the water. To become an expert software engineer, you need to spend time coding. No way around that. You have to put in the work. Pause and think back for a moment, how many hours did you spend actively coding yesterday, how about 2 days ago. The more time you invest, the more you will learn and grow. It’s that simple. You need to also constantly challenge yourself while doing this. There’s no real gain to keep doing or working with a technology you know so well already. Move to untested waters, integrate what you know already with tools you do not know. Beware of the comfort zone, it’s a growth killer.
Good luck and see you at the top.