Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
– Martin Fowler
I'm very lucky to have worked with many good developers during the 12 years of my coding career. From my personal experience I can say that age, a school degree, books and years of actual work don't necessarily make a developer a good developer.
I have noticed there are certain habits and traits that I believe separate a developer from a good developer.
Knowing the Basics
It can be a challenge trying to keep track of all the new tools, frameworks, and libraries that come out on a daily basis in the fast-paced developer world. Most of these tools indeed make coding easier and faster – and that's great. However, fundamental knowledge and programming basics such as Model-View-Controller pattern, Object-oriented programming paradigm, syntax, principles, etc, rarely change. Having a deep understanding of them is essential when learning about new frameworks and give you the ability to decide when, how, and why you should or should not use them. New tools or frameworks can mean little difference if a developer hasn't really committed time and effort to understanding the basics.
It is extremely easy and far too convenient to use Google to find and copy/paste out-of-the-box code snippets. You may need to tweak them, but it's relatively easy to solve tasks with minimal effort. Good developers usually take the time to read documentation: specifications, guidelines or tutorials with sample code or applications. Reading documentation helps us understand and learn the basics, and thus helps us come up with more informed and complete solutions.
Good developers learn by reading source code way before they start actually writing a single line of code. This is an ongoing process, no matter how advanced a developer may be. Developers read other developers' code every day: in blog posts, comments, code reviews, bug tracking, extending features or making any changes. In addition to this, reading the source code for frameworks, libraries, tools or programming languages will not only make it easier to read documentation going forward, but will also give you a deeper understanding of how things really work and take your knowledge to another level.
If you cannot grok the overall structure of a program while taking a shower, you are not ready to code it.
– Richard Pattis
The very first thing a good developer does when starting to code is put their keyboard aside. You need to take the time to imagine your code, draw a schema in your head, figure out the architecture and which algorithms to use, where to start, etc. All this may take up to 20% of your time, but it will save you from costly mistakes in the future and make the remaining 80% of work that much more easy and enjoyable.
Some developers write really complex code just to prove they can. Being able to write complex code does not always mean you can write good code. Sometimes, unnecessarily complex code can cause more harm than good in the long run. Simple, clean, and logical code is always better. It helps to avoid complications, it's easier to scale and read, and most of times doesn't even need comments.
Helping Other Developers
All developers use forums and groups discussions on a daily basis. However, good developers don't only ask for solutions, but also contribute to solving problems. If you are in a position where you are helping another developer with a simple task, it's likely that you are familiar with the solution and have implemented it in the past. If you are helping another developer with a complicated task, then you are activating and challenging your skills. When you help others within the developer community, you learn more than by simply reading other developers' solutions.
Not Comparing Yourself to Others
Every developer has strengths and weaknesses. It is more important to realize what these are and always work to improve them, rather than comparing your skills against other developers. Good developers constantly communicate with other developers and look at them as a source of experience, not an opponent.
Love What You Do
Stay hungry. Stay foolish.
– Steve Jobs
I am confident that loving what you do is the most important key to excelling at any job, and it certainly applies to being a good developer. Good developers always develop – they try new programming languages, are open to new methods and techniques, create new utilites and so on. They are always hungry for something new and there is a really simple reason behind it – they love what they do. This is what makes a good developer and sets them apart from the crowd.