Good and successful are not the same! Success comes from:
Being the only language suitable for a specific problem
Personal preference (no accounting for taste)
Good development environments
Fast compilers (not necessarily a language issue!)
A massive ecosystem (like NPM or Maven or Pip or Gems)
Patronage (support from a government or big company)
“Everyone else is using it”
“The boss made me use it”
Economics and Inertia — “we already invested too much in this to change”
Laziness — “I’m too tired to learn a new language”
Exercise: What else can you think of that makes people want to use a particular language?
There are countless numbers of ways to measure popularity! You really can’t make popularity statements without stating your measure. Then people will argue whether your measure is even valid.... Nevertheless, it’s fun to look at this stuff from time to time.
RedMonk has a language ranking scheme that combines pull requests on GitHub and questions on StackOverflow. (One could argue that this measures how confusing a language is too...maybe all those StackOverflow questions are all about wtfs.) Here is the ranking from June 2017:
RedMonk gives these rankings:
Another ranking system, by Tiobe, ends up with a radically different top 20. They say: “The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings.”
Here is TIOBE’s top-20. Pretty different than RedMonk’s, right?
10 Assembly Language
13 Delphi/Object Pascal
16 Visual Basic
18 Objective C
But what makes a language popular? MPJ tells us:
Understanding Evaluation Tradeoffs
You can’t have everything, it seems:
The expressive power of dynamic typing, polymorphic type systems, functions as first-class values, higher-order functions, and closures can sometimes impact performance.
Automatic garbage collection saves billions of dollars in programmer time, but isn’t always a good idea in embedded, life-critical, real-time systems.
A language may be wonderful and amazing and increase developer productivity, but if no talented people are out there that know the language, how will you hire the best team?
Languages that are intentionally designed to be horrible (Brainfuck, Java2K, Malbolge, etc.) have some intellectual and educational value (and offer amusement).