What's Wrong With The Daily WTF

Alex Papadimoulis originally invited me to be a guest editor at The Daily WTF nearly six months ago. I was honored and accepted immediately. Since then, The Daily WTF has been rechristened Worse Than Failure.


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2007/03/whats-wrong-with-the-daily-wtf.html

One side:
We should start rejecting bad software. Return it to the store. Start challenging contractors and suppliers legally for slipping deadlines and mediocre execution or incompliance with the specification.

Thus, we need quality guidelines for software, a bill of rights for the software customer, so to say.

The same applies for frameworks or components. And here, a quality metric should be “How easy can I screw up as a developer using it?”

Take Microsoft’s .NET 2.0 Tracing framework for instance. There are endless ways to implement and configure it wrong. And probably only one or two, to have the config and trace sources and listeners and switches align perfectly, so you can get the trace you want. Inacceptably useless.

You are amongst those who are constantly repeating the good developers/bad developers meme. That way, you are making managers believe that it’s enough effort to hire the top 2 percent of developers to get high-quality software.

And that’s just not true. It’s not Mort generating bad software. It’s managers and customers accepting it.

I think its a pity that the Daily WTF doesn’t post a follow up article showing you how to do it right, which I might learn somthing from,
rather than the endless comments along the likes of “first” and “my eyes bleed”. As your FizzBuzz article showed, its not that easy.

Reminds me of a blog-entry I wrote way back in 2003:

http://weblog.jeroen.ws/?p=2

Jeroen

That’s a little silly. Even if a project is on time and
under budget and meets the spec (if there even was a spec, which
there usually isn’t these days), it’s not a successful project if
it’s completely unmaintainable and doesn’t last in production for
more than a few months (unless it was intended as a one-off).

I disagree on one condition: That the WTF parts are identified and cleaned up later.

My experience is that you get a couple of WTFs in every project as the project hits (impacts) the deadline. Often you can go back, fix the WTFs and re-deploy as part of the first bug-fix update.

The end user never notices the WTFs, and leaving them in made the project hit the release date, which in turn made the political battle for resources for maintenance easier to win.

Consider the alternative: Project deadline slips. Boss is angry. Other in-house projects get more resources as they “don’t f**k up”. Project finally struggles across the finish line. The inevitable bugs crop up. No resources for fixing bugs because “you f****d up the last release pretty bad, why should I waste resources on you now?”. Which means bugs go unfixed and so on… And then you’re really in WTF-land.

Leaving the WTFs in maybe makes maintenance 50% harder for a while, but the political and economical victory means I’ll have 200% more time 500% more resources and 1000% more political power to fix them.

There is a difference between good code and bad code, and it’s
not measured solely by the first product release.

It is also not measured by the code itself, but the code in its business context. Consider Linux vs HURD. Linux is old skool. Originally it had very little cutting-edge stuff. HURD had a microkernel and all sorts of “good code”.

Linux got something working released quickly. HURD didn’t.

Anybody running HURD? Will HURD ever catch up? How many coders does HURD have compared to the number of coders on Linux?

I would love to “mentor” the crap outta those 3rd party professionals:

http://worsethanfailure.com/Articles/Real_Consultants_Don_0x27_t_Use_Loops.aspx

I’ve been following the Daily WTF for some time now, and I’ve recently started reading this blog (~5 weeks now), so I was very happy to see my feeder tell me you’re posting on WorseThanFailure, and could not wait to see your contribution. I enjoyed it, but as you said, it was a little off topic.

I and many others follow the WTFs to vent off our own little encounters with coding horrors. We enjoy being able to make fun of an otherwise bad situation. We also enjoy the reassurance that we’re not alone.

That’s what WorseThanFailure is; what it isn’t is trying to change the world, or attempt to educate the WTF-ers. I find many comments very educational, but that is not the point.

To sum up, I agree with your point of view there, but maybe you’ll try and post a WTF next time :wink:

Jeff,

Great blog post, as usual. It makes me wonder if anyone has ever considered a Developer’s Confessional, where we all get to confess our own sins–things that we’ve done, and known were wrong. Eating crow from time to time is great therapy. It helps us laugh at ourselves, and remember that we’re NOT Superman.

I’ve done things in code, and gone back to them the next day and thought “What in the FRACK was I thinking?!” I’ve then scrambled to fix them before anyone else noticed. I typically do these types of things when I’m tired, stressed, in a hurry, or distracted. They’re stupid mistakes that I know I shouldn’t be making, but I still make them. I’ve got 20 years or more in software development, and I still make stupid mistakes.

For instance, in Visual Basic .NET, in a Select Case structure that uses the TypeOf operator to compare types, I recently inserted a Case statement at the START to check if the argument was of type Object. This was in code that had been working for a year. The body inside the code told the Case statement to bail out of the Select statement and ignore all the other Cases.

Well, of course, as anyone knows, every intrinsic data type in .NET can be an object. So it’s no suprise that every data type started getting skipped. What in the HELL was I thinking? Twenty years in software development, and a lot of that spent in Java, C++, C#, and VB.NET, and I still make blunders like I just started yesterday.

