Monday, November 7, 2011

Becoming A Better Developer

One of the most frequent questions that I get asked is “How can I become a better developer?” I think that it’s a very good question to ask that deserves a good response. But how can you respond to something like that? Becoming a better developer depends so heavily on past experience (where to grow), interests and rationale (why do you want to grow), that it’s really hard to answer without a fair bit of discussion. This post reflects my experiences from both my own growth and the growth that I’ve seen in others.

Motivation

By far, the most important step to becoming a better developer is to be motivated to do so. This may sound like common sense, but in reality there are a lot of very smart developers in the world who are quite happy to stay at their current level. A famous phrase comes to mind here:
If you’re not growing, you’re dying…
This couldn’t be more applicable than to a discussion on developers. In our world, technology and capabilities change so fast that unless you’re actively trying to push yourself, you’ll rapidly become irrelevant. The best developers don’t just rely upon what they know; they actively are trying to push the boundaries of what they know. The best developers that I’ve ever met aren’t all the smartest people that I’ve met, but they all have had a strong drive to be better (even when others consider them “the best”).

Becoming a good -or even great- developer takes more than a desire to make it happen. It takes a commitment to do whatever you possibly can to make it happen. If that means spending 30 hours per week outside of work growing your skills, then do it. If that means traveling to conferences once per month, then do it. If that means alienating yourself from friends and family, well that’s up to you…

Confidence

Good developers are usually quite confident in their abilities. Why? Because they know that they have put in the effort to truly understand what they are talking about. But I’ve met a lot of developers who come across as poor or average simply because they don’t have confidence in themselves. Be confident in what you know.

Now, I think it’s worth noting that there’s a difference between confidence and arrogance. Being confident is a very desirable trait in a developer. It enables a developer to make the right decisions and discuss them in a productive way with others. But arrogance is deadly to a developer. It will completely kill any team dynamic, and often results in poor choices do to the “I know better” effect. Being confident lets you discuss and listen to others while still contributing to the discussion. Being arrogant shuts down the ability to listen and understand others.

Choose Concepts Over Implementations

Once you understand how basic programming works, you can start to separate yourself from the implementation details. Despite what many people may say, there’s not much conceptual difference between the different programming languages out in the world. Sure, there are different paradigms (functional, procedural, OOP, etc), but if you know the paradigm the language operates with, the rest is just an implementation detail. Focus on learning and understanding the concepts behind what you are working on.

If you understand the concepts, that enables two things. First, you can use those concepts in other languages with ease. But far more importantly it lets you think abstractly about different ways to solve a problem. It also lets you learn from other communities. So rather than waiting for somebody else to solve a problem in your language, or looking for help in your language, you can look anywhere for help.

The language that you use should only ever be an implementation detail (once you pass being a beginner). By some counts, you should be learning a new programming language at all times. If you’re the type of person that struggles with separating concepts from implementation, then this is very good advice. But I don’t think that you really need to keep learning new languages to become a better developer. Sure, it can help add perspective and depth to your abilities, but if you’re focusing on concepts then switching to a new language should only take a week or two.

Yes, I did say that moving to a new language should only take a week or two. And no, I don’t mean writing your first program. You should be able to switch to a new language and be almost as good as you were with the previous one in one to two weeks. If you learn concepts over implementations, this should not be difficult as learning the new language will simply be syntax and core library differences.

Read At Least One Book per Week

If you like fiction, then continue reading your favorite novels in your spare time. But to become a better developer, I would suggest that every single developer should be reading 1 technical book per week. There are two main things that you’ll benefit from with this approach. First, by reading actual books, you’ll focus on exploring a concept in depth (as opposed to blogs and online reading which tends to not fully dive into a concept). In that sense you can take those lessons and better apply them to the real world.

The second advantage to the one-book-per-week approach is that it will make you push your boundaries. One book per week is 52 books per year. Think of how many good books (based on reviews) are in your comfort zone, and it’s easy to see that you’ll quickly run out of books to read. Then you’ll have two choices, either read books that have bad reviews, or read books on topics that you’re not familiar with. That’s the best way to grow.

Share Your Knowledge

One quote that I’m especially fond of because of the shocking truth behind it is:
The best way to learn is to teach.
Do I think that every developer should go sign up to lecture at a college? Not at all. But do consider sharing your knowledge to others. Start a blog and post your thoughts to it. Offer to give talks to local user groups. Offer to speak at conferences. Write a book. All of these are easy ways to start sharing what you’ve learned. This will force two things to happen. First, since you won’t want to come off poorly, you will likely put in more effort understanding the concept better. Second, you’ll refine that knowledge more than you can imagine by talking about it and receiving feedback from the audience.

Here’s something to think about: Are people who speak at conferences speaking because they are the best, or are they the best because they are speaking…

Become a Mentor

Find somebody whose abilities are below yours, and help them out. It works best if that person works on your team, but can be applied to people online as well. The important thing is to look at the mistakes they are making and help them to understand why they are making the mistake. The obvious benefit here is that you are “paying back” the community and investing in the future of the industry. But a subtle benefit is that you’ll gain experience through others’ failure. By mentoring someone else, it will enable you to gain experience and skills much faster and better.

Conclusion

Becoming a better developer isn’t rocket science. It’s not even that hard. All you need to do is be motivated enough to put the effort in to do it. It’s completely up to you. I’m reminded of another saying:
Success comes not to those who look for it, but to those that make it happen.