Why Do Programming Languages Succeed Or Fail?
magicmat writes "UC Berkeley EECS graduate researchers Leo Meyerovich and Ari Rabkin have compiled an interesting data set on the sociological aspects of programming language usage and adoption. 'Socio-PLT' is the result: compiling survey results from Berkeley's recent 'software engineering' massive online open course, SourceForge, and two years of The Hammer Principle online surveys, they have discovered some interesting phenomenon about what we, as programmers think about our languages, and why we use them. You can head over and explore the data yourself using cool interactive visualizations, and even fill out a survey yourself to have your say."
Because programmers use them or they don't.
The main factor in determining whether or not a language succeeds is the quality of its creator's beard:
http://entertainment.slashdot.org/story/08/04/29/181249/facial-hair-and-computer-languages
Programming languages must have a certain elegance, a flow or symmetry that entices the mind. Pascal/Delhpi have always done that for me. She's not the hottest girl at the dance, a little older and not dressed to the 9's, but she's the one I'm taking home that night. It's entirely personal, and I could'nt care less what others use.
Much like Ruby is called "Perl's younger, much prettier sister".
Dear Perl,
Look, I know that we were an item for quite a few years.
You were my one and only. My true love.
But I've gotta admit, when I saw your younger sister Ruby a few years back... well, I thought she was hot. But of course, she was too young then so I stayed away from her.
Now, more recently I have to confess that I went out with Ruby for a few dates and believe me, she is plenty mature now!
Not only that but her library seems somehow more complete than yours and certainly better organized. And her object oriented features - OO la la! Look, you're a great gal, but you're certainly not anywhere near as well endowed in THAT department.
And now that Ruby's got transportation (ok, so she likes to ride the rails) we're really getting around.
So, dear Perl, I have to tell you that it's over between you and me. From now on it's me and Ruby.
Please don't take it too hard. Maybe you'll find someone else after you're makeover.
Unlike a girl, a good programming language is good for more than one thing.
If you have more than one girlfriend, then you run into the same problems as SMP and multi-threaded programming: resource contention, careful locking, semaphore signalling overhead, etc. Woe betides you if one finds cosmetics stuff from another on the wrong stack in the bathroom.
Spin locks are, quite literally, a bitch.
Schroedinger's Brexit: The UK is both in and out of the EU at the same time!
Programming languages must have a certain elegance, a flow or symmetry that entices the mind. Pascal/Delhpi have always done that for me. She's not the hottest girl at the dance, a little older and not dressed to the 9's, but she's the one I'm taking home that night. It's entirely personal, and I could'nt care less what others use.
Much like Ruby is called "Perl's younger, much prettier sister".
Dear Perl,
Look, I know that we were an item for quite a few years.
You were my one and only. My true love.
But I've gotta admit, when I saw your younger sister Ruby a few years back... well, I thought she was hot. But of course, she was too young then so I stayed away from her.
Now, more recently I have to confess that I went out with Ruby for a few dates and believe me, she is plenty mature now!
Not only that but her library seems somehow more complete than yours and certainly better organized. And her object oriented features - OO la la! Look, you're a great gal, but you're certainly not anywhere near as well endowed in THAT department.
And now that Ruby's got transportation (ok, so she likes to ride the rails) we're really getting around.
So, dear Perl, I have to tell you that it's over between you and me. From now on it's me and Ruby.
Please don't take it too hard. Maybe you'll find someone else after you're makeover.
After a few go-rounds, you then discover she has 6 different STDs and is intellectually about as deep as a summer puddle in a Florida parking lot.
Yep. Sounds like Ruby.
Sure, sure. But Perl will fuck you back. Big time.
Because those are the only two options.
Give me Classic Slashdot or give me death!
Otherwise it fails. Two of the most popular languages in existence are Visual Basic and PHP. Math folks and programmers tormented by the hobgoblin of consistency hate both languages. Guess what? It doesn't matter.
Sure, they're inconsistent, oddly constructed and don't support polymorphism (which describes many programmers too, for that matter). Nevertheless, you can get something *done* in jig time and move on with your life. They are languages that are not about the language but the task. In that sense, they perfectly suit the human mind and so they get used again and again.
The big fail of programming languages generally is that nobody thought to combine ease of use with scalability. A programming language should make the most frequently done things trivially easy (e.g. file i/o) and less frequently done things (e.g. serializing and deserializing) possible.
My favorite example of a programming language fail is Powershell. The language is very consistent. It's a consistent pain in the ass. It's picky, prissy and everything has to be done "just so." I use it every day, and I'd like to condemn the developers to a hell where they had to do real system administration with it for eternity.
Please do not read this sig. Thank you.
Some languages fail simply because the creators have chosen stupid names in the age of Internet searches: try searching for one liners or tutorials in 'R' or 'Go' or 'D' and you'll find tons of irrelevant links. I'll make an exception with C since there's simply more stuff out there about the language than about any other use of the letter. Now Brainfuck, that's a perfect name for a language.
Non-Linux Penguins ?
English isn't the world's most spoken language (when you include secondary speakers) for its elegance, consistency or expressiveness. It's a combination of history and politics and power and isolation and culture and grabbing concepts and words and pronunciation from other languages. Languages are the same, some exist practically by being first. Some exist only because they've had large companies like Sun or Java backing them. Others survive because they've been isolated cornering a specific need in finance or science or academia. I remember Java 1.0 and very early Javascript, that the world is now full of Android and AJAX apps is nothing short of a freak of history. Trying to analyze it from the language's qualities alone is never going to give meaningful results.
Live today, because you never know what tomorrow brings
You got it spot on. One thing you didn't mention was critical mass - once enough people are using a language others will come along and try it (or be forced to use it at work) no matter how good or bad it is and once they're comfortable with it they'll probably carry on using even if there are better alternatives because a learning curve is always more hassle than staying with what you know.
Since PHP and Javascript stubbornly remain popular.
One distinction is whether the language was designed to meet a practical need, or to prove an abstract point in computer science. Plus, these days, the API is probably more important than the language - its certainly more work to learn a new API than a new language.
PHP is a crap language, but it gets the job done, makes it easy to programatically generate HTML and comes with a humungous library of useful functions. Plus, its widely available on commercial web-hosting services. When I tried some Python (after forcing myself to stop worrying and get past the 'significant whitespace' thing) , I found I wanted an XML/XPath/DOM library but all I could find were several half-finished attempts and a lot of discussion about what would be a suitably "Pythonesque" XML API (the well-defined standard DOM API sounds good to me). Maybe I was unlucky (Python isn't exactly unsuccessful) but that would have been a no-brainer in PHP, Java or C.
Likewise, Javascript is the only game in town for scripting web pages and has become almost platform-independent. It also became joined at the hip with the HTML DOM.
Java also had the big practical plus of being almost platform independent - and again now has a huge array of APIs that programmers have spent time learning.
Or look at C vs Pascal. VAX Pascal, Turbo Pascal, Delphi et. al. were quite successful because they each extended the language in proprietary ways, but standard Pascal was useless for anything other than teaching algorithms because it didn't have any practical API to speak of (you couldn't even open a named file within a Pascal program - that had to be done externally). C, on the other hand, always had a "de facto" standard library consisting of the subset of the Unix API described in "The C Programming Language", full of really useful utility routines for strings, file handling, output formatting, searching etc. You could do a lot in standard C without tying yourself to a particular dialect or platform, and the pre-processor let you #ifdef your way out of any incompatibilities that you did encounter.
C++ - a can of worms which only a language lawyer could love - probably hit the big time because of MS Visual C++ and the MS Foundation Classes. That and the fact that C programmers didn't think they had to learn a whole new language (see earlier comment about cans of worms).
Basically, don't expect your mathematically elegant new language (with no variables, who's only operator is 'is a subset of' and which uses UNICODE accents and ligatures to increase its expressivity) to take off unless it has POSIX regexps, bindings to MS Access and a WIndows application framework.
In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
A language/methodology can catch on fast if it is the price of entry to a hot field. Broad, long-term popularity requires finding applications outside the original field.
Objective C is the current price of entry for iOS development. It will stay around as long as Apple allows no alternatives, but is unlikely to grow outside that niche.
OOP was the price of entry for GUI toolkits. It has since proved its worth as a general structure and analysis method.
Java started out as the price of entry for applets. It eventually settled in as a portable platform for enterprisey stuff.
Lisp was the price of entry for AI. It died back when strong AI faltered.
Functional programming may yet become the price of entry for reliable concurrent programming.
To a Lisp hacker, XML is S-expressions in drag.
I was one of those imbeciles that ridiculed the whites space
I still ridicule the white space.
White space is brilliant!
Formatted code is brilliant. Code that can't be copy and pasted reliably is still something only an imbecile could like.
if something:
do something
a bunch of stuff goes here
blah blah blah
and this is after the if clause... for now
is not easier to read than
if (something)
{
do something
a bunch of stuff goes here
blah blah blah
}
and this is after the if clause... and will reliably stay that way
And if the code with {} gets mangled by some editing, you just highlight it and reformat, and its back as it should be. Mangle the indenting/formatting in python, and you have to re-validate the semantics of the code.
A few {} do not make it harder to read, the code is trivially easily to prettify with automatic formatting (nobody has to look at unindented or all-on-one-line code in a {} language even if it was originally written that way), and I have found the structure is much more resilient to editing. If I'm editing away in something like notepad and delete the "blah blah blah" line in python there are good odds the "and this is after the if clause" will end up appended to the "a bunch of stuff goes here line" and then I'll hit return and have to think about whether its part of the if clause or not.
In C worst case, the } gets appended to that line and I press return to pop it down again, knowing that its closing the block.