RedMonk just published their latest survey of Github’s most popular languages, and given Github’s continuous growth in popularity, they are worth a look.
Here are the results at a glance:
- Javascript is seeing a consistent and serious growth.
- Ruby is in sharp decline.
- Python is showing a decline as well, although not as severe as Ruby.
- Java is showing some growth, and it’s also the only JVM language in the top 12 listed by Red Monk.
I’m going to go out on a limb and predict that Python is being replaced by Go. I don’t have a lot of information to back up this prediction except that most of the positive articles I read about Go are written by Python developers, and a lot of them say that they are now actively migrating their code base from Python to Go. I don’t see as much enthusiasm for Go from developers using statically typed languages, probably because of Go’s antiquated type system (which is still a big step up from Python, obviously).
It’s interesting to see Java continue to grow twenty years after its introduction. I think this constant growth is fueled by the language’s remarkable versatility and its ability to adapt to new technologies but also driven by a series of constant popularity boosts such as Android five years ago and Java 8 this year.
I’m surprised not to see Groovy in this top 12 of languages, since it’s usually acknowledged as the second most popular language on the JVM and I expected its popularity grow thanks to Gradle, but this doesn’t seem to be enough to crack the top 12 on Red Monk.
Update: Discussion on reddit
#1 by huhwhat on May 3, 2014 - 11:11 pm
Go’s type system is not “antiquated”. It’s just made simple, and by purpose. I think the purpose was to stay as near to C as possible but still give some tools for stable APIs. It’s not exactly duck typing, but pretty near. And it works in my experience very very well.
#2 by vincent on May 4, 2014 - 4:29 am
One point that I would like to raise here is that when you add one of the increasingly popular front end frameworks such as twitter Bootstrap or Zurb foundation to say, a Rails app, your project is seen by Github as more than 50% JavaScript, even if you wrote none of it yourself.
#3 by Dan on May 4, 2014 - 7:45 am
Python and Go do not have cross purposes imo. I mean obviously to the people who were just using python because they enjoyed it, and it was fast enough for them; then fine most languages are basically interchangeable. But for systems that actually benefit from python’s dynamism, Go strips out too many good python idioms that don’t really make them alternatives.
Personally even if none of that was true, (In the case where python is fast enough, and obviously it should be if we’re making this comparison) I wouldn’t ever use a C-style language over python’s–what I think is really nice–syntax. And the speed of development in a dynamic languages is almost always higher. Which would tend to be the things that I would pick python for in the first place. Something that needs some nice speedy development that will take advantage of dynamism, metaprogramming, and/or asyncio
#4 by boggle on May 4, 2014 - 7:56 am
@huhwhat go’s type system is very limited since only very basic properties of values may be expressed by it (in comparison to practically used powerful type systems of languages like scala, haskell, and rust). I think it is also valid to call it antiquated in the sense that the set of features that it does support rely on type theory papers from way before the 80’s if not much earlier (as opposed to more modern type systems based on more modern type systems).
#5 by Stefane Fermigier on May 4, 2014 - 8:41 am
Bullshit analysis, based on bogus data, posing as serious science (or at least, credible analyst work).
For instance, 1/2 of my repositories, which are really Python projects, are misclassified by GitHub as Javascript projects. Same for other people, of course (see the comments below mine on dberkholz’s post).
#6 by huhwhat on May 4, 2014 - 9:51 am
@boggle Academia vs real life, please don’t go there… It will turn ugly, when you start putting academic toy languages like Haskell on the line with stuff used widely in software industry..
#7 by James on May 4, 2014 - 5:21 pm
@huhwhat Haskell might be primarily an academic language, but I’d hardly consider put Scala or Rust in the same category.
#8 by ARealProgrammer on May 4, 2014 - 6:01 pm
Real programmers program in assembly!
#9 by Paul on May 5, 2014 - 6:11 am
Am I missing something? How can Go be replacing Python if it’s not even showing up on the graph?
#10 by Joker_vD on May 5, 2014 - 6:51 am
@boggle: Generics (aka “parametric polymorphism”) were invented in 70ies. Heck, half of the CS was invented back in the 70ies, they just didn’t have resources to implement it. We are (re)implementing (and reinventing) it today!
#11 by Cedric on May 5, 2014 - 7:18 am
The prediction that Go is slowly replacing Python is entirely mine, it doesn’t follow from these graphs.
Pingback: Articles for 2014-may-6 | Readings for a day
#12 by Andrés F. on June 7, 2014 - 2:44 pm
@huhwhat Haskell is not a toy language. Of all the languages mentioned in this post, it is arguably the best. It’s certainly better than Python and Scala (not familiar with Rust, so I cannot say). Real, reliable software has been constructed using Haskell. See:
– http://www.haskell.org/haskellwiki/Haskell_in_industry
– https://www.fpcomplete.com/business/resources/case-studies/
Haskell *IS* way less popular than Python, but we’re not arguing that popularity determines quality, are we?
#13 by Cedric on June 7, 2014 - 5:46 pm
Andrés, if you think there is such a thing as a “best” language, you probably need to learn a few more languages.
I can dig up case studies showing that FORTRAN is used in the industry, will that convince you that FORTRAN is a better language than Haskell? Didn’t think so.
Open your mind.
#14 by Andrés F. on June 7, 2014 - 7:09 pm
There usually *is* a best language for a specific task, though “best” is constantly changing. I do know quite a few programming languages and I’m opinionated about them, like most of us in this discussion.
The ignorant opinion is calling a language you don’t know or understand a “toy language”.
FORTRAN is also not a toy language, so I rest my case.
#15 by Cedric on June 7, 2014 - 7:27 pm
I don’t buy that there is a best language for a given task because this completely ignores the human factor. I could accept that you can reach local maxima for given pairs of (language, engineer) for very specific tasks, but the idea that a given language is perfect for an entire project sounds asinine to me.
#16 by Andrés F. on June 7, 2014 - 7:56 pm
I don’t think the perfect programming language exists. But we’ve gone on a tangent. I was replying to huhwhat, who claimed that
> It will turn ugly, when you start putting academic toy languages like Haskell on the line with stuff used widely in software industry..
I suspect he was irritated by the (accurate, in my opinion) claim that Haskell, Scala and Rust have more powerful type systems than Go’s. I merely showed that Haskell is not a toy language and that it’s used in the industry. It’s also way less popular than most of the languages mentioned here, but we aren’t going to argue that popularity implies better quality or viceversa, are we?
#17 by Richard Eng on July 20, 2014 - 6:49 am
@Andres
Why is Haskell “certainly better than Python and Scala”?? The problem with these comparisons is that there is no universal definition of “best”. I can come up with 20 different definitions and arrive at 20 different “best” languages.
For example, I have a definition for best language that is broadly pragmatic:
1. It has a large and vibrant user community. A language is only as strong as its community.
2. It is well-supported by libraries, tools, and frameworks.
3. It’s a simple language with a highly readable syntax. A simple language is much easier to master, thanks to its minimal cognitive burden, making you more productive in the long run.
4. It’s a well-designed language with a well-considered feature set. This makes it pleasant and easy to use.
5. It should be “general purpose”, usable in a variety of problem domains. While a specialized language may be better suited to a particular task, I prefer to learn and master one tool. It takes about 10,000 hours to master something, and I don’t have the time nor energy to devote to just one niche language.
6. It’s backed by a major player such as Google, Apple, or Microsoft. Without such support, a language will likely not achieve “escape velocity”. A language, once relegated to “boutique” status, has limited usefulness in the IT industry.
By my definition, then, Go is a suitable candidate, which I am presently exploring.
#18 by Richard Eng on July 20, 2014 - 6:56 am
@huhwhat
Exactly. Go is simple by design.
I am a huge proponent of simple, elegant, easy-to-use languages because anything that minimizes the cognitive burden on the programmer is a Good Thing. A simple language is much easier to master, and when a craftsman has mastered his tools, he can do wonderful things with them. A simple language avoids many “gotchas” of programming, and who among us hasn’t tripped over something in a complex language (such as C++) that gave us a headache? A programmer should never have to fight with his own tools.
Yes, a simple language also lowers the barrier to entry for novice programmers, but that’s just a fortunate side benefit. Simple languages weren’t created expressly for simple people.
I do not stand alone in this conviction. I am in good company such as Ken Thompson (Go), Rob Pike (Go), Yukihiro Matsumoto (Ruby), Guido von Rossum (Python), Niklaus Wirth (Oberon), the late Per Brinch Hansen (Edison), et al.
Pingback: JavaScript: welcome to the party! | ortask
#19 by Andrés F. on August 24, 2014 - 6:28 pm
@Richard Eng
Forget for a minute my earlier comment between the relative merits of Haskell, Python and Scala (though you should take it in context: I was arguing with someone claiming Haskell was “a toy language”, which anyone familiar with it knows it is not). It’s a personal opinion from having had to deal with the three languages.
The problem with simplicity is that it’s as hard to define, too. It’s also misleading: a language with simple syntax and constructs can lead to incredibly complex software. Conversely, a more complex language can lead to simpler software. That’s the whole reason for evolving languages other than C and assembly: C is extremely simple (simpler than Go!), yet it’s error prone and leads to extremely complex and hard to maintain software.
The people you mention are doubtless pretty clever guys, but plenty of cricisim has been levied at their design decisions. I do not consider, for example, many the choices behind Python as particularly fortunate or leading to robust software (though it *is* newbie friendly, I’ll give you that). I’m not familiar with Go, but nothing I’ve read about it sounds appealing…