Prologue
I wrote this blog five years ago when I was a junior developer. The tips I shared back then are still rules I follow today and have become an integral part of me. I've grown a lot as a developer, so now I want to give back to the community as an intermediate developer.
The advice mentioned here is for people who love their craft and want to get better at it, not for the sake of better compensation but for the joy of programming.
1) Love your job
I've seen people treat programming as just a job, doing it only for the money. They program to earn a living and go about their daily lives. This lifestyle is fine, its your choice. But don't be surprised if your skills don't improve and you become stagnant. To become great at programming, you have to love your job. You spend most of your day programming at your day job, and if you don't love it, you won't take the initiative to improve your skills while working.
I have a personal story to share. I once worked at a company I hated. I didn't take any initiative to improve the codebase or learn new things to enhance the application architecture. Now, I work at a job I love and treat it as my own product. This often leads me to learn new things and develop the codebase in a well-structured manner because I don't want to ruin it. If you do what you don't love, you'll do more harm than good. You can learn after work, but you would have wasted around six hours of your day and accomplished very little.
2) Be a generalist
Never put yourself in a box. Don’t think of yourself as just a frontend developer or backend developer. Think of yourself as a software developer. Great developers don't limit themselves to specific technologies they focus on solving problems, not just parts of a problem. If you limit yourself to a certain stack, you won't become a great problem solver. Software development is all about problem-solving, and if you don’t understand how to build an end-to-end product, you won’t be a good problem solver.
At the start of your career, you might have to choose a specific stack to prove yourself as a great software developer. But don't let that limit you. If you work at a good company, talk with a senior or other developers to gain insights into different teams and learn new things. Start taking responsibility for other parts of your company's codebase to transition into a more full-stack developer role. This way, you'll start thinking more about solving whole problems rather than just parts. If you are not welcomed to work with other stacks I would recommend working at another job. A company should never limit the learning of their engineers.
So, be a generalist. Don’t limit yourself to one part of the stack. Learn to solve problems as a software developer. Generalists find it easier to be good at solving specific problems because they can pick up new technologies faster since they already have a broad understanding.
3) Never stop learning new tech ( Be a tinkerer )
This is a crucial point that many developers overlook. To be a good problem solver, you must keep yourself up to date with the latest advancements in your technology. I find a lot of joy in my hobby projects, which help me develop many skills. When you tinker with new stuff, you learn a lot, and you never know when it will become useful.
For example, imagine you've been tasked with creating a blogging application for your company. They want a custom solution, not something that uses Webflow and other similar services. If you've kept up with the latest advancements, you can use modern CMS tools like Supabase or Pocketbase to develop the backend quickly. It might take just 30 minutes to set up a CMS for your blogging site, saving you from creating and managing the database and backend code. Then you can focus on the frontend according to your company's needs.
Here's a personal example: I’ve been learning Go for a month on the side. Recently, I had to write a cron job to update user metrics every 30 minutes. Knowing that Go is great and very fast for such tasks, I created the cron job in Go, built the binary, and scheduled a system daemon task with a timer for every 30 minutes. It works efficiently and consumes fewer resources. If I hadn't been tinkering in my spare time and only wrote code at my day job, I wouldn’t have come up with the best solution in a reasonable time. The cron job would have been written in Node, which would take more time as the user base grows.
So, never stop learning and creating on the side. The best way to learn is by creating and tinkering. I’ve been learning Ruby on Rails and Go on the side, and I’ve come to appreciate the different features that various ecosystems offer. This has helped me integrate new ideas into my workflow.
4) Take ownership
I recently watched a video of ThePrimagen that inspired me to write this blog. He mentioned that the best way to solve a problem or become a great software developer is to take ownership of the product. He talked about how Doom was created by just four guys who delivered such a good product because they took ownership. They knew they had no one else to rely on, so they made it their responsibility to develop the best possible software. There was no Plan B. They never felt burnout or gave up because they owned the product, not just the tasks.
To improve your skills as a software developer, you need to start taking ownership of the product you are building, not just features or tasks. You will find it much more enjoyable to work on a product when you see any feature or bug as your problem to solve, not just another task for someone else. This is the best way to beat burnout. When you take ownership, you will find joy in improving and making the product more efficient.
If you are working on a product, you can't blame others for any bugs that come up when users find them. You are part of the problem if things go wrong, so you have to take ownership to fix them and make a great product. Good, scalable products are built by teams, and if you don't take ownership, you are not a good team member. When you take ownership, you write the best possible code to create the best possible software, not just another software product.
Like the four guys who made Doom, they put in an insane amount of time to create something that was theirs, and they never settled for just another game, they created an era-defining game. The rest, as they say, is history. The same applies to you, if you want to make the best possible software, you have to start taking ownership and think of the product as your own.
Epilogue
I feel good after writing this blog and sharing my thoughts with the community. We might argue about frameworks, languages, and tools, but these debates help us improve. They push technology forward, making our community very competitive. Let's keep the passion alive!
Top comments (34)
Love the post.
I think in today's day and age it is politically incorrect to push the ideas of bringing work home or practicing programming on your off time.
But it is very true that the best way to get better at programming is to put in the time. There are no shortcuts.
Yes its your choice.
Loving your job is crucial for continuous improvement in programming.
Being a generalist helps you become a versatile problem solver. Always stay curious and keep learning new technologies, as this will ensure you remain adaptable and innovative in a fast-changing landscape like IT.
Thanks for sharing this!
Antonio, CEO & Founder at Litlyx
Correct one of my mantras
Just spread your wings and fail forward if necessary but never give up.. my personal advise here is unfortunately in this field there is a lot of toxic people that can effect your progress, please 🙏 continue and don't lose your confidence about yourself.
Good that you bring that up. A lot of toxicity in so many workplaces, and not enough mutual support. There should be much more focus on that. Animosity towards other developers.
And yes, toxicity is not just an abstract concept, it is toxic people, toxic actions. People should be talking and writing more about that.
:)
Jack of all trades, master of none.
"Frontend developer" is not a box, it's already an extensive variety of ever-changing technologies. And I believe there's need for specialists and generalists both.
No offence to anyone, and I'm sure one can find plenty of counter examples, but:
-- I've seen a number of truly awful frontends inside and out, created and maintained by fullstack devs, which I think would have been much better if f/e and b/e were done separately.
Love what you do, do what you love. I think there's nothing wrong with being particularly talented in, say, databases, or frontend, and loving specific parts of sofware development. If I love something more, and I am better in it, why not specialise in it?..
I appreciate your perspective and understand where you're coming from. There's definitely value in specializing, and I agree that specialists and generalists both have their place in the industry.
However, I'd like to offer a counterpoint. There is no harm in specializing in a stack, but it's generally a better idea to learn everything you can. By broadening your knowledge, you get a better understanding of the whole system when presented with a new project. This doesn't mean you can't specialize while being a generalist.
When you have a broad understanding, you can avoid blind spots and pick up new things more easily. This holistic approach can make you a better developer overall. You still have the option to specialize deeply in one area, but the general knowledge helps you understand and integrate different parts of the system more effectively.
Ultimately, it's about balance. Specializing can make you an expert in one area, but being a generalist can make you a versatile problem solver who can adapt to various challenges. Both paths have their merits, and the best choice depends on your personal goals and interests.
As I said, I've seen a number of truly awful frontends inside (the code) and out (visuals), created and passionately maintained by fullstack devs, and exactly because they are generalists as you call it.
Say we're building a ship. Oh, wouldn't it be nice if the same guys who build the engines also design and build the upper decks. Two for the price of one. Right? 🤑 You pay one person to do both jobs...
No, you cannot have your cake and eat it. To specialise, you spend a lot of time, you build a lot of experience. Some people think a fullstack developer is a frontend developer + a backend developer, all in one: that's not correct, imho.
Say, you get the same application built twice: once by 2 generalists (2 fullstack), and once by 2 specialists (1 f/e, 1b/e), with the same time and money. I think the immediate quality of the result as well as the maintainability (=long term) will be significantly different.
((One specific example I'd like to give, which I think happens in so many projects run by "generalists": because they don't have enough skills and experience in, and they don't feel comfortable enough with, HTML and CSS (and Javascript perhaps), they turn to using 3rd party UI utility libraries instead, and end up with lower quality code, visuals, performance and maintainability. Which is probably a somewhat contraversial claim.))
Perhaps we have somewhat different experiences and views there... which is a good thing 🙂
You are so right! It is good to know a bit of everything, so that things don't sound too foreign but also good to have a specialization, to have a skill that you really can do well and put time and love on it, and not just doing things half way because you have to do front end, back end, and other things at the same time. the result can be a blob
Just found this blog that emphasises on the points about tinkering and generalist linkedin.com/pulse/common-trait-ac...
This is so direct. Thank you for this.
the prime's video you have linked is going to youtube's history feed 🤓
Thanks for the correction
👏
"recently watched a video of ThePrimagen hat inspired me to write this blog." *that
Thanks for the correction
Perfect....!
I got a lot of tips & guidance in this post.