A Smarter Software Developer: The Guide I Wish I’d Had
Let’s get this right out of the way. There are no magic shortcuts; if you want to master any craft, you’ll have to work for it.
When I began my journey with software over a decade ago, that would have been my advice: you’ll get anywhere you want to be if you put enough effort into it. One of the most important lessons I’ve learned since then is that I can achieve much more for the same amount of effort if I work smarter - by focusing on the details that matter and placing myself in environments that help me learn and achieve goals faster.
So my revised piece of advice is: work smarter, not harder - and here are some tips that I hope will set you on that path.
Don’t just write code - solve problems with it
Get in the habit of solving problems. If you want to learn a new programming language or a framework, first you’ll probably play around with it, perhaps creating a dummy app. While it’s a helpful learning method, you’ll learn a ton more if you set yourself an objective of building something useful instead.
By useful, I mean an app or a tool that has at least one active user and provides value to them. Let’s say you want to learn how to build a mobile app with React Native. Even if it’s a simple shopping list app, don’t just leave it in your development environment - get your partner and friends to use it, and use it yourself too. It will give you a raft of challenges you wouldn’t otherwise think of: how do you deploy a test application on someone’s phone? Can the app work without an internet connection? How do you gather error reports and usage statistics? It will help you stay focused and prioritize the details that matter when developing real-world applications - something that interviewers will look for when you apply for a job.
Learn principles, not frameworks
Programming languages, frameworks and tools come and go, and there are more of them out there than you could learn in a lifetime. Best technologists navigate this by being able to quickly adapt and change the programming languages and frameworks they use, seeing them as tools specific to a job, rather than areas of lifetime expertise.
For example, if you work with Java and Spring Boot, focus on understanding the underlying principles of object-oriented programming (OOP) and dependency injection (DI). If you have a solid understanding of those principles, you’ll find it easier to learn other languages and frameworks built on the same principles, such as C# and .NET.
Again, in technical interviews, those principles will be what the interviewers will try and check if you understand; learning them will yield a much better return on your effort investment.
Prefer team over individual work
Let’s be honest about this - you’ll make plenty of mistakes as you learn, which is completely normal and a part of the process. You’ll get stuck and go down rabbit holes, again all bread and butter for software developers. What will make a big difference, however, is whether you have someone who will point out these mistakes or help you reflect on them.
It’s best if you can work with someone more experienced than you, but you’ll also learn a great deal in a peer group with the same knowledge level as yours. You’ll all bring different perspectives and challenge each other’s thinking, pushing your learning beyond what any one person could do in isolation.
Prefer group learning by encouraging your friends to study with you. When applying for jobs, look for positions in engineering teams instead of solo departments.
Learn technologies adequate to your goals
JavaScript may be the most popular language right now, but will investing the effort and getting a job as a JavaScript developer set you on the career trajectory you want?
There’s a reason why several programming languages are popular right now - they are all suited to particular use cases better than others. Learning JavaScript will most likely lead you to work on UI and frontend technologies; Python will probably take you towards data science; Java is a sure bet to enter the enterprise world and finance.
As said before, you can always learn new tools and languages, but if you have specific goals in your career, you will achieve them sooner by focusing on building the right skill set.
Learn from trusted content
Anyone can write and publish a blog nowadays. In fact, anyone can publish a book, post a video on YouTube, or even write a scientific paper! Sadly, there is plenty of content available that, while helping you solve a particular problem, may also confuse your understanding in the long term, introduce security risks into your code, or promote bad engineering practices altogether.
If you intend to use code you haven’t written yourself, make sure you understand what it does and cross-check it with other sources. Look out for outdated libraries and prefer content from trusted and community-reviewed sources. Remember that the post you’ve found may have been written by someone not qualified in the area in which they claim expertise.
One high-quality source which you’ve probably come across is Stack Overflow. By allowing the community to upvote and downvote answers, all content is subject to collective scrutiny. Generally, more upvotes mean higher community confidence and a lower risk of bad code. Be wary of solutions posted on blogs without community reviews, especially if you don’t know the author.
That is not to say there are no good blogs to follow - I’ve read Martin Fowler’s blog for the entirety of my career and there are plenty more out there by authors trusted in the industry.
Don’t forget about books; industry classics like Clean Code and Domain-Driven Design have been long popular and will give you a level of understanding that no blog post can.
Stay curious
Richard Feynman, one of the great scientists of the 20th century said: “what I cannot create, I cannot understand”. Richard Feynman had a passion and curiosity to understand the inner workings of everything around him. He was known for explaining complex physical concepts in simple terms that everyone could understand.
The way I always thought about his quote was: if I were a car mechanic, I would want to understand how cars were built from the inside out. The best way I could understand a machine like a car would be to build one myself.
While I was never any good with car mechanics, following the same approach to software development made a great difference in my career. Programming languages, application frameworks and web servers - the tools that we use daily in software development can be all incredibly complex. You only need to learn a small set of features to start using them, but taking the time to peek under the hood and understand their inner workings - perhaps even building a simple one yourself - will give you a depth of understanding which will pay off quicker than you think. You’ll get better at troubleshooting issues and bugs, finding innovative solutions and will stand out in the crowd.
So, follow in the footsteps of many great inventors and technologists, and stay curious!