I came across this question on Quora a while ago (see What are the characteristics of a bad software engineer?, and while the answer with the most upvotes is quote comprehensive, it made me think about the question a bit myself.

I would say the biggest indicator of a bad software developer is someone who is unwilling to learn and unwilling to improve themselves, which manifests itself in a lot of different ways. The first of these that springs to mind is Quality.

Quality

A bad software developer writes bad quality code. It’s that simple. Whether it’s a bunch of variables named x, var1, inconsistent code styles and conventions or indentations that are all over the place. It’s an indication that the developer doesn’t really care about the end product or other developers, because code like this is a nightmare to read and maintain. Usually, if a developer’s code stays this way, it seems like a confirmation of them not wanting to learn or improve themselves.

I think design and implementation also come under this category. If everything is in one big method, or there is a lot of repeated code and no thought about DRY or other organisation principles, then the bad developer’s code is very difficult to traverse.

Blinders & Fear of the Unknown

Have you ever heard of a good software developer who was afraid to try new things, to learn about new technologies or dig around in something else to see how it works? I didn’t think so. Now this doesn’t automatically make someone a bad software engineer. When you are just starting out, it often helps to just focus on one thing at a time and take time to really learn it before moving on to the next thing. The same goes for the opposite end of the spectrum. It is not usually advisable to become a jack-of-all trades, even though a certain amount of trade-jackery is required in the world of software development. If you dispose of what you are working on every time a new framework or library is released, you’re gonna find out real soon that time is a flat circle and you’re never going to get anything done.

That being said, people who stick to the ONE THING that they know and are either too scared or too unwilling to learn anything new are bad software developers in my eyes. For example, if you learned VB.NET first and were utterly incapable of learning say Ruby on Rails or node.js, then I have no time for you. There are other industries out there when you can get by knowing only one thing your whole career but ours is not one of them. A healthy curiosity and willingness to get your hands dirty are both very good qualities in a software developer.

Lack of Foresight

Finally, there are the developers who are like an elephant running backwards, they can’t see what’s ahead of them or where they are going and everything in their way is going to be wrecked to shit. I’m talking about people who have absolutely no forethought, whether it is designing a database structure, planning the different parts of a system or even doing a simple bugfix. These people just don’t think about the implications of what they are doing. This can be dangerous on large complicated systems, though it can be mitigated somewhat by code reviews, automated testing and staging environments. But those who change things without taking time to figure out the ramifications of their change, or create without at least some thought for the future, get themselves and everyone else into a whole heap of trouble.

Thoughts?

These are just the main qualities that I think are shared by all bad software developers. Are there any more that you think are a lot worse or are worth mentioning? Leave a comment or send me a tweet @mjrbrennan.