I have been coding for about a decade now. I'm far from experienced, though, which is why I often ask myself, how can I be a better programmer? Here's what I've come up with.

Learn more than one programming language. For a long time, I thought I could stick to a single language, learn all there was to know about it, and become an amazing programming in that one language1. But that limits you in so many ways. It limits the projects and platforms you can work on. It limits your understanding of programming, because all languages have differing sets of features. It also limits the experts that you'll learn from. If I used only JavaScript, I never would have seen, say, Gary Bernhardt's screencasts2, which taught me a lot.

Focus on software design principles and development practices. When you're just starting, you'll want to focus on language constructs (functions, control flow statements, things like that). But once you can write code without a syntax reference in hand, start learning about design patterns and development principles and practices. Acronyms like TDD and SOLID are things that can't help but improve your code (no matter the platform or language). Start with something relatively simple, like DRY, and move on from there.

Practice problem solving. If you know how to solve a problem, writing the code to do so isn't all that hard. The difficult part is dissecting the problem and figuring out the right approach. For the most part, problem solving skills can only grow with experience (design patterns are very helpful here). I've found that working through problems like the ones available at Project Euler is a great way to get that some of that experience.

Always be learning something new, for work or for fun. Tinker with a new language, design pattern, platform, or library whenever you can. Once you've reached a level of proficiency in the language and tools you use daily, it's easy to stop learning new things. Don't let that happen. Create fun little projects that introduce you to new things. I've built a working cellphone with Arduino. I've written FizzBuzz in Befunge. These types of projects are great for mental stretching.

Master your tools. A big part of programming is using your code editor, terminal, and other tools well. Learn their features and commands; let them do as much of the work as possible.

Write code. Every day. Nothing improves you more.

  1. Really, "Amazing programming who knows only one language" is probably an oxymoron.

  2. He's just one example of a programmer who is proficient in many languages.