How to we define “better” in the context of software creation. What makes a software developer better? There really isn’t a common metric to define such a thing. Are they faster? Is the code they produce cleaner, more extendible or less buggy? Do they know more? Probably some combination of each.

The real answer is just that they’ve practiced more. In anything we do practice makes perfect, and developing software is no different. Constant practice has the direct side effect of writing better code faster. Just to be clear, faster does not necessarily refer to typing speed. Instead, you’ll start seeing patterns in problems you solve every day and begin arriving at familiar solutions much quicker. Some problems become second nature, allowing mental capacity to be saved for new problems. It’s a constant cycle, but the more problems you solve the better programmer you become.

I think as developers we don’t set aside enough time to practice making mistakes. It’s very important to set aside practice time with the intention of failing your way through a new technique, style, or way of thinking. In other words, we deliberately need to practice pushing our limits.

Just go out and solve tons of problems. Take note on how you approach these problems. Don’t dive into coding, instead try to visualize the problem you are solving. If the problem feels impenetrable it’s probably too large. Figure out how you can break the problem down. It is far easier to solve a bunch of little problems than a large one. Consistently breaking your problems down will result in smaller solutions, which will translate to smaller classes, functions, and programs.

Master your tools. When starting out it’s very easy to overwhelm yourself with wanting to learn everything. “Hey, all the developers making the most money seem to know x or y, or use this text editor, or use that language…”, stop. Sure, watch out for industry shifts and new tools that make you better at what you already do. But this obsession with skipping to new things too often will cause you to burn out really quickly, there will always be an endless supply of new things to learn, and you have to come to terms that you might not be able to learn everything. Find a language you like and solve tons of problems with it. Look for tools that allow you to solve these problems faster. Master what you are comfortable with, then look for new things to learn.

In the end, the real skill set that a software developer has is his or her ability to solve problems. The rest is just syntax and abstractions. Work on your ability to solve a multitude of problems first. The rest will come naturally.