Eric Ries comes up with four reasons for the enormous success of PHP (I’m assuming “won”, as used in FTW):
Speed of iteration … Writing code with PHP, even though the language is crufty, feels fast, because of the tight write-test-debug loop.
Direct mapping of outputs to inputs … At IMVU, when we’d hire a new engineer, we could get them to ship code to production on their first day, even if they had never programmed in PHP before. That’s simply impossible on most platforms.
Incoherent (but huge) standard library … it was a huge boon for developers. It meant that the PHP brand stood for the same set of tools always and everywhere.
Bad OOP support … The platforms that win on the web are those that mirror its fundamental structure, not those that try to morph it into a more traditional “elegant” shape.
So let’s start with these four and try them out on a language that goes by the name Java. Why Java?
I started working with Java very early, back then one of the most attractive features was speed of iteration. That was years before the J2EE OSGi SCA Grid IoC XML-driven deployments of today, quite a different landscape. Speed of iteration was a major win back then, so were Servlets with their direct mapping of outputs to inputs and relatively easy to grasp API. Coming from C++ and VB, the Java standard library was a thing to behold. And I know some people who simply couldn’t use a language that had no multiple inheritance or templates, but I really appreciated Java having less OO than C++. I even argued not having these features was a good thing.
So back then I would have considered these four characteristics good arguments in favor of Java, and I would add portability. Not in the sense of “write once, run everywhere”, but “write on my PC, run on my server”. That kind of portability is also something that works very well for PHP. Of course much have changed since then in the land of Java, but what did the characteristics that make or break a language change?
What defining characteristics make your favorite language a winner?