Settings

Theme

Clever ideas that failed (2010)

yacoset.com

159 points by walrus 8 years ago · 26 comments

Reader

elvinyung 8 years ago

"And, behold, I will deliver you up to the programmer tendency to build overelaborate castles of abstractions."

--- King James Programming (http://kingjamesprogramming.tumblr.com/post/136036727910/55-...)

nikita2206 8 years ago

The first one is basically the messaging system and a smart broker. I’m not aware of any brokers that would take into account how busy a particular node (they usually just use round robin approach) but surely the concept you outlined is far from being a definition of over-engineering, cron is almost always worse because it is hardly scalable (it is with some crutches and until some point when it becomes unscalabel again, and it introduces a consistent delay).

  • elvinyung 8 years ago

    It's less of a message broker and more of a scheduler, although considering that both of them have some kind of queue at its core, the distinction is probably more superficial than it seems (a FIFO job queue is basically a kind of scheduler).

    Spark has a scheduler that takes data locality into account (although I don't have a ton of experience with it and have no idea how well it works on a fine-grain scale). That itself is probably inspired from Borg and MapReduce, both of which have some kind of data locality-based job scheduling logic.

dankohn1 8 years ago

This is superb. YAGNI may have it's own Wikipedia entry, but that doesn't mean that we remember it when a brilliant idea comes to mind.

https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it

  • senatorobama 8 years ago

    All hail YAGNI, the god of code.

    • fiddlerwoaroof 8 years ago

      I find that YAGNI is usually used to justify hacking something together without thinking about the design of the system you’re working on.

      • syllogism 8 years ago

        Yagni is a duality though (like a trinity, but two). You've just met Yagni's other face, You Are Going To Need It.

        • TylerE 8 years ago

          An important corollary to this is "0, 1, many".

          Any time you are storing data, the acceptable number of items to handle are none, exactly one, or a number limited only by machine resources. Don't design a container to hold, say, up to 5 items.

          • 0xcde4c3db 8 years ago

            On the other hand, instantiating/specializing a container to hold up to 5 items can be a perfectly reasonable thing to do, depending on the application. It might be a design requirement that a safety-critical program never has to restart due to heap fragmentation, for instance.

          • always_good 8 years ago

            I don't understand. I would just about never want to use an unbounded buffer, for example, for a channel.

            • ComputerGuru 8 years ago

              Yes but that is an artificial limit and not an architectural limitation. i.e. a feature added to code that was once / would have been infinite otherwise.

      • newfoundglory 8 years ago

        You sound lucky, not to have tried arguing someone down from building a platform that would be able to implement both the system you're working on and any related hypothetical future systems as well.

    • nurettin 8 years ago

      In the beginning, KISS and YAGNI created DRY, but it was corrupted and gave birth to DIY and NIH.

pram 8 years ago

Most of these sound awful to begin with, except the first maybe. Not to insult this guy, but people who force ego projects like these in a company quickly end up looking like a charlatan.

pier25 8 years ago

> "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."

This is brilliant.

  • smsm42 8 years ago

    Twice is extremely optimistic though... Especially if you give it a couple of years to forget your original thinking.

  • nurettin 8 years ago

    This is why people write tests.

  • jorjordandan 8 years ago

    It is brilliant... but I think it's a false dichotomy. I'm sure code can be clever and easy to debug. If it's designed in a way that is impossible to debug is it really that clever? I've been using react and redux a lot lately, and the design patterns make the code much easier to debug, and I'm not experienced enough (and probably not even clever enough) to have written them myself. It's like saying that smart people always use big words and hard to parse sentences - it's more of a display of cleverness than actual cleverness.

    • markbnj 8 years ago

      There's probably a specific name for this construction, but I don't know it. I'd place it in a category of statements that are not meant to be read as literally true in all cases, but use comedic exaggeration as a warning against a common misstep.

    • digsmahler 8 years ago

      In my circle of peers, and perhaps beyond, we use "clever" as a pejorative. It roughly means what you said in the last sentence, "more of a display of cleverness than actual cleverness." In other words, calling a piece of code clever, indicates that it was made too complicated to easily grok. We also have an explicit goal of making code not clever.

n3d1m 8 years ago

The site responsiveness is questionable. Maybe invest some time in making in nicer looking and more responsive?

  • kornish 8 years ago

    YAGNI.

  • matte_black 8 years ago

    By the time most people realize the site is not responsive or nice looking, they have will consumed about 80% of the content they will ever consume on it. No point in making it more responsive. It’s a diminished return.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection