Skip to content

good programmer, bad programmer.

A friend of my wife came up to me yesterday, he’s studying to become a Systems Engineer, and he wanted to know: What did I do to become a good programmer?

My answer: Who said I was a good programmer?

To be honest, I’m not sure if I am a good or bad programmer, and I never thought about it until he asked.

Coincidentally I found a few blogs talking about this very subject. They go to explain how, good programmers are more efficient and productive than bad programmers, and how good programmers take ownership of their projects, and don’t need to be micro-managed etcetera.

In my opinion it is true that good programmers tend to be more efficient, productive, and effective. I also agree that most good programmers are capable of taking ownership of a project and running with it.

But, I think in the real world things are not black and white, as the above statements seem to imply.

There are circumstances that can make a good programmer, behave like a bad programmer, the implications that good programmers are more disciplined, is also not necessarily true.

Humor me a bit more, and let me outline the variables, that I think are important, and may break the above perceptions:

Work Environment: The work environment is a very important variable. Productivity, efficiency and reliability depends highly of your work environment, and what you as a programmer need.

Some programmers need peace and quiet, others need to be surrounded by people, others need open spaces, other needs music, or a combination of some or all of the above, we are complex beings.

If you put someone that needs to work in a open space, in an office, he’s productivity will go down, we humans can get used to almost any environment, but there is always a trade off, and it is the programmer that has the short end of the deal. I believe this is why Google works the way it does, there are offices, cubes, open spaces, recreation rooms, conference rooms, and much more. They don’t care where you do your work (at least that is what googlites tells us). That right there is a productivity booster.

Projects: The type of projects you work on, can motivate you and inspire you to be better, and study more, or they can stifle you and bore you. This is a big problem, in several fronts, the truth is that no matter what the company needs the work has to be done, boring or not, and usually they need it by yesterday.

The problem for the programmer, is how does he motivates himself to do the work, and do it well?

I know this seems like a childish or amateurish proposition, and most professionals will roll their eyes at it. Don’t get me wrong it has to be done, it is your job, whether you like it or not, but it depends on the character of the programmer, and his own self pride, whether the level of the result is to par, with the results, of work he finds interesting and challenging.

Most managers overlook this issue, and in the end, either the programmer leaves the company or department, or he stops caring.

It is not an easy problem to solve, some companies have worked out this issue by given programmers, time slots to work on whatever they want, others will sit all the programmers down, explain the projects at hand, and let them volunteer for the different projects (this has a lot of potential problems).

But the truth is that most companies can’t afford to that, and they have to resort to other types of incentives, sometimes they work sometimes they don’t.

In this life, people have to do a lot things they don’t like, and they have to do it well, I’m not making excuses here, I do believe you need to be realistic, and know, that no matter what you do, or where you work, you will have to do things you do not like, and when that time comes, you have to make tough decisions, you can do it or leave.

But my personal opinion is that life is to short, to waste your time on things you don’t care about, or don’t want to do, sometimes we don’t have a choice, we have families to provide for, but if you do have a choice, use it wisely.

Management: A good manager, is a blessing. He is the first and in some cases the last line of defense or defiance.

A good manager, knows his team, and knows what they are capable of doing, he knows how to push them to be better, faster, and efficient. In short he knows: the good, the bad and the ugly, of his team, and is aware of the role that each member currently plays, and what they could play, he fights and stand up for his team

When upper-management puts out a ridiculous deadline to a highly critical project, it is usually the manager, and the Senior staff, that comes with a plan of action to deliver in time.

Sadly, this is hardly ever the case.

Most managers are ill prepare to handle the different personalities, and work ethics of his employees, most managers don’t understand, and don’t even try to understand the realities of each team member, sometimes there isn’t time for him to do that, after all he/she does have a life.

A lot of people think they can be a manager, and that being a manager is easy, well, being a bad manager is a piece of cake, all you need is to be good at watching your own back, and obvious denial ability, because nobody likes excuses.

But being a good manager, is a very tough job, you are dealing with people, different cultures, and personalities, your boss has certain expectations, usually this expectations are unrealistic, and brought by lack of knowledge or by politics.

Managers, –good one at least, have the task of bringing clueless upper-management requests, to reality. It’s difficult to explain; that the project they want deployed in three months, actually needs a year. More so when s/he has to wrestle with the managers and directors of the other departments, who say that’s the design is ready, corrected, and certified, that he’s just giving excuses, because his team, are a bunch of whining hacks!

Of course, when the problems start flying, you would hear the requirement people, shouting that, that feature is not correct, or a feature was overlooked, a procedure is not following all the steps outlined in the documents, designer will then come out, defend themselves in which ever way possible and point the finger else where.

And so the cycle continues.

This is the reality that some, most programmers live, and deal with.

In an ideal environment, the:

Good Programmer = Productivity + Efficiency + Self dependence.

Is true, and even in not such and ideal environment, it can hold, but then there is the human aspect, that’s never taken into account.

Now, if a bad programmer is one that is:

  • Unproductive.
  • Inefficient.
  • Slow, or dependent on others

Then there is no problem, because, if they want, they can learn to be the opposite of that. You the good programmer can teach them.

The truth is that, if you think about it, you can’t rely on the above conditions to differentiate the good from the bad.

I read a blogger, who said that:

You can know a good programmer from a bad or not so good programmer, because when the project is assigned a bad programmer, will start looking for sample code, and waste time looking for how others have tackled the problem, while the good programmer just starts working on it.

I think, that is not a fair or realistic statement. If I’m given a problem, that I know it was solved, efficiently and intelligently by someone else, I would go and look and talk to the person, who did it and if I can use the code unchanged, I would use it, and give due credit.

I don’t know if all this makes sense, I’m sure it doesn’t.

I have to say that all this has to be taken with a grain of salt. I have had been told, by some that I’m a good programmer, and by others that I suck. Truth be told, neither of the opinions affect me in any way, I love what I do, and will keep on doing it, with or without pay. I think that alone makes me a decent programmer.

I’m very interested on your thoughts in the matter, it does not matter if you are not a programmer, I think this extends to other careers.

2 Comments

  1. Good? Bad? Does it really matter? As long as you get your job done (according to my current manager), it’s simply irrelevant. I think he’s kind of right for the most part (I mean, what’s the reason we’re here on the first place? Deliver!). Aren’t we supposed to deliver?

    However, I do agree with most of what you wrote (your remarks on the job environment are particularly precise). There are a gazillion of different elements that affect your productivity.

    Posted on 09-Jul-07 at 8:27 am | Permalink
  2. Delivering is very important, but the manner in which you deliver, is as important.

    The more productive you are, the less time it will take you to “deliver”. But more importantly it will give you the time needed to make sure you are not “delivering bullshit”, but actual quality code, that will enhance and add value to your work place, instead of making it spend more money, fixing your “Delivery of crap”

    My point is, deliver the best that can be delivered, and do it with the assurance that you’ve done it to the best of your ability.

    To do this consistently certain variables need to be met.

    Good, bad, does matter. It matters because every line of code you write, every project you design, is a reflection of you, your ethics, your capacity, integrity, etc.

    Now, we live in a time, where mediocrity, is the status quo for most, I hope for your sake, it is not for your manager.

    Posted on 09-Jul-07 at 9:02 am | Permalink