If A is the good, B is the bad and C is the ugly, what does this statement imply? That:

  • C is even worse than B
  • C is something intermediate, not good, not bad
  • C is "outside of the box" and can't be measured on A -- B scale
  • C is good, but low on aesthetics ("ugly"), which lowers its value
  • C is not just bad, but also unbeautiful, which makes it even worse than B


  • The one that triggered that question (link):

    In a good world, this implies that we can effectively find a canonical form. In a bad world, this does not even imply that we can effectively find graph ids. In an ugly world, it implies that there are graph ids in FP, but none of these are of the canonical form kind.

    Here I suppose it means "between good and bad".

  • The place where I first saw these words together, the GStreamer documentation:

    gst-plugins-good a set of good-quality plug-ins under our preferred license, LGPL
    gst-plugins-bad a set of plug-ins that need more quality, testing or documentation
    gst-plugins-ugly a set of good-quality plug-ins that might pose distribution problems

    Here I suppose it's "not on the good-bad scale".

  • Go: the Good, the Bad and the Ugly

    The Good

    • Go is easy to learn...

    The Bad

    • Go ignored advances in modern language design...

    The Ugly

    • The dependency management nightmare...

    Does it actually correspond to "good", "medium", "bad" here? Or is the division into "bad" and "ugly" simply arbitrary?


As was pointed out in the comments, the reference is from the Sergio Leone western 'The good, the bad and the ugly'.

First, as we are the eternal pedants here, it should be remembered that the Italian title was 'Il buono, il brutto, il cattivo'. Now, I'm not going to claim to be a fluent Italian speaker but that's not quite the same thing at all - see here.

However, it's the English translation that has gained traction as an expression. So, in the context of the film:

The Good: The Man with No Name. The hero played by Clint Eastwood

The Bad: Angel Eyes. The bad guy, a killer played by Lee Van Cleef

The Ugly: Tuco. Played by Eli Wallach, certainly no good guy, a crook and probably a nasty piece of work, but a sympathetic character, a likable rogue and comic relief. Probably redeemable in the end.

And that 'lesser evil' is, I think, the key to this usage.

Going back to the OP's context, one of software (an area where I'm on firmer ground), this trinity works well, it's something that we often see:

  • Good code, that we all aspire to, well written, well documented and error-free;
  • Bad code, that either doesn't work or causes more problems than it solves; and
  • Ugly code, the hurried hack that fixes the problem and gets rolled out to meet time and budget but that no-one is proud of.

There's a lot of ugly code out there

  • How would you interpret usage of this pattern in this article? Is division into the two latter groups just arbitrary? – Vi. Apr 11 '18 at 22:13
  • I wouldn't necessarily say arbitrary - that suggests randomness or personal whim, but I would say that the sorting is subjective. The whole piece is subjective; the writer is giving his take on the experience of using the Go programming language: what's good, what's bad and what's ugly. Another writer would probably allocate the issues differently. As an example, the writer classed the Go variable definition method as bad. I'd have put it in ugly, but there are others that really like it and would have added it to good... – PerryW Apr 12 '18 at 23:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.