One of the most annoying things in my work are people who do not know what they are doing. Since I am working professionally in the software development industry I am eager to get better in it, and because I never had a formal education in software development I always feel that I don’t know everything there is to know about development.
Therefor you might understand that I take every opportunity to get more knowledge and techniques about software development. I read books of the great names in the industry (Kathy Sierra, Uncle Bob, Gang of Four), get certified in different techniques (SQL, UML, ZCE, OCJP 6 at the moment). Anyway, I am trying to learn new stuff.
But what annoys me the most is that when I learn something that is very important/useful/practical (for example Design Patterns) and I tell people – very often people with University degrees in Computer Science – about it, I get a response something like “basic stuff” or “who doesn’t know about that”. It doesn’t annoy me that those people say that to me, it annoys me that when I see their coding I cannot see any technique related to what they call “basic”.
If it stopped there it would be bad, but not as bad as I am going to describe to you now.
These people call themselves developers and some of them even have the nerve to call them self a senior developer. What is wrong with this is the following:
These people often do not unit test. How is it possible to know your code works if you have no reliable test?
These people complain about deadlines instead of acting to it. It is your fault if you can’t make a deadline, you should have rang the bell earlier!
These people are working late in the evening, because they can’t make the deadline. You are not a workaholic or a hero, you are someone who didn’t finish his/her work!
These people make bad design choices. You say that you know design patterns, but it is never to be seen! I say that I drive a Lamborghini, yet I cannot show it to you.
These people do not evolve easily, they tend to stuck with what they know. Because working with something you know without looking for improvement can’t be wrong, can it?
These people - when asked – don’t educate themselves outside work because “they have lives”. Why would you do that, it is your bosses responsibility to get you better trained, right?
These people are proud to admit they sometimes/usually hack code in the software to make things work. Only the most awesome coders can hack existing code to make it work for them!
I can make this list even longer and I can make it even more sarcastic, but I think it is only getting more annoying if I do (let alone my blood pressure rising with every letter I type).
Cowboy Developers, why they suck
One reason, and one reason only: They make my life miserable…
…Well that might by a bit too hard, but let me explain that bit further with a simple example case:
A year ago I got a new project that involved creating a new section in an existing PHP 4 application. Although it is not a good idea to code in PHP 4, at the time there was no possibility to convert everything (the product is huge) to PHP 5.x. I got the project details and read them through and got the go-ahead to start. I started coding and soon I felt bad vibes coming in my mind as I began noticing weird coincidences in the code.
It began when I saw a function called get_organisations and I had the strong feeling already seen that one being declared before. In normal OOP that wouldn’t have necessarily caused a problem as it would have been an override if it were declared in an extended class. No, in this case it was a normal function in a procedural style of coding. No MVC or any type of reliable framework was used in the application and pages was just ‘included’ when needed. The OOP that was being used was imported from other frameworks and made to work, nothing really fitting for the application.
After a frustrating sigh from my side I continued coding, leaving the application unchanged – which I see now was wrong and I should have fixed that code – walking into problems quite quickly as I needed to include files that I needed for other functions which had the same two functions declared within them. Thus creating the problem of having a double defined function, which I needed to fix.
And if this was an isolated incident it was fine, but this is how the complete – well at least 80% – of the application was developed. The project ended up nearly past the deadline because of so much problems that occurred during the development stage. The code was a big mess and I tried cleaning it up as I went along (because my motto is: You code well, or you don’t code.) but as you might imagine that takes a long time, time that was precious and should have spent implementing the new features. Instead of that it was bug fixing along the way.
The person that coded the application was already long gone from the company and frankly left the company with dangerously unstable product. And although nothing had happened yet, there was no way of knowing how many hidden things already went wrong.
This man was/is a cowboy developer and in my opinion should face prison – might be a bit over done – for writing such horrible code. You might say now that it is probably too harsh to say something like that, but face it: The man did a consistent horrible job and still kept it. When a doctor surgeon operates on a person and keeps on doing a shit job, eventually people will begin to notice and will suspend him/her. To make it even clearer: A doctor needs to be in training for years before he is even to come close to a patient.
Software developers on the other hand can be created by simply calling themselves like that.
My wife is a Psychologist who faces somewhat the same thing in her industry. For years – centuries even – people have considered Psychology as a pseudo-science because of all the amateurs working in the industry calling themselves Psychologist. Even now the title of Psychologist isn’t protected and everyone can call themselves like that. But… they do have national bodies – changing per country though – that offer certification for people who completed a Psychology study to become a certified Psychologist. Although Psychology tries hard to do all their research correctly, and only work through standardized methods it is still hard for them [the Psychologists] to get rid of the stain on their name.
Why don’t we have that? We have certifications for the different languages/techniques, but it is just not the same for it is not a reliable way of knowing that a coder actually uses the techniques they learned. If we measure the skills of a developer on mere certifications we can only assume they know how to use a certain technique, not that they actually use it on a daily basis. It would be very beneficial if we could create a recognizable body that would identify the developer as being a craftsman, or professional, not depending on the language they know. Everyone – or at least everyone with a right mind – would rather hire a software developer that is a good developer but with little knowledge of the language they are asked to code in, over a developer who only knows the language well but lacks the skill of being a professional player.
Our industry is just being overrun by people ‘who know a guy’ or ‘has a nephew’ that can code. But it is just not the same, we are talking about the difference between someone who likes cooking for a hobby or someone who runs a kitchen in a Michelin star restaurant.
