A co-worker asked me if I would choose between someone hard to work with, but a very good developer OR someone easy to work with, but a bad developer. I said, “If the bad developer is willing to learn, I’d choose the one easy to work with.” That said, I have worked with bad developers in all ranges of of skill and “unwilling to learn” was a common denominator.
A Junior level unwilling to learn.
I worked with a junior that got upset when he was told by the lead developer that his needed to rewrite his code because he copy-pasted his code when he could have done a number of things to reuse one set of code. He was pulled aside multiple times after his code was reviewed and told to fix his code. Being a junior, I suppose he should accept that he isn’t good at what he’s doing and fix it, but he instead got mad. He wasn’t happy and just left the team a few months later; he probably would have been let go if he stayed. My advice: if you’re a junior, you’re lucky to have anyone point out your mistakes, otherwise you’ll just learn how to be a bad developer.
A Senior level unwilling to learn.
I worked with a senior developer that also got mad when his code was reviewed and critiqued. And while he was definitely a skilled developer, he wasn’t conforming to our code and used Java features that were frowned upon like reflection which I’m sure is okay in special cases, but certainly not for our project. Overall, he was just hard to work with since he easily got confrontational and was eventually let go. My advice: follow the lead developer’s guidance and the code patterns already used in the application and never think you’re better than other people.
Example of bad code.
I have recently inherited a huge pile of “you-know-what” project. I’m going to assume that he could have started off the project using newer technologies, a proper ORM (he was using pure JDBC), and did every bad-practice I could even imagine.
Nearly all Java 100 files were in one package.
Nearly all JSP files were in one folder.
Many methods that were used and reused were copy-pasted everywhere.
Methods were hundreds of lines long.
No use of inheritance anywhere.
I never met the guy but I could tell that he was a bad developer and, while bad developers can get work done, he or she will cause hell for the next guy who inherits it. He was working solo, so perhaps he didn’t need to care, but if anyone (if ever) asked me if he was a good developer, I’d flat out say, “No.”