Slashdot Mirror


Fighting the Culture of 'Worse Is Better'

An anonymous reader writes: Developer Paul Chiusano thinks much of programming culture has been infected by a "worse is better" mindset, where trade-offs to preserve compatibility and interoperability cripple the functionality of vital languages and architectures. He says, "[W]e do not merely calculate in earnest to what extent tradeoffs are necessary or desirable, keeping in mind our goals and values -- there is a culture around making such compromises that actively discourages people from even considering more radical, principled approaches." Chiusano takes C++ as an example, explaining how Stroustrup's insistence that it retain full compatibility with C has led to decades of problems and hacks.

He says this isn't necessarily the wrong approach, but the culture of software development prevents us from having a reasoned discussion about it. "Developing software is a form of investment management. When a company or an individual develops a new feature, inserts a hack, hires too quickly without sufficient onboarding or training, or works on better infrastructure for software development (including new languages, tools, and the like), these are investments or the taking on of debt. ... The outcome of everyone solving their own narrow short-term problems and never really revisiting the solutions is the sea of accidental complexity we now operate in, and which we all recognize is a problem."

14 of 240 comments (clear)

  1. The whole point of C++ was its C compatability by Viol8 · · Score: 4, Insightful

    Back in the day. The clue is in the name. If it wasn't compatible but simply similar then it would have been called something else. Java perhaps.

  2. Easy to say when not dealing with customers by NotDrWho · · Score: 5, Insightful

    It's easy for a programmer to say "We should stop worrying so much about compatibility and interoperability" when they don't have to deal with customers, support, or actually selling the end product. When a customer calls up and says, "Hey, how come this new version of Windows doesn't work with any of my old Windows software?" you can't just tell them "Because our programmers thought it was better to get a fresh start."

    --
    SJW's don't eliminate discrimination. They just expropriate it for themselves.
  3. Re:New langauge by NotDrWho · · Score: 4, Informative
    --
    SJW's don't eliminate discrimination. They just expropriate it for themselves.
  4. Huh by JanneM · · Score: 5, Insightful

    So.. preserving backwards compatibility and interoperability across versions is a bad thing? If he's unhappy with the feature set of C++ (and I wouldn't blame him for that), then how about simply picking up a different language instead? That's what a new, non-compatible C++ version would be in any case.

    Look at how great it has worked out for Python. It's been six years since the only mildly incompatible version 3 was released, and it has still not managed to become dominant over the legacy version 2. A more radical break would almost certainly have had an even tougher road ahead.

    --
    Trust the Computer. The Computer is your friend.
  5. I disagree with the premise... by QuietLagoon · · Score: 5, Insightful
    "Worse is better" is little more than Chiusano's opinion of what is happening.

    .
    So he thinks that compatibility and interoperability are not features which he likes. OK, I'm OK with that.

    However, that is his opinion, nothing more, nothing less.

    There are reasons why interoperability and compatibility are desired. It is not the easiest path to provide those characteristics, on the contrary, it is easier to just say, ~screw compatibility, screw interoperability~, and you'll probably finish your task more quickly.

    So then the question becomes, why do people invest extra effort in order to assure interoperability and compatibility?

    ...which we all recognize is a problem....

    And now he presumes to speak for everyone....

    Overall it sounds like he just got out of a bad meeting in which someone told him that his opinions are not worth the air used to utter them, and now he's trying to convince the world that he is right and the world is wrong.

  6. Yes, but you are even worse. by fisted · · Score: 4, Informative

    And that compatibility still is important today. For one thing, APIs can be written in C (starting with the POSIX API) and be used by programs written in either C or C++ or in language X, or language Y, or language Z.

    FTFY. This is due to calling conventions, not due to a 'language compatibility'

    Here's an idea: if you don't know shit about C++, don't post shit about C++?

    Here's an idea: If you don't know shit about the basics of programming, don't post, like, at all. Especially avoid calling others idiots when you're at the same time making clear you're even less competent.

    1. Re:Yes, but you are even worse. by __aaltlg1547 · · Score: 4, Insightful

      Backward compatibility isn't just important, it's paramount. It's not 1957.

      Nobody wants to upgrade their build system to a newer version of the language and find out it breaks the code all over the place. Nobody has time for that. New versions of the same language need to ONLY
      (1) fix errors
      (2) add new features that you invoke with new code that would be rejected by the old version's parser.
      If you change how old code will behave, that's not a new version. It's a new language.

      Likewise other systems, such as operating systems and even user-exposed interfaces, because ultimately programs depend on them working a certain way.

    2. Re:Yes, but you are even worse. by jythie · · Score: 4, Insightful

      This is why Python3 is still struggling. It is great if you are writing new stuff from scratch, but a real pain if you have an existing code base that is doing work. Incompatible compiler changes increase the barrier to upgrading since developers (and schedules) need an increasingly large incentive to justify the time and energy, esp when even minor (supposedly compatible) updates are already risky and potentially time consuming endeavors.

  7. Simple != worse by pla · · Score: 4, Insightful

    Once upon a time, I wrote "clever" code. Truly beautiful, almost poetic in its elegance. Note I said "elegance", not "simplicity".

    I don't know who to credit for this (probably read it on Slashdot), but a single perspective completely changed the way I view coding:
    It takes substantially more effort to debug than it does to write code in the first place. If, therefore, I write code as clever as I possibly can - I can't effectively debug it (without investing far more time than I should) if something changes or goes wrong.

    Now, that doesn't mean "worse is better"... I can still produce good code; I can even still write the occasional clever function when performance demands it. But for the 99.9% of code that has almost no impact whatsoever on performance, I can just say "if X then Y else Z" rather than using cool-but-cryptic bitmasking tricks to avoid executing a conditional instruction. And hey, whaddya know, I can actually read it at a glance six month later, rather than praying I didn't forget to update my comments.


    On the flip side of this, a few weeks ago I helped a friend put together a spreadsheet with a few complex formulas in it. I love me some IFSUMS, arguably the best new feature of Excel in the past decade. Note that clause, "in the past decade". This weekend, she called me because her nice helpful spreadsheet wouldn't work - On Excel 2003. It seems that while 2003 has IFSUM, MS didn't add IFSUMS until 2007. The choice of one seemingly harmless backward-compatibility-breaking function made the whole thing useless in a given context. Now, in fairness, I can hear you all screaming "just upgrade already!"... But in the real world, well, we still have people using Windows 95.

  8. "GNU C compiler" versus "GNU Compiler Collection" by Millennium · · Score: 4, Informative

    I don't see what a compiler's ability to do with other formats/languages has to do with a different format/language.

    Ordinarily, it doesn't. But the thing is, there are two things called GCC: the GNU C compiler (which handles C) and the GNU Compiler Collection (a set of compilers which, though they share the same backend, are still separate entities).

    GCC, the C compiler, cannot handle Fortran. GCC, the set of compilers, can handle it via g77 (the old compiler) or gfortran (the new one), but the C compiler can't. This is considered the traditional way of doing things.

    What makes C++ different from many languages is that its maintainers insist that C++ compilers must be able to handle C code. It's not enough to have a different compiler in the set, the way GCC does: it must be doable with the C++ compiler itself, in the same application. And so g++ can do it too, because that's what the standard requires of it.

    That's what makes the difference. Ordinarily, as you say, a compiler's ability to handle multiple languages shouldn't affect any of the languages in it. But C++ was defined in a way that not only makes those effects possible: it makes them mandatory.

  9. Re:Since when... by mcgrew · · Score: 4, Insightful

    Since when has slashdot ever been news? Its masthead may be "news for nerds" but its news is seldom very new. It's about seeing one's fellow nerds' views on that topic.

  10. Backwards Compatibility - Backward Languages by DavidHumus · · Score: 4, Insightful

    So far, I don't think I've seen a single comment here that got the point of the essay.

    He's not talking about incremental "improvements" to existing languages, he's pointing out that the common attitude of "we'll make this language easy to learn by making it look like C" is a poor way to achieve any substantial progress.

    This is true but everyone who's invested a substantial amount of time learning the dominant, clumsy, descended-from-microcode paradigm is reluctant to dip a toe into anything requiring them to become a true novice again.

    I've long been a big fan of what are now called "functional" languages like APL and J - wait, hold on - I know that started alarm bells ringing and red lights flashing for some of you - and find it painful to have to program in the crap languages that still dominate the programming eco-system. Oh look, another loop - let me guess, I'll have to set up the same boilerplate that I've done for every other loop because this language does not have a grammar to let me apply a function across an array. You want me to continue doing math by counting on my fingers when I've got an actual notation that handles arrays at a high level, but I can't use it because it's "too weird". (end rant)

    There have been any number of studies - widely ignored in the CS world - going back decades (see this http://cacm.acm.org/magazines/...) - pointing out how poorly dominant programming memes mesh with the way most people think about problems and processes. Meanwhile, the 1960s called - they want their programming languages and debugging "techniques" back - "printf", anyone?

  11. Re:New langauge by Wootery · · Score: 4, Insightful

    The two languages are not incompatible

    That's vague. The real question is whether C++ is a strict superset of C. Answer: it is not.

    Some constructs valid in C are invalid in C++. Some valid C code is also valid C++, but behaves differently.

    See Section 1 and Section 2 of this Wikipedia article.

  12. silliness by silfen · · Score: 4, Interesting

    To accuse the C++ community of not having engaged in "reasoned discussion" about backwards compatibility is silly. Chiusano may not like the tradeoffs that C++ makes (I don't), but they are the result of a glacially slow and tedious community process and discussions. Whatever C++ is, it is by choice and reflection. Furthermore, "worse is better" refers to keeping things simple by cutting corners, and you really can't accuse C++ of keeping things simple.

    (Charges about too much backwards compatibility are ironic from someone who promotes Scala, a language that makes many compromises just in order to run on top of the JVM and remain backwards compatible with Java.)