How do you actually become a great software developer? Or, for that matter, how do you become great at anything? I think it's an obvious answer but it can be hard in practice. The main thing is to stay learning. This approach is stated often but I think there's a nuance in there that isn't always expanded upon. For instance, you can learn a new programming language every day for the rest of your life but that won't make you a better developer. You're technically still learning but you're not gaining practical knowledge.
Usain Bolt can run 100 meters in under 15 seconds. That's faster than most of us can ever dream of ever running 100 meters. But he didn't stay content at 15 or 14 or even 10 seconds. He had to get faster. Sure, he's blessed with incredible genetics but that probably only got him to sub-15 second times. He stayed committed and pursued his goal of becoming a faster sprinter.
I think the nuance in "stay learning" is that you're focused on achieving a singular goal. That means you have to be more explicit in what you want to accomplish. "Better developer" is too vague. For me, I want to be a better back-end and API developer in PHP, with a fluency in Laravel. Why do I want this? Because when I'm aware of what the language and framework can afford me, I can focus more on the overall architecture and structure of the apps I'm building.
These are some resources I've been using recently.
Refactoring to Collections by Adam Wathan
I seriously felt like Neo when I finished this book. Refactoring loops to collections was a great practice in looking at my code through a different lens, recognizing patterns, and producing more readable code. It was also a big first step in freeing me from this feeling that my code has to adhere to certain design paradigms. That part wasn't exactly a topic of the book but Adam's approach to programming was evident in that you should focus on producing clean, readable code, and not do things just because they fit into certain boxes.
Build APIs You Won't Hate by Phil Sturgeon
This one actually inspired me to write a package to help developers create transformers for their APIs in Laravel. This was eye-opening as well but for a different reason. Before I read the book I was just guessing at how to make an API. I waffled back and forth and my thoughts would evolve over time and at the end of a work week my API "implementation" would look drastically different from Monday to Friday. This book helped me nail down structure, be consistent, and avoid the pitfalls that have plagued API developers before me.
Laracasts by Jeffrey Way, et al
This is a no-brainer, right? Pretty much anything you might be interested and you have a fantastic teacher that can guide you from beginner to advanced in a brand new topic.
Laravel News, Podcasts, and Blogs
Laravel News is a huge resource to stay on top of what's happening in the community and dig a little deeper in the world of web development. There are also a ton of podcasts and blogs. Here's a couple:
Perhaps the place that I learn the most is just diving into the code. In PhpStorm all I have to do is cmd+click and I can keep drilling down to see how the framework implements something. This not only gives me confidence that I know what's happening behind the scenes but it gives me inspiration for how I can improve my own code.
And lastly, the best thing I can do to stay learning and striving towards my goal of becoming a better developer is to share it with others. I love learning but I hate being selfish with what I learn. That's why I started blogging. That's why I've begun giving talks at my local Laravel Meetup (Laravel ATX, woo!). Taking what I know and writing it down and communicating it in a way that makes sense for others is an incredible way for me to solidify what I know.
I'll continue sharing what I know here on this blog and you can also check out the slides from my recent talk on Laravel Spark.