Becoming a good developer is super easy, right? You just read all the right books, learn the right languages, read the right blogs, and ? you’re a developer! It’s nothing a four year degree from a technical college couldn’t give you, right?
Or maybe not. Colleges and universities are woefully behind on emerging technologies (where are you supposed to learn this stuff???), blog posts and books have inaccurate or outdated information, and, anyway, you’re not really a developer…you just mess around in code sometimes. There’s no realistic way you could ever claim to be a “good” developer–there’s just too much you don’t know.
Great developers aren’t grown in a lab. You can’t download all the awesome information you want to know into your brain like you can in The Matrix. When I started out, I was really intimidated by all the amazing developers out there, the guys who speak at WordCamp US or even–gasp–present at actual PHP or JS conferences. I thought, there’s no possible way that could ever be me; I just don’t have the chops. It’s easy to be intimidated (and maybe a little awed) by the WordPress rockstars who have their names on all the cool plugins you use. And it’s easy to look at really big and complex plugins like WooCommerce or Easy Digital Downloads and feel like there’s no way you could build something on that scale.
The key to beginning a journey to being a better developer is first by understanding that all those developers that you admire and respect started the exact same place that you did. Everyone starts from nothing. And, as hinted at above, most university programs are woefully behind the times when it comes to emerging technologies in web development–which is to say that most devs are, at least in part, self-taught. But that means that you can do it, too, if it is something that you choose to pursue.
Love what you do
Here’s the thing: you might not actually love developing. I mean, maybe you like it, in that you do it and it brings in some income and it could be a whole lot worse, but that’s a lot different from loving it. And if you don’t love coding, no amount of persistence and work and studying is going to make you a great developer. You could maybe be a good developer or a kind of okay developer, but if you don’t love what you’re doing, you’ll never be great at it.
Back when I was freelancing, I oscillated from euphoric joy when I completed a beautiful website design that I thought would look fantastic, to sheer, mind-numbing dread at actually presenting that design to a client. It’s not that I disliked the exchange with clients, or that I hated my clients. I just felt so attached to this work that I spent so much time and creativity on, that the idea of it being ripped to shreds — or outright denied — made me want to crawl into a hole. As a freelancer, I did most of the work of both creating a design for a site in Photoshop and writing the code to make that design a reality. But it wasn’t until I took on a project that was purely back-end development for a site that a friend and fellow freelancer had designed that I had an epiphany: I really don’t like doing design.
For me, design is hard. At best, my color choices are boring–my color palettes tend to be extremely monochromatic with no variety–and design is constantly changing. It’s hard to keep up. I really liked when using grunge and textures were styles that people were into. I could find some cool parchment or fabric texture, get some grungy type for the logo and build a site around it. And that’s what I did. But that trend lasted maybe three months and then it was all embossed buttons and glows and gradients and then we dropped all of that in favor of CSS drop shadows and images that looked like polaroids but then that was out of style and everything was flat, flat, flat…Designing something that I like and designing something the client likes are often two completely different things and I discovered that I was much happier building back-end solutions for things and letting someone else handle designing a user experience that both delighted the client and resulted in increased sales.
If you aren’t having fun with what you do, you are doing the wrong thing. Or, at least, you’re not setting yourself up for success. You can’t get better at anything if you really aren’t that interested in the thing. In this case, you can’t be a better developer if you don’t like looking at code, writing code, coming up with solutions to problems, taking pride in the quality of your work. If you aren’t proud of what you’re writing, understand why and what you need to improve on to get better.
Never stop learning
I am always looking to understand why a thing works the way it does, and this drives me to sometimes unconventional solutions to problems. Many years ago, I did server support for a well-known, national grocery chain. One time, the store’s Unix server, which acted as the DHCP server in the store and was responsible for issuing specific IP addresses to all the other machines in the store (including the store computers and the Windows server, which I was supporting at the time), was not working properly. It was not giving the Windows server the correct IP address which was causing problems with the internal store network. I was on the Windows server support team, so this was pretty important to my job, but the Unix team really only knew to run a certain number of pre-written bash scripts. They didn’t really know anything about Unix administration, and the leads either weren’t helpful or were unavailable. So, I did the only thing I thought to do–I asked a bunch of geeks on an IRC channel I frequented who ran Unix and Linux servers for advice. It was through working with them that I was ultimately able to resolve the problem.
In the end, I was called a “cowboy” for going outside protocol. That’s largely what made me realize that this was not something that I really wanted to be doing with my life.
My “problem” was that it wasn’t okay for me to just click a button, or run a script, or escalate to my superiors when those things aren’t working (none of which, I will point out, were even possible in this case). I understood enough about the way the system worked that I could actually identify where the problem was and figure out a solution that would solve it. That comes from a never-ending curiosity and desire to understand what’s underneath things and how they work. It was that curiosity and thirst for knowledge that drew me to tech support in the first place.
As developers, we’re often asked to do things that are out of our scope of knowledge. We’re asked to build things that we’ve never built before. Sometimes, we’re asked to build things that don’t even exist, for which there’s no guidebook to how it should be done, nothing existing to copy or go off of. The best developers I know understand that maybe they don’t know everything, but they are confident that they can find out. Once you’ve built that really cool feature, you can add that solution to your toolbelt for next time you come across something similar. Or take the successes in how you approached that project with you when you take on your next project.
Learning isn’t finite. You should be learning in everything you do.
Know your strengths
You aren’t going to be an expert in everything. It’s just not possible. The saying “jack of all trades, master of none” exists for a reason. Understand the things that you excel at. If it’s hard for you to be an objective judge of your own talents, think about those things you enjoy doing most–those are probably the things that you are best at. If you’re still having a hard time, ask someone you trust or have someone review your code and give you some constructive feedback. Knowing what you’re good at is important because it leads to interactions where you can confidently say “Yes, I can do this, and here’s how it’s going to be built.”
Know your weaknesses
You also need to know what you aren’t so good at. Understanding where your weakest points are will help inform decisions about how to build a thing–where you might need help or what you might need to spend some extra time researching so you have an understanding of how something works. I’m weak in JavaScript. I know if a project is going to be JavaScript-heavy that I’m probably going to lean on other developers who are more proficient than I am for help or advice when I run into problems. I’m probably going to be hitting the documentation heavier, so I’ll need to anticipate spending more time on those tasks. And knowing what I am capable of, what I do feel comfortable with, helps when I’m tackling a problem that pushes me out of my comfort zone.
In order to get better, you need to be willing to learn and you need to build experience. Both of these things come from pushing at the edges of what your comfortable with, what is easy and familiar, and tackling some of those problems that you look at and just shake your head and ¯_(ツ)_/¯.
Surround yourself with other smart people
Lionel Messi is an Argentine soccer player who is so good he makes the best players he comes against look like they’ve never played the sport before. Even more than that, he makes everyone else on his team look better.
I am incredibly lucky. I get to go to work (in my pajamas, if I like) with some incredibly smart, talented and experienced developers at WebDevStudios. This means that it’s easy for me to learn from some of the best WordPress developers in the business. For one thing, I can just ask them a question, and we talk about a lot of tricks and tips (as well as challenges and how to solve them) on a weekly developer call. But you might not be so lucky (although perhaps you could be!). For that, I highly suggest getting involved in an open source project. If you’re ambitious, maybe you can try your hand at submitting patches to WordPress core, or maybe join the WordPress Theme Review Team, which would give you an opportunity to look at a lot of people’s code and determine whether it follows the recommended guidelines. Or maybe you can try joining a smaller project that is no less committed to producing excellent code, something like Yoast SEO or BuddyPress. Thanks to GitHub, it’s easy to jump into existing projects like this and submit patches and pull requests.
It also helps actually being around (in the physical sense) other developers. Not because you absorb their intellect through osmosis or anything, but rather because it helps to get an idea of how other people work. It gives you the opportunity to ask questions face-to-face. A lot of people use co-working spaces for this purpose–so a bunch of people can collectively work remotely but in a group environment where you’re around other developers. I’m also a big advocate for local WordPress meetups–there’s probably one in your area and they are great places to meet other local developers and learn about what they are working on and the ways that they work.
One of my favorite Ben Folds songs says “There’s always someone cooler than you.” No matter how much you know, there’s always more to learn, no matter how expert you get in a particular subject, there’s someone else who knows more. Learn from the folks who have knowledge to share and share your own knowledge when and where you can. It’s been scientifically proven in sociology studies that people actually learn from the act of teaching, because showing someone else how to do a thing solidifies that process more for yourself. Don’t be afraid to share your own knowledge and experience. Everyone is an expert in something.
Ask for help
It cannot be understated how important it is to ask other people for advice or help. I don’t necessarily mean “Hey man, can you do this thing for me?” That, to me, isn’t as helpful as explaining how and why a thing works. Teach a man to fish and all that. Before working at WDS, I once went through the hiring process and up to the code review portion for a company who we all know but who shall nevertheless remain unnamed. It was many years ago and I’ll be honest, my dev chops weren’t nearly where they are today. I was given a task to make a particular plugin “better”. That was it. Just make it better. So I worked on it for a week, I made several incremental improvements, but not nearly as much as I could have, because in many cases, looking at the code, I didn’t understand how it worked, so I just sort of ignored that bit and assumed that it just did work.
Can you guess what I did wrong?
After it was over and I was reflecting on the experience, it was my wife who pointed out the fact that one thing I didn’t do was ask for help. What is the WordPress community if not a community? I was so focussed on the task at hand, at passing this test, that I didn’t take advantage of the single thing that — in my mind — sets WordPress apart from other platforms and Content Management Systems. I tried to make it about me. But the me isn’t important. It’s never important. What’s important is the task at hand. Whether you’re building a plugin or theme or developing a website or making an app, the name on the outside (especially in open source) matters less than whether it does the thing as advertised. It’s okay to ask for help. It’s sometimes scary and seems like you’re admitting defeat in doing so, but you’d be surprised how helpful having another pair of eyes on a problem can be and how much you can learn from working with others, especially if you’re used to working by yourself.
Dealing with imposter syndrome
Before I go, I want to take a minute to talk about “imposter syndrome,” which is when you feel like you don’t belong among other more “established” or “experienced” developers or that you aren’t actually very good and someone will eventually find out. We’ve all been there. All of us feel the same thing. Some of us more than others, but it’s always there. For some, this feeling of inferiority acts to constantly drive us to be better at what we do. For others, it keeps us from taking chances or reaching for better opportunities because of our own self-perception. It can affect us in really subtle ways, like the way we talk about our accomplishments on a resume or in a job application. It can come out in interviews when we’re asked questions like “How good do you feel you are with x?” or “What do you feel your strengths are?”
Even the best developers suffer from imposter syndrome. When WebDevStudios first started really going through a growth spurt about two to three years ago, I thought “Hey, that’s cool…I wonder if–nah, they’d never hire me.” You can’t imagine (or maybe you can) how freakishly intimidating it can seem to work with people like Brad and Brian and Lisa who have written books about WordPress. Or with the guy who started Sucuri and challenged Matt Mullenweg to a throwdown. And, believe me, every single one of our developers are mind-bogglingly amazing. When I finally did muster up the courage to apply to WebDev a year and a half ago, at my first interview with Brad and Brian, I was terrified. I kept thinking “What if they find out I’m not actually a very good developer?”
I’m told this is a pretty common fear, the fear of being “found out” as an imposter. You tell me. For me, I just pushed on anyway, because if you never ask, you’ll never get the thing you want. I had to trust that if they did find out I wasn’t very good…well, I’d just have to figure out how to get better. Luckily, the folks here are also pretty amazing humans and it’s easy to forget that those superheroes in your head, the rockstar developers or professional athletes or published authors are all just that–humans. And we all start somewhere (seriously, have you seen the first incarnation of the WebDevStudios?).
I know it’s hard to overcome, but, trust me, the feeling that you aren’t good enough or can’t ever be a great developer is bunk. The best way to be a better developer is to understand that you’ll never know everything, but you can keep learning and improving and, if you continue to love building cool things, you will always get better.
And, you know, if that describes you…we’re hiring.