Inspired by inverting HowCanSomethingBeSuperGreatWithoutProducingExternalEvidence. See WhyDoesEvilExist for political parallels. Why are BasicLanguage, VisualBasic, CeePlusPlus and JavaLanguage so popular considering that they are utter and unmitigated crap? * JavaLanguage disproved the "accident of history" theory. * CeePlusPlus disproved the "ease of learning" theory. * DylanLanguage disproved the "algol syntax" theory. Some say it's know-nothing consultants and business hype. ''Others say it's the observers viewpoint that is horrible, not the applications.'' ''I blame the shortage of InteractionDesigner''''''s.'' Especially the "foaming-at-the-mouth" variety. I don't, since programming language design is possibly the only prosperous area of software design. There has never been a shortage of LanguageDesigner''''''s. On the other issue, there certainly have been shall we say ... evangelical language designers, so I'm not sure what foaming at the mouth is supposed to add to it. I don't think it's such a problem that language designers have traditionally been wealthy enough to avoid getting rabies from some pet or stray animal. ---- I suspect that the fact that the above languages were developed and evangelized by companies who were (at the time, at least) major OperatingSystem suppliers (MicrosoftCorporation, SunMicrosystems, and AT&T--even if AT&T wasn't really in the OS business) has something to do with the success of those languages. -- sj ---- One problem is that we choose languages at the beginning of projects before we face the kinds of problems that a powerful language addresses. This has us focus too much on the size of libraries and the quality of tools while we ignore the ability to make long-lived abstractions. I offer as evidence my own switch from Smalltalk-80 on workstations to Smalltalk-V on the DOS PC. I found much to dislike about this new environment the first week. But after that week passed I was living in a world of my own abstractions and found any complaints about Smalltalk-V unimportant. -- WardCunningham ''Good point. Of course, many projects--and many organizations--'''never''' face the kinds of problems that powerful languages address. LispLanguage is wasted on CrudScreen''''''s. SmalltalkLanguage is excellent at them, but when it comes to algorithmically simple tasks such as this, the difference between Smalltalk and VB or Java vanishes (and given the plethora of tools for the latter languages which make crud screen generation easy, the "horrible" languages may have an advantage).'' ''Of course, one of the biggest problems in industrial computing is ''not'' the description of an algorithm or problem to the machine, it's the conversion of vague and ambiguous user requirements into a form that is unambiguous. In other words, the mental gymnastics which occur before you start typing. -- ScottJohnson'' ---- Horrible languages are popular for the same reason horrible genes are popular: they succeed. You couldn't cram a useful Lisp or Smalltalk onto an Altair 8800 with 4K of RAM. You ''could'' cram a useful BASIC onto it, so it became the first high level language for home computers. Even when home computers grew big enough to run other languages, BASIC had an advantage because so many home computer designers and owners had already learned it. C piggy-backed on the success of Unix. C++ piggy-backed on the success of C. Java piggy-backed on the success of C++. None of these languages will win awards for elegance or beauty. All of them had just enough of what a plurality of programmers wanted at precisely the time the hardware they required was affordable to those programmers. Like successful genes, they got the job done and no more. My own programming language history precisely reflects these horrible languages: 1. BASIC - The first language I learned because it came with my computer. 1. Assembly - More efficient than BASIC, but tiresome to read and write. 1. C - Virtually as efficient as assembly, easier to read and write, more expressive than BASIC. 1. Pascal - Much like C but slower. 1. C++ - Because I already knew C and was already approaching an object oriented style of programming. 1. Java - Because I already knew C++, was tired of managing memory by hand and wanted a standardized library. -- EricHodges Your explanation is really a non-explanation that explains precisely nothing. What exactly dictates "what a plurality of programmers want" or when programmers "get tired" of a language's deficiencies? The only thing in your non-explanation that might turn it into an explanation is your implied supposition that programmers will eat up whatever's shoved in front of them, much like a mindless cow or pig has no thought to what exists beyond its immediate sight. Even that's only the beginning of an explanation since all it amounts to is the observation that programming language adoption is governed by Hype and Buzz. A real explanation would need to delineate the rules of Hype and Buzz. -- RK ''C was not shoved in front of me. I read an article in Rainbow magazine that briefly described it as a procedural language like Pascal that could be compiled and I decided I wanted to learn it. C++ wasn't shoved in front of me. I sought it out because I saw that it would simplify my code. Same with Java. Your supposition should not be implied.'' ''I'm unfamiliar with any hype or buzz for BASIC, C or C++. Perhaps you can document that. -- EH'' Java succeeded C++ but it had nothing to do with C++. Java had more to do with Smalltalk than it ever had C++. Your claim that Java piggy-backed on C++ is factually wrong. With the exception of being free and well-marketed, nothing you say about Java explains the success of Java. Smalltalk had automatic garbage collection and a large (and mature) standard library long, long before Java ever was an idea in anyone's head. C was most certainly shoved in front of you. Your reading an article in a trade magazine is exactly its being shoved under your nose. I suppose you would rather the phrase be restricted to meaning 'shipped free with the OS' or somesuch. And even that isn't far from the truth since C was shipped with Unix and Basic was shipped with DOS. If your particular experience conflicts with the vast majorities', it only invalidates the relevance of your experience. -- RK ''C++ had a great deal to do with the success of Java. Java's syntax was lifted from C++, not Smalltalk:'' : "The syntax of Java was chosen to be familiar to C programmers, but direct compatibility with C was not maintained. Java also was specifically designed to be simpler than C++." : -- http://en.wikipedia.org/wiki/Comparison_of_Java_to_C++#Design_aims: ''Hordes of C++ programmers took the path from C++ to Java despite the fact that Smalltalk is less horrible than Java, because Java was less horrible than C++ and the path was so short.'' ''"Rainbow" was hardly a trade journal. It was a hobbyist's magazine for the TRS-80 Color Computer. The C programming language was mentioned exactly once before I decided to learn it. It received a single paragraph in an article about an operating system that was likely to be ported to the Color Computer as part of a review of languages that might be available in the future. The other languages were Basic09 and Pascal. If anything was shoved in front of me, it was Pascal. I'd already heard of it from other magazines and was later required to learn it in my first CS course at university.'' ''-- EricHodges'' Granted. So in that case, what is it that determines language adoption? One thing you almost allude to is a cyclic "silver bullet -> pure crap" psycho-dynamic. Java was initially a SilverBullet to C++'s ills but nowadays it's a big yawn. You mention "frustration" with C++'s problems but you omit that this frustration, like all frustration everywhere, was mounting over time. Probably, language adoption follows TheStructureOfScientificRevolutions, and a new language is adopted for no better reason than that it is new ''at a propitious moment''. If languages are adopted because they are widely marketed (like Java) then one has to ask why they are widely marketed in the first place. Answer: because they are new. Additionally, Java's algol syntax wasn't the big deal you make it out to be since DylanLanguage suffered some kind of ignominious death. Java's static type system and primitive types may have been a factor though. So far we've got: * a programming language stays constant until frustration with it mounts to intolerable levels, * at which point the next new language, * that's sufficiently different, * but comfortably similar * will get adopted. Are we good so far? -- RK Sort of. As I said above, timing is crucial. The benefits of a new language must be within reach of a plurality of programmers for it to gain momentum. That reach is constrained by: * awareness (hype & buzz) * learning curve (how close is it to known languages and concepts) * hardware cost (at one time you had to buy a co-processor to run Ada on a PC) * existing software environment (does it play well with others) There has to be some motivation for change, and frustration is more motivating than curiosity. Java is the most heavily marketed language I've ever seen. I don't attribute that to its novelty; all languages were new at some point. Java was heavily marketed because Sun thought it could take business away from Microsoft by making the desktop irrelevant with applets. The 90s were filled with that sort of thinking. Programmers seek local, not global, maxima. Once they reach a local maxima all of the convenient options are worse. Dylan is Algol-like, but not as C-like as Java. C and C++ programmers gave Java early momentum. It's the same pattern seen in evolution. Each change has to offer immediate benefits over the current state or it will be swamped by the replication of changes that do offer immediate benefits. There's no skipping across less fit states to reach a state more fit than the current one. That's why there are so many "horrible" genes running about. -- EricHodges ---- JanuaryZeroSix See also ReachableUtopia, InsanelyGreat CategoryDiscussion