Programming languages were created to make the task of programming computers to solve problems easier.
What makes a programmer good at what they do? Is it their inherent level of “geekiness”? Their ability to think like a computer? Their fondness for pizza and caffeinated drinks? The need to spend countless hours playing games? The answer is none of these. A good programmer has the ability to solve problems, and think “outside the box”. Programming languages are merely tools. In the same way that a woodworker uses a jack plane to flatten a board, or a plow plane to cut a groove in a board, the programmer uses a loop to make a piece of code repetitive. We use the structures within languages to fashion programs. The larger quandary for the programmer, is not the language, but the ability to solve a problem, and express the solution in a manner capable of being translated into a program. Failure to adequately solve a problem may lead to programs that are less than effective. This normally manifests itself as programs that lack simplicity, or have features that may “cloak” the programs failings. Some of the other characteristics of a good programmer?
The ability to experiment – Design an algorithm and try it out. Try weird things and see if they actually work. Sometimes solving a problem means thinking creatively. It’s quite possible that the problem is too hard to code, but you will never know if you never try.
The ability to be patient – Rome wasn’t built in a day, and programs aren’t either. A good programmer will take a slower path, and build a more robust program.
The ability to broaden their skills – The programmer who just knows language X, and only wants to know language X, won’t have a great repertoire of skills. A good programmer is skilled at 1-2 languages and is knowledgeable about 2-3 more. You don’t have to be a coding guru. People who are experts in something sometimes don’t see the forest for all the trees, i.e. they get stuck in some minute detail, and fail to see the overall picture.
The ability to walk away – Programming is not your life. If you get stuck on something, then take a break – things always become clearer when you step back from a problem. Don’t leave some algorithm in your code “because I spent a long time designing it”. If it doesn’t serve the purpose it was designed for – toss it. If it’s too complex, re-design it. Code doesn’t care, it doesn’t have feelings, and won’t come back to haunt you. Just hit the delete key and move on. Don’t have an emotional attachment to your code – it’s just code.
The ability to be okay with failure – Not every program will work the first time. Most programs will fail at some point, but a good programmer will be able to cope with the failure, and use it to his/her benefit. Learn from failure.
The good programmer will also have an interest in things other than computing. Computing isn’t the be-all-and-end-all. You won’t build good software if you spend all day talking to a machine, then go home and talk to another machine. Peruse some woodworking blogs, and you quickly begin to realize that a lot of these guys build software for a living, and build tangible wooden things as a hobby. Some people cook as a hobby, others renovate their houses, some do photography. The diversity makes you a better software crafts-person.