• bvs23bkv33 (unregistered)

    cobol wtf's will be too long for this site

  • ray10k (unregistered)

    Can I buy these guys a drink or two? They sound like they aren't quite meeting their daily alcohol requirements for dealing with this stuff.

  • I'm not a robot (unregistered)

    So during that whole time, not one person saw it, thought "WTF is a flobble?" and actually looked at it? Yes, it's still dumb to name it that, but anyone with the slightest amount of curiosity would have figured it out, which implies that the rest of the developers were all mindless dead-eyed code grinders.

  • johnny b mediocre (unregistered)

    I had a guy once who, if you didn't stop him, would name variables "oatmeal" or "granola."

    He doesn't work here anymore.

  • (nodebb)

    So they had actually reverse engineered it correctly then?

  • Tim (unregistered) in reply to johnny b mediocre

    Bet he was fired for repeated misconduct - he sounds like a cereal offender

  • someone (unregistered)

    Is there some significance to the word "Flobble" I'm missing, or is it just a nonsense string of letters?

  • (nodebb) in reply to someone

    The fact that it's a nonsense string of letters is exactly its significance.

  • JG (unregistered) in reply to someone

    Flobble comes from a early 1950's BBC TV Children's show called The Flower Pot Men.

  • YoJambo (unregistered) in reply to I'm not a robot

    Something that never ceases to amaze about the response threads around here; there's always some narcissist tosser, convinced of his (I'm going to go out on this limb and guess male) own amazing ability, who concludes that everyone at the company in question is a "mindless dead-eyed code grinder" or other such.

    Their precious ego needs to be inflated, but they're anonymous, because they know that they've got zero context, zero knowledge, and no idea what they're talking about. Here's to you, "I'm not a robot"; you're a superciloius dickhead who knows he's wrong, and so does everyone else.

  • YoJambo (unregistered)

    Darn spelling :(

  • Andrew (unregistered)

    Flobble had comments that were useful and up to date, despite being a decade old? And the system didn't behave contrary to what was described in those comments?

    Luxury.

  • Raj (unregistered) in reply to urkerab

    Hardly reverse engineering since they have the source code.

  • Harrow (unregistered) in reply to Raj

    What would you call it then? Reverse engineering means taking something that works and discovering how and why it works by examining the thing itself. Documentation is anything that reduces the need for reverse engineering.

    If you believe that the source code alone constitutes enough documentation to enable understanding how and why a program works, then you are not ready to work without close supervision.

  • I'm not a robot (unregistered) in reply to YoJambo

    If you think the willingness to "investigate" something that looks weird (by which I mean "open up the file and look at it for ten seconds") constitutes "amazing ability", that says more about you than me.

  • iWantToKeepAnon (unregistered) in reply to I'm not a robot

    So during that whole time, not one person saw it, thought "WTF is a flobble?" and actually looked at it?

    This sounds like one of those projects with the star "inheritance" graph w/ thousands of classes. I very much doubt they read out the list of classes rather than searched for the standard naming convention "Example".

  • I'm not a robot (unregistered) in reply to iWantToKeepAnon

    Possibly. I'd still have thought someone would have stumbled upon it at some point during their work on the application though, even before the described incident.

  • (nodebb) in reply to I'm not a robot

    I'd still have thought someone would have stumbled upon it at some point during their work on the application though, even before the described incident.

    So many developers show an amazing lack of curiosity. They just do what they think is the minimum to solve their immediate problem, and not one whit more.

  • (nodebb) in reply to I'm not a robot

    So during that whole time, not one person saw it, thought "WTF is a flobble?" and actually looked at it?

    This is TRWTF here. They opened source to see how various message worked. They opened "a few semi-related examples" but didn't look at most or all -- especially when they already understood that each had "a different set of functions being implemented and a different set being overridden."

    When "everything" is different between ten classes inheriting the same parent, you have to ask why and look at every example. Even if there are 100 message types, it will only take a single day to open each, spend 5 minutes looking at it, and deciding whether it will be useful information. If they did that alphabetically (probably best systematic method), they may have been done before lunch.

  • Valhar2000 (unregistered) in reply to YoJambo

    FYI: It is very obvious that you are accusing others of behaviors you yourself engage often.

  • Donald Knuth (unregistered)

    I suggest multiple inheritance is the result of what happened when someone thinks they are clever and it seems cool. Fuck those people.

  • Fedaykin (unregistered)

    While there certainly appears to be some real WTF in the code base, the Real WTFs Here:

    • Calling an event driven architecture bad because "interested parties" might not register. While this particular implementation may be misused or otherwise shite, an event driven architecture is a very good tool but of course must be used correctly.

    • It taking that much effort to figure out how and why an event message worked. The place needs higher quality devs. Sounds like maybe the senior people are leaving because they are tired of hand holding lazy and/or incompetent juniors.

  • (nodebb)

    From the looks of it, this is a problem with "information hiding" to some extent. Someone (with good intentions to be sure) has hidden all the functionality in their private routine/class/etc. and then tells everyone to use it. Documentation, we've heard of it, but it isn't here. The Flobble "example" is nice but if people are struggling to find information, it is difficult to get to.

    Add upon the problem is that several layers are added onto the original class and each one tries to be useful (see "inner platform effect"), but rarely is this the case. This goes on forever and everyone gets more frustrated as time goes by, and the dependency graph grows lines exponentially.

    The problem: Languages (C++ and Java) encourage this with ever more complex language features to enable more of it. (SIGH)

  • medievalist (unregistered) in reply to Harrow

    Raj: Hardly reverse engineering since they have the source code.

    Harrow: What would you call it then?

    Me: reading, followed by reimplementing

  • Just a robot (unregistered)

    Is the WTF here that the developers are (1) working on a system that they don't understand and (2) don't have the time to understand and document, leading inevitably to (3) screw-ups like the one described here? 'cos that sounds like more of a WTF than a whimsical naming decision.

    Let he who has never called a trivial variable "xfactor", or initialized a magic value to "0xdeadbeef", in a non-critical part of the code cast the first stone. (Oh, that's you, is it? You have a great time with your professional sour-pussery, y'hear? I'll just be over here, where we strike a balance between work and play.)

  • Sole Purpose of Visit (unregistered) in reply to herby

    Or not.

    Download the entire source tree from the repository and find/grep all instances of the base class. Worrying about whether the specific leaf class is called "Frobble" or "Example" is essentially missing the point in a very big way. As several people have mentioned, above.

    It's also a bit disingenuous to complain about an "Inner-Platform Effect" when, no matter how perfectly this might match the rest of the swill in the system, it fairly clearly does not match the problem at hand. Unless "System Message" means something horrible like issuing a "kill -9" type command indirectly via multiple layers. But, if so, this horror is not called out here.

    Nor, in fact, is there any good reason to label each and every message with an (integer?) type descriptor. There's no good reason not to, either. But if you build a sane messaging system in a well-typed environment, I can't see the harm in inheriting from an ABC to a sane set of concrete message types, unless of course you prefer the wholesome fun of a massive switch statement that deals with each and every message id in different ways in different places ...

    ... which is a frequent WTF round these parts.

  • Sole Purpose of Visit (unregistered)

    One more thing.

    "Finally, the new message object was finished. It worked ... although nobody was certain why."

    TRWTF. This means it doesn't work. And specifically not for a messaging protocol. And even more specifically not for a messaging protocol that depends upon a pub-sub model that nobody really has a clue about.

    I presume that Donald Knuth, awaiting moderation above, has emphasised this point:

    "Beware of bugs in the above code; I have only proved it correct, not tried it."

  • Barf4Eva (unregistered)

    It's not because of some single developer calling it flobble. It's because of that AND everything else that defined this particular company, from what I can gleam from the story.

    Had there been a number of other right things going on at the company, flobble would have been a minor annoyance and not a major one.

  • staticsan (unregistered)

    Saw a smaller version of that problem not so long ago. We were using an XML-driven batch system that is actually well documented, but it's so powerful that it's a complete maze for someone to write a new job. Eventually, I went to create an "example" job as a starting point. Then I discovered that another developer had previously done that - but had unhelpfully called it "infinite context". He didn't grasp why that name was not a good choice.

  • löchlein deluxe (unregistered)

    I got as far as "some things had an example class" and fully expected the next sentence to be "of course, many production classes inherited from the concrete example class instead of the abstract base class".

  • siciac (unregistered) in reply to Fedaykin

    Calling an event driven architecture bad because "interested parties" might not register. While this particular implementation may be misused or otherwise shite, an event driven architecture is a very good tool but of course must be used correctly.

    Ah, the classic defense of crap software, "yes, this design is obviously broken, but it's a perfectly good design if you work around the breakage."

    Event buses and such give you the worst of an unversioned API, no source of truth, no guarantees that messages are delivered or that (as you point out) anyone is listening, no guarantee that any actions are taken, no way to detect or handle failure, etc.

    So, you're right, it can be used correctly: delete it and pick the right tool.

  • David (unregistered) in reply to herby

    What do you mean "hidden all the functionality"? They presumably had all the code; if they needed to look at the code for the base classes, it wasn't hidden. Dumping everything in every single subclass would have just produced more cut and paste programming, hiding the functionality of the particular class under the general needs of these messages. Simplicity may have be missed in this implementation, but dumping all the grotty details into every separate message handler wouldn't have made it simpler.

  • gws (unregistered) in reply to I'm not a robot

    Real WTF(tm) detected.

  • Ruts (unregistered) in reply to urkerab

    My thoughts exactly - all that 'expensive reverse engineering' and they hadn't had a simple look through all of the derived class definitions

  • Really (unregistered) in reply to YoJambo

    No, he is correct. The braid dead monkeys tore down the house to find the car keys that were in their pocket. Searching skills are a part of programming, even when things are named very poorly.

  • Logic (unregistered)

    wtf 1. Let one person have all the knowledge of something wtf 2. Let the one person leave without asking for a brain dump wtf 3. You dont read through your own code enough to see a flobble? wtf 4. They didn't just call the guy who wrote it, offer him a trivial(but enough to get him to return an email) consultant payment to point them in the right direction instead of "significant expense" to reverse engineer? He could have cashed a check for just saying the word flobble. I'm sure he would take that deal. wtf 5. "Developers" like this keeping their jobs!

  • (nodebb)

    The real problem here is that nobody RTFM (Read The Flobble Manual).

  • YoJambo (unregistered)

    I stand corrected. There is not just one narcissistic tosser.

Leave a comment on “Flobble”

Log In or post as a guest

Replying to comment #:

« Return to Article