I heard the following phrase no fewer than three times at a recent tech conference: “Bad Programmers will move heaven and earth to do the wrong thing”. The first time I heard it I thought that it was kind of catchy, maybe I even chuckled a bit with the others in the room.
The second time, a nervous smile crossed my face and I started looking around. By the third time, I was convinced that this quote was aimed directly at me: “Sten, you”, the presenter aimed his laser pointer right in my face, “will move Heaven and Earth to do the wrong thing”.
Other professions probably have their effective, less effective, and probably even negative producers, but for some reason, in software development this is a super heated topic. Look, we even have a Wikipedia entry for them: The NNPP, or so called Net Negative Producing Programmer.
In fact this very topic turns what by all other rights seem to be nice folks into vitriolic zealots. Many blogs I read, or talks that I’ve attended, will at some point digress into a commentary on their sub-par peers. Since these people seem to know the qualities of a Bad Programmer a priori, and I’m a little fuzzy on the subject, it leads me to believe that one (or both) of the following may be true:
I don’t believe that the latter is true, however, even passing belief that it might be has led me on a never-ending crusade to determine if indeed, I suck.
It’s like Matt Damon said in Rounders: “if you can’t spot the sucker in the first half hour at the table, you’re the sucker”. If I look around and fail to see terrible programmers, does that mean I’m one of them? Am I blithely leaving a path of coding carnage that others are forced to clean up?
I don’t believe this is the case, but the frequency of hearing about NNPPs coupled with my anxious tendencies make me uncertain. So that is why whenever I stumble across yet another witch hunt for smoking out the bad seeds of programming, three way mixed metaphors notwithstanding, I break into a nervous sweat while I pour over the latest criteria of “You’re a Bad Programmer if…” with anxiety that should be reserved for waiting for thyroid test results from my doctor (re: thyroid, no worries, I’m fine).
This obsession has led me to do things like interview with Google, since they seem to have their share of smarties, so maybe some of their smarties could objectively evaluate me, even though I didn’t necessarily want to work there (retrospective note: should not have said during the interview, “I don’t necessarily want to work here”).
Joel Spolsky (and his ubuquitous book/blog “Joel on Software”) is in many ways the origin of this anxiety. Before I go any farther let me be perfectly clear: I adore Joel’s writing style, I eat it up as Software Gospel. Indeed, it was out of this adoration, that my quest for acceptance grew.
But Joel has no shortage of opinions about what makes a Great Programmer and what makes a steaming pile of programmer dung. Joel has written extensively on the subject in no fewer than three books including a guide to hiring the best programmers (which outlines exactly why you won’t be able to hire a great programmer. Answer: they are never on the market. Which, by the way, makes me wonder where consultants fit into his developer food chain since we’re on the market potentially several times a year, but that’s another topic).
In fact if you’re a Programmer Hypochondriac like me, you may be nervously scanning this post looking for assurance and validation from my own list of “Bad Seed Traits” so that you can breathe a sigh of relief when you see that “oh thank goodness, I write unit tests, I must not be One Of Them”.
I’m sorry to disappoint, but I have no insight into the Bad Programmer phenomena. Actually, at the moment, I’m more interested in looking at those who hunt them down.
Actually, it’s probably not much of a mystery. The realm of Software Engineering seems to have more than its share of Those with Strong Opinions.
If you doubt that programmers have strong opinions, be sure to check out the heated argument over at Coding Horror over a probability problem, as scanning through a couple thousand comments may convince you otherwise.
I don’t know if it’s that those with strong opinions naturally gravitate toward programming, or if arming someone with a bit of CS knowledge makes them this way (probably the former), but suffice it to say that I’ve seen friendships end over “inheritance vs. composition”.
When you couple strong opinions with a very low barrier to entry in the field, it’s only a matter of time before the the finger pointing and name calling start to emerge. (As a profession, doctors also have a high rate of Strong Opinions, but they have a much higher entry barrier including lots of expensive schooling, and emergency appendectomies at 3am. So one might say that they’ve “earned it”. Besides, it’s dangerous to compare us to doctors anyway).
But how much of this is legitimate criticism, and how much is just plain mean?
At one of the talks I attended recently the speaker encouraged us to figure out creative ways to shame programmers who did things like break the build. Really? We’re promoting shame now as a motivation tool? As in, we should take away someone’s dignity? The speaker told us that talk was intended as a venting session, but I walked away from it feeling spiteful and sad for our profession.
Don’t get me wrong; I’m by no means blameless. I compare myself to others all of the time, and it’s usually not satisfying enough to come to the conclusion that we’re all equal in our own special way. So I judge others’ competencies, in my own mind if nothing else.
It’s just that when I do, it always leaves me feeling dirty and antagonistic. It makes me protective over my own ideas and not a very good team player. So for me anyway, dwelling on trying to separate the Programming Wheat from the Chaff is unhealthy and leads to professional sadness.
“Dude, you don’t understand”, you say, “Bad Programmers are costing us millions of dollars a year and slowing down the Good Ones”. No, I get it, fine. I’m all for higher barriers of entry and accountability. I’m not denying the existence of NNPPs — in fact I would argue that we’ll all NNPPs some of the time. (Are we all positively productive on the first day of a new project?)
The problem is that there is a difference between a call to improve yourself and a call to quit and find other work, you’re hopeless.
Tags: Observational
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « May | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | |||
You will look back at what you’ve written in ten years and laugh at your naivety. Stop worrying so much about what other people might think, they’re all faking it anyway – even your ‘heroes’. Also, check your spelling.
Well said, sir. I, for one, am sick of the holier-than-thou attitude adopted by coders. There seems little distinction the minds of coders between hacks who have no training and no motivation to improve and individuals who just don’t have as much experience. I have little patience for such elitism.
Let he among you who has never written an infinite loop cast the first stone.
hehe, I’ve been thinking the same thing for a while (I’ve only been working for two years though).
I’m finding that many bloggers seem to spout a lot of negative crap about other coders.
Like you, I have suffer from paranoia too, seems like these bloggers are talking directly to me!
Conversely I find that books like code complete, the pragmatic programmer etc really motivate me. They suggest good ways to improve, show you that its ok to make mistakes as long as you learn from them. Joel’s books are great reads, but they seem to have a negative affect on me. They just make me anxious.
As you say shaming people is not nice. Actually more to the point anyone who enjoys shaming someone’s work is a bully.
Fun post .. but surely you can remember some bad programmers … way back at some unnamed Boston area defense contractor I’m sure you remember the guy who did all of his coding in Microsoft Word? And the guy who spent weeks getting things set up to run a test that took you an hour to do? And the contractor who had a novel on his lap and minesweeper behind his coding window, all day, every day?
And shame for breaking the build is not such a bad thing … we still have the tube of shame in my my office … no one wants the tube of shame!
@Chris: There’s no question that I’m naive, but I think in this case, it’s more of a personality tick and my insatiable (sp?) need for approval.
@Kevin and hap: Nice to find some kindred spirits. Thanks for stopping by.
@Paul: Oh the memories. So yeah, I’m not saying that bad programmers aren’t out there, and the Tube of Shame among close teammates I think can be fun (although what does it say that the Armrest of Triumph never really caught on)?
I’m more commenting on the recent amount of vitriol I’ve seen on the subject — the witch hunts as it were, things like: “50% of all developers should leave the field”, and “a bad economy will force all the bad developers out of the profession” (topics of recent blog posts by prominent bloggers). I mean, there may be grains of truth to those statements, but it’s still kind of a dick-ish way to phrase it, don’t you think? The only thing that reading posts like that convince me of is how much I wouldn’t want to work with that person.
> “what does it say that the Armrest of Triumph never really caught on?”
I think the real problem is that it really was a wristrest and not an armrest. If we had sprung for a real armrest, I’m sure Joel would have a chapter or two on it by now.
Those that feel the need to go on witch hunts or take the time to complain about bad coders have bigger issues.
Who cares? You have to fix bad code written by someone else and don’t like it? Quit.
No matter how good you think you are, there’s someone better.
Good post!
But it was Matt Damen, not Edward Norton
@Jos: Ah! Good catch! Corrected.
A good read and friendly
The Edward Norton quote “if you can’t spot the sucker in the first half hour at the table, you’re the sucker” made me laugh.
Great post — I often wonder the same thing myself. Although I’m university educated in CompSci from a top-20 US uni, I constantly doubt my own abilities because of these kinds of articles. Then I go out and get the job done and produce, and realize that evaluating programming has to be done from a business perspective (that is, cost/ benefits), unless you are striving for a programmatic zen as described in the Tao of Programming. Which very few of us are (although I do get a rush out of a particularly clever bit of code
).
Is worse! My self-doubts were increased after reading
Unskilled and Unaware of It: How Difficulties in Recognizing One’s Own Incompetence Lead to Inflated Self-Assessments.
What if I suck big time and I’m oblivious to it?
Luckily, incidental data shows that I’m kind of a good programmer (I seem to produce better code faster and with less bugs)… also the fact that I’m worried about that at least I’m not unaware
Now seriously, I’ve been thinking about it and although I understand the feeling of “man, who wrote that crap??… now I’m stuck fixing it!!”, is not a matter of “let’s get rid of the NNPPs”. Software development is like an orchestra (or a band!): everybody must collaborate and the team should provide the motivation to every member either to learn and step up or to mentor the less skilled (Peopleware FTW!).
When you see people start thinking about NNPPs, that’s a sign of very dysfunctional organization…
I agree that this is a tough subject, especially since I had about a year at a job where one of the other developers and I spent a significant amout of time fixing the bugs a NNPP on our team produced until he was finally let go. What helped me to avoid the witch hunt metality with him (not that I completely avoided it) was to remember that this guy was still a guy like us. He had a wife at home and a son who was only 4 months older than mine. He could also get linux running on just about anything (and did) even though he couldn’t code his way out of a paper bag.
IMH and naive opinion, questioning yourself is evidence of an introspection that is foundational for self-analysis. The fear of shame (personal or social), albeit apparently unhealthy and leading to internally played strife between peers, seems to be a strong motivation for improvement. If you take this as accurate, does questioning how you question yourself reduce or otherwise displace the anxiety that pushes you to improve? That is, is it dangerous to question the mechanism that allows you to grow? And if it is accepted that this hypochondriac willingness to assume a lesser worth is fundamental, can it be exaggerated; how far can it be extended? When does questioning yourself break confidence and adversely effect performance?
My youth, or at least naivety, must be obvious. Does the first post (Chris Williams) suggest age brings a way to internalizing this struggle and present a confident exterior necessary for the image of expert?
You might be an NNPP if…
…you measure your productivity by lines of code versus accomplished tasks.
…you aren’t writing your own unit tests.
…your code is the only code in the project that doesn’t have unit tests.
…you’re the only / one of the few programmers who’s asked to do all of your development in an isolated branch.
…you frequently have your commits rolled back.
…you’re asked to rewrite your code as the action item of a code review.
…new “processes” are declared after your code reviews.
…you get locked out of the source code repository and have to ask permission to check in your code.
…you’re the only one putting in overtime.
…you’re the only one who’s productivity isn’t impacted by frequent meetings.
…you get embarassed and hostile when your mistakes are made public.
…you aren’t a little shamed or embarassed when your mistakes are made public.
…you think *your* code is self-documenting.
…you’re concerned about getting proper credit for your code.
…nobody uses your code until someone rewrites it, and then it gets used by nearly everyone on the team.
…your code works for you but rarely for anyone else without your assistance.
…you try to write code that is as clever as possible.
There is a difference between a programmer who lacks experience but can learn to do things better, and one that has experience but is not learning to do things better. The former is only a problem for a short time. The latter is a problem as long as that programmer remains in the role.
It’s not a “witch hunt” to realize that someone consistently causes problems, does not learn from other code or personal instruction, and requires constant guidance. I’ve met a few NNPPs over the years. I agree their presence is a sign of a dysfunctional organization, but often the dysfunction is not taking action to remove problems from the team soon enough, by changing their role to one they can succeed at or by firing them.
I believe that a motivated person can learn to be adequate in any endeavor, but the NNPPs I’ve met have not been motivated to learn.
It’s nice to look inward as an individual or profession, but what are the business magazines saying about how to deal with IT workers or developers? Look inward all you want but if you’re presented with an ever increasing slope or ramp that you can only slide down from, what is the point. I meerly suggest looking at the whole system for some synergy, though somewhat in jest!
The general agreement here seems to be “just do your job and stop worrying about everyone else”. I can get behind that. But there is one thing that comes out of all this NNPP stuff that might be a necessary evil. If we don’t constantly try to define and establish at least a low bar of competency, then we cannot improve. I think that it’s this desire to be considered a “good programmer” that motivates us to create some of the most amazing things.
You poor bugger. Google does not employ smarties – it employs people who are excellent at selling themselves as smarties. Let it go mate. Stop appealing to Google, Spolsky or whoever your next demigod might be to appease your insecurities.
You have my empathy.
Wow, some great comments here. I’m humbled by the response. Thanks to those especially concerned with my mental health.
I think that (to quote the first comment by Chris) to “Stop worrying so much about what other people might think”, is indeed the goal, but much easier said than done.
I think a lot of people’s success with being able to “let it go” is more based on personality than professional competency. As some others pointed out, there is often an inverse relationship between the two, and those that do “let it go” sometimes are the ones that probably shouldn’t.
A good amount of professional introspection and evaluation keeps us sharp and is healthy — keeping it in balance is the trick.
I really enjoyed these comments. Thanks to all for taking the time to read this and submit your thoughts.