What it means to be a good developer...

Software development has definitely seen an exponential growth in the past decade. And along with that came an immense demand for good developers. With only few industries that are hiring today it’s not uncommon to meet with a developer candidate at an interview who has a wonderful resume, but when you ask them to write a simple algorithm or even a nested for loop they really have a hard time. While I believe it’s the best job ever, it’s not for everyone. With this post I’d like to spell out what it means to be a good developer.

Good developer

But what do I mean by that illusive term “good developer”. Aren’t all programmers who know how to write code good? Well, absolutely not. I think an average computer science student with a descent understanding of concepts can write code but that does not make him a good developer.

Any fool can write code that a computer can understand. Good programmers write code that humans can understand. -Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

There is a lot of meaning in that simple phrase and a lot of learning that is required in order to make code human readable. I think first thing is a real understanding and practice of object oriented principles. I’m not talking about creating instances of the classes or calling methods on object but the object oriented design principles that were introduced to break down the complexity of the business domain. Concepts like single responsibly principle , open/closed principle, low coupling and high cohesion and etc. should be a second nature to a good developer. In addition knowing and practicing concepts like Test Driven Development (TDD) and Domain Driven Design (DDD) will help you transition from an average developer into a good developer. Another very important skill every good developer knows is how to take a spaghetti code and make it better, that concept is called refactoring and a big part of being developer is maintaining existing code which will most likely was written by an average developer. I think learning and becoming good at the concepts above alone would take a significant amount of time probably few years and a lot of reading of fundamental books. That brings us to next topic, continuous learning.

Learning

To be a good developer is to love learning. In fact continuous learning is what makes a developer better as time goes on. A lot of average developers don’t read books and don’t become better at their craft. I think it’s like that with many other professions. For example, I’m sure you don’t want to go to mediocre dentist because if he messes up it will cause an infection or some other problem down the line, so I’m sure you want to go the good dentist who is a master of his craft. Once a good developer has a grasp of design principles his learning doesn’t stop there, there is always going to be new frameworks new technologies other design principles, different programming language and he or she will need to take time to constantly learn them. So if you felt like college was too much learning then this career is not for you because it you will be constantly learning for the rest of your life.

Passion

Just like with anything else if you love what you do then you will get good at it. If it’s just another job then there is no way you are going to go home and read a book on the weekend, write a blog post, experiment with the new and shiny technology or build a project.

Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do.you do…

Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by dogma — which is living with the results of other people’s thinking. Don’t let the noise of others’ opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.” -Steve Jobs

Why waste your time and be mediocre at something when you can live a fulfilling life and be the best you can be.

Learn from others and pass your knowledge

I strongly believe that a good developer must have a twitter account, follow other developers and learn what others like you are working on. Once you have something good to share do so. I think building up your circle will get your more exposure and keep you up to the latest and greatest things that are happening. But also don’t let twitter destruct you and unfollow those that you think add noise to your stream. You can start by picking developers from my followers list.

Next on the list is a stackoverflow account. You will come across a problem that you cannot find an answer for sooner or later, and you can learn from others. As a bonus try answering other people’s questions.

Start writing a blog. I wish I started much earlier but it’s better late than never. When you are developing you always come up with some clever solutions to the problem or something that took you long time to figure out. If you take some time and share it, you can use it as your diary and when you forgot something, you can look it up from your own blog and other developers will appreciate it. I believe if you give something you will get it back in return.

Get a github account and follow great developers/project, learn from code they have written. It’s a wealth of knowledge for free.

Get a google reader, subscribe to developer blogs and read interesting articles once in a while.

Watch videos from conferences sometimes they have gems like a recent talk from Steven Sanderson on single page applications

Start your own project that uses latest exciting technology. As for me, right now I’m working on exciting single page application project that uses knockoutjs and ASP.NET Web API. I’m very excited about working with latest and learning new frameworks.

Finally

If you do all of the above while working your regular programming job you will no doubt become a good developer and be on the road to greatness! And remember it’s not the destination it’s the journey, and you gotta love the journey that’s all it matters :)

So do you still want to be a developer? Did I miss something, please let me know your thoughts.