3 ms·
> the "worse is better" principle that correctness can be sacrified if it makes things too complicated To be clear, in systems designed with the "worse is bett
by jlebar 11y ago
> the "worse is better" principle that correctness can be sacrified if it makes things too complicated
To be clear, in systems designed with the "worse is better" approach, responsibility for correctness can be pushed up the stack, from e.g. kernel programmers to user-space programmers, if doing the Right Thing lower in the stack is hard. The example given in the paper is a syscall being interrupted -- in unix, it just fails with EINTR, and it's the application author's responsibility to retry. (I agree that malloc returning null is similar.)
But worse is better isn't saying that programs shouldn't be correct if it's complicated; it's just a question of where the responsibility for correctly handling API edge cases should lie.
Moreover, if one reads the "worse is better" paper carefully, you'll notice he doesn't say that "worse is better" actually is better, overall. The argument is only that it has better "survival characteristics". Meaning, as I read it, that they can gain and maintain momentum against competitors because they can move faster.
Which, tangentially, is all very interesting to me, because the three modern systems with the best survival characteristics are unix, C, and the web, the latter of which is definitely not worse is better. (However bad you may think the web is as an API, "worse is better" is a design philosophy about giving users simple, low-level APIs, whereas the web is all about high-level APIs where the browser implements lots of logic to prevent you from shooting yourself in the foot.) So maybe we need to reconsider the conclusions of the worse is better paper in light of the giant counterexample that is the web.
- pcwalton 11y agoI'd also add Java, C#, Python, ARM (especially ARM64) and Windows NT as examples of success of better-is-better systems. (Windows NT is somewhat less better-is-better though due to Win32 compatibility.)
- nickpsecurity 11y agoMaybe Python and ARM. Java was a was Worse is Better compromise trying to bring in features from Right Thing languages. Took lots of marketing to make it. C# similarly done with adoption mainly because Microsoft pushed it w/ tooling. They're both Worse is Better candidates. Just not as bad as some others. Modula-3 or maybe Eiffel would be closer to Right Thing examples in that category.