Yeah. I think we need a confessional. :slight_smile:

Jeroen:

Read your blog, great post. One little caveat, though: you use the term “gamers” and “game development” pretty loosely. These days, “gamers” and “game development” tends to encompass MMORPGS–and you can bet that there is a ton of maintenance programming going on in those games. Further, a lot of MMORPG developers get their start at small gaming companies. Either way, the development practices can and should be the same.

Your article was great. You may want to consider an update to it. I always enjoy reading articles about code quality, so keep up the good work.

Mike

We need a professional organisation / association with a specific focus on computer and software engineering. Developers should have to study a body of work to be even entitled to apply to join. Electrical and Electronic Engineers have IEEE, Accountants have ACCA, Architects etc…

Knowing the material doesn’t necessarily mean that you’ll use the material.

However, I’ve often thought that Software Professionals Union was a sorely needed thing. On the other hand, I’ve worked with some folks who were elitist snobs without the benefit of a membership card. I’d hate to run into them with one to rub into my face.

Henry Boehlert wrote: It’s not Mort generating bad software. It’s managers and customers accepting it.

I think the term bad software should extend way beyond problems that your customers might notice (and accept). A bug free code might still be bad. As for the managers - they are more likely the cause then victims of bad code. Most managers tend to view code and the development process as a means to get to the product. I think the development environment / process / code should be viewed as the real product of an development oriented company.

“Doesn’t this quote indicate that there really isn’t anything that can be done? You notice bad programmer, advise same to start reading blogs (like wtf), programmer will never do so. Thus, wtf lives forever…”

To some extent colleges need to do a better job at getting CS majors to understand what they need to do once they are a real, live programmer. But this obviously doesn’t capture all (or even the majority) of professional programmers.

I’m curious if this idea could be pulled off at some workplaces - would management spring for purchasing a few copies of some book (i.e. Code Complete) and then allow the developers to have a “book club” on company time? You could probably cover something like Code Complete over 6 months or so. Less time for books like Pragmattic Programmer. Once the canon is covered, move on to more controversial books that will at least get people thinking, like Extreme Programming Explained. Don’t be dogmatic about any of the material, but get people involved in discussing the books.

It may be hard to get management to buy into this, but I suspect the benefits would be tremendous over time.

I’ve been reading WTF for several months now, and Coding Horror for a couple of weeks, and I’ve found that its usually therapeutic seeing the oh-so common mistakes some devs make.
Admittedly, far too often, I’ve looked at an entry on WTF and thought "hang on, I’ve got something similar to that somewhere…"
I’m using the site as a learning tool - partly learning from the stoopid mistakes that others make so that i try not to do anything as asinine myself, but mostly because I’m thinking “what the smeg was I thinking when i wrote that garbage?”.

Mike Hofer is right: a confessional is a good idea. People should start submitting their own WTFs to Worse Than Failure.

“I can absolutely guarantee that the kinds of developers who could benefit most from reading WTF simply do not-- and never will-- read the WTF website.”

Absolutely true, in my experience. The really mediocre developers that I’ve worked with had no desire to improve their craft. If they need to learn something specific, they pick up “Learn Something Specific in 21 Days”, but they never read Code Complete or The Pragmatic Programmer. They never bother to learn any new language. If they can apply their single, blunt instrument to a problem, that’s what they do. Of course, some also go on to complain about how boring their work is.

And no, they don’t read blogs about programming. They probably do read Slashdot, but not this, or joel’s blog, or WTF…

Well done, totally right.

The nastiness you got from thedailywtf community was wrong. I’m thinking of either writing an open letter to the dailywtf community or a satirical open letter to Jeff Atwood from the dailywtf community. Anybody want in?

I like to think I’m a good programmer. Not infallable, but good. I think things through, I do my best not to repeat myself, I write clean, concise, maintainable code as best as I can.

I work with people who write code that qualifies as WTFery on a daily basis. A special breed:

$line =~ /(.{1})(.{15})(.{1})(.{3})(.{1})(.{2})(.{2})(.{8})(.*)/;
my ($v1,$v2,$v3,$v4,$v5,$v6,$v7,$v8,$v9) = ($1,$2,$3,$4,$5,$6,$7,$8,  $9);

As well as 30-40 line recreations of language-provided subroutines.

I’d like to take them under my wing, teach them what I know, and have them learn from me as I did when I began programming, and as I continue to do when I visit my local programmer group meetings and learn from programmers smarter than I, but I run into one horrible, horrible obstacle: the programmers I work with are of the “infallable” variety. They genuinely believe they’re smarter, and better programmers than I am, and that I just do things “differently” than them.

“Individually, personally, we have to do more to reach out to these developers: mentoring, apprenticeship, user groups, peer pressure, code reviews, etcetera.”

I have come to the conclusion that there is a significant number of developers who just don’t care – people who are not conscientious about their craft and aren’t motivated to do anything beyond the bare minimum.

They want to clock in, clock out, and collect their generous paychecks.

If it “works”, so much the better. If it doesn’t? Well, they’ll worry about that when a bug is assigned to them.

So, what then?

Jeff, thank you for this comment: http://listics.com/20070208903#comment-22188