
Programming Language Rankings: January 2019 - myth_drannon
https://redmonk.com/sogrady/2019/03/20/language-rankings-1-19/
======
ilovecaching
I’ve never seen a community put so much effort into building an ecosystem as
Rust. They have working groups for everything, they’ve slowly won over some
extremely high profile programmers, and they’re taking on the areas of
computing that are the hardest to solve as a manually memory managed systems
language. Hats off the team, and I’m excited for all the game changers that
are still in the pipe like the faster debug compiler.

After a lot of languages that are just rehashes of what we’ve already seen, or
just a different subset of features, Rust is a languages that actually feels
like it’s from the future that's finally going to start moving us forward
after a lot of stagnation in industry while PL theory has continued to move
forward.

If you haven’t given Rust a shot yet now is the time. You can get rust up into
the top ten. :}

~~~
golergka
I use Rust almost exclusively for my side-projects now, and it has given me
(as a guy who spends 2 days to find the Right Way to do a thing because this
one hand-waved line in a tutorial just gives a bad smell) much joy and taught
me a lot, but as professional, slow adoption in the industry makes me nervous.
I have decent experience and background in my current tech stack to easily
find a well-paying job, but if something happens to it, or to particular
industry it's relevant to, I want something to fall back on; I've seen too
many developers drift into a comfortable numbness of stagnation (ActionScript,
anyone?). And yet, Rust jobs are extremely rare, and each one attracts a lot
of VERY motivated and skilled candidates eager to start writing Rust full-
time; and quite frankly, while I think that I'm a decent developer, I don't
consider myself among this 1%.

So, I'm curious: how does HN see this situation going forward? Where will Rust
find widespread industry adoption, and what can Rust community do to bring
this forward?

~~~
jandrewrogers
The challenge for Rust is that most of the people that are proficient at
systems programming are already proficient in modern C++. For those
developers, any advantages of Rust do not outweigh its disadvantages in
practice, so there is little incentive to invest in changing languages.

Rust can best grow its developer base by growing the number of _new_ systems
programmers, as they would have less to lose by using Rust and would be less
likely to notice its limitations. The challenge here is that becoming a
competent systems programmer is much more difficult than learning a new
programming language, and there is a chronic shortage of developers interested
in systems programming.

If we were still using classic C++ (i.e. C++03 and earlier) then I think Rust
would have a real chance. The rapid evolution and adoption of modern C++ has
fixed many (most?) of its major weaknesses.

~~~
pcwalton
I don't know where you'd get the idea that everyone who knows modern C++
prefers Rust. I'm not the only one who knows how to use modern C++ and usually
goes with Rust instead. In my opinion, modern C++ is _less_ safe than classic
C++, because it adds more ways to get use after free (e.g. lambdas).

Modern C++ is not memory safe, and there is no way for it to achieve memory
safety without either significant runtime overhead or breaking compatibility
so much it won't be C++ anymore. The features in modern C++ are nice, but they
don't solve my problems.

~~~
ncmncm
The relevant question is the degree to which memory errors remain a
significant source of bugs in modern C++ code. Are they now of mainly
theoretical importance? I can't answer that definitively, but I can say it has
been many years since I had a bug in C++ code that using Rust, instead, would
have prevented. My bugs are specification bugs. Memory bugs just are not on
the radar. But coding Rust takes me enough longer than C++ that I can't
justify it.

Perhaps the driving force demanding memory safety isn't for one's own use, but
rather the hope that the code one depends upon, written by other people, will
get better. I.e., I write good code, and you write good code, but God forbid
we have to rely on Microsoft, Google, Mozilla, and Red Hat monkeys to write
good code! That's a legitimate desire, but it doesn't drive much personal
adoption. Meanwhile, the PITA factor -- borrow checker not happy! "&"
required! "&" forbidden! -- interferes with personal adoption of Rust.

And C++ keeps adding features. Not to fall increasingly behind, Rust needs to
multiply its adoption rate. I don't see how that could happen. C++ is already
good enough, so Rust can't cannibalize significantly from C++ coders. Rust is
enough better than Go, Java, and C# to be worth a significant effort to
switch, if users of those languages could perceive it. The greatest benefit to
the world derives from driving people off C -- to Rust or modern C++, it
matters little which.

~~~
caseymarquis
Why would someone use Rust over Java/Kotlin/Scala/C#/F#? Macros would be a
small improvement, but at the price of reflection (JVM has Clojure for this).
If I was using one of those languages, I don't really think the performance
gain from moving to Rust would outweigh the added mental overhead, cost of
learning new libraries, or developer scarcity.

I would use Rust in place of C++ or C in a heartbeat (and I would probably
pick it over Go until they have generics), but I wouldn't use it in place of
those other languages for the same reason I wouldn't use C++ in place of them.
They're already managed, and I wouldn't have used them in the first place if I
needed Rust's performance.

------
jonsen
“I can’t find COBOL” I said to my wife. She replied “Well COBOL programmers
don’t have any problems. No need to ask on SO where that comma should be
placed. And they are so happy in their job they have no need to promote
themselves on Github.”

------
kriro
I roughly interpret the graph as anything being below the line leaning towards
the "getting things done" camp and anything above leaning towards "academics".
This is a bit distorted because FLOSS projects are favored (there's lots of
"getting stuff done" code that is not on Github) and some languages have great
communities outside Stackoverflow (Rust).

Prolog seems like a good example. It is used in AI classes and "different
enough" to leave students with lots of questions for assignments (imo). At the
same time it's not used in many industry projects and if it is companies tend
to use proprietary Prologs (like Sicstus) and the code is unlikely to be on
Github.

I suppose one could also argue that good setup/tooling and documentation helps
to push a language below the line. I'd say Elixir is a good example of this.

So by and large I'd lean towards languages below the line when trying
something new. Am I wrong? Alas the next language I want to play around with
(F#) is above the line. But the domain modeling with F# talk/website is very
intriguing.

------
sk0g
With how much I hear about Rust on here, a little surprising to see it behind
the likes of Haskell and and Perl!

Kotlin is doing really well for its age especially, I'm guessing mostly used
by Android devs (so far).

~~~
hardwaresofton
I was pretty disappointed in the lack of progress, but a few things come to
mind:

1\. IMO Rust has the closest thing in "imperative" languages to haskell's type
system in a recently released "mainstream" language.

2\. Rust brings an entirely new value (memory safety), and accordingly an
entirely new hurdle called the borrow checker. This feature is so advanced
that languages like Haskell are _catching up_ (it's not a competition really)
by introducing things like Linear Types[0]. That's _really_ impressive.

3\. Rust is targeting system programmers -- they move the slowest (as they
should) in the ecosystem and are the most risk averse (as they should be).

4\. Compare Rust to relatively recent systems-level languages (I won't name
any), it's doing great.

5\. Staying at the same place in the rankings is actually moving forward -- it
may not seem like it, but it's hard to stay both effective, liked, and
relevant in the world of programming languages (see: Dart).

I don't think rust is the kind of language to just shoot up the rankings -- it
contains both higher level techniques that aren't quite mainstream yet _and_
is targeted at a smaller community (though they're kind of going after web
people with the wasm stuff).

I think rust is the kind of language that shows up to be consistently near the
top of the rankings in 10 years (and I've said it numerous times but I think
Go will displace Java and Rust will displace C/C++ where possible).

Yes, I will concede to a slight bias in favor of rust :).

[0]: [https://gitlab.haskell.org/ghc/ghc/wikis/linear-
types](https://gitlab.haskell.org/ghc/ghc/wikis/linear-types)

~~~
sk0g
Now I'm curious! What are other systems-level languages? I know Go was touted
as one at the start, but that's definitely not where it's established a niche!

Julia? Nim? That's about all that comes to mind.

I wish I could read the Haskell documentation, but the code examples are
straight up black magic to me. I really need to dig into some proper
functional programming at some point!

~~~
weavie
Haskell is easier to learn than it seems :
[https://patrickmn.com/software/the-haskell-
pyramid/](https://patrickmn.com/software/the-haskell-pyramid/)

Just get the basics down and write some stuff. For a lot of things, you don't
need to know how they work underneath in order to use them. It is helpful to
implement functors, applicatives and monads for some of the basic data
structures to get a feel for things, but then beyond that, just use what has
been provided. Don't try to write your own monad transformers, just use the
mtl library. Lenses are really complicated to understand, but really simple to
use. The servant web library uses some high end type level stuff in order to
work, but it is really easy to use. The compiler has your back.

If something just doesn't work and doesn't make sense, just move on and find a
different way. After a while you will understand more and can return to it.

Don't try to understand the academic papers that have been written with
Haskell. There is a really tradition of making the Haskell code as
incomprehensible as possible. It will just get you down.

~~~
mark_l_watson
+1 for your Haskell comments

That is what I do: I use a subset of the language, don’t dive too deeply into
the theoretical stuff, for anything imperative I find an example to follow,
and just enjoy writing pure code in a comfortable interactive environment
(VSCode or Emacs).

It is possible to just use Haskell ‘lightly’ and enjoy it. The only problem
for me is that it can take me a while to understand other people’s Haskell
code when I read it.

~~~
weavie
Yep. I agree reading other peoples Haskell can be a challenge. There is a real
culture of making your code as terse as possible, which I think makes it
easier to read once you know what you are doing, but makes it harder for
beginners.

Luckily Haskells type system means that you can understand a lot about what is
going on just by looking at the type definitions. Most code includes these.
Although rather frustratingly, however, a lot of documentation doesn't include
the type definitions. It is good to see languages such as Idris make it
mandatory to include type definitions for all functions.

------
jaequery
They should really try to separate JavaScript into client side js and backend
node.js.

I’m curious to see just how much of it is due to client side, as it probably
skewed the ranking due to the fact all websites use JavaScript.

I want to just see how node competes with other backend languages like php
ruby and python

------
submeta
For what it’s worth: According to google trends [1] the number of queries for
(and the interest for) Python has surpassed JavaScript and is on a par with
Java. And looking at the Alexa rank of the websites for Python [2] and Java
[3]: Python‘s website has much more traffic.

[1]
[https://trends.google.com/trends/explore?date=today%205-y&q=...](https://trends.google.com/trends/explore?date=today%205-y&q=%2Fm%2F02p97,%2Fm%2F05z1_,%2Fm%2F07sbkfb)

[2]
[https://www.alexa.com/siteinfo/python.org](https://www.alexa.com/siteinfo/python.org)

[3]
[https://www.alexa.com/siteinfo/java.com](https://www.alexa.com/siteinfo/java.com)

~~~
sverhagen
>For what it's worth

Right.

I think it's a bit of a stretch to call java.com "the website for Java". I end
up on python.org (or at least docs.python.org) often enough. I never go to
java.com. If I end up anywhere on the "official" Java websites, it'd rather be
docs.oracle.com/javase/...some-doc...

~~~
submeta
Good point re java.com

------
keyle
I'm surprised the Swift is not higher on the Stackoverflow side, seeing how
utterly confusing this thing is with Swift version 1/2/3/4...

I'm learning Swift at the moment and I'm running out of eyebrows, due to the
sheer quantity of unforced facepalms I give myself.

~~~
saagarjha
Why, what's wrong with it? You should be writing Swift 4.2 unless you have a
specific reason to deal with earlier versions of Swift…

~~~
iainmerrick
The official docs are good but not comprehensive, and hard to navigate. Once
you start googling around you get a random mix of third-party docs for various
versions. It’s not at all obvious what’s outdated and what isn’t.

As an example, I had to write a little code to connect some Swift and Obj-C
code the other day. (I don’t use either one regularly.) It was very hard to
find good up-to-date docs on how Swift/Obj-C bridging works.

~~~
mpweiher
Over the last two years whenever I downloaded sample code from Apple for
newish macOS/iOS features (Touch Bar, for example) it no longer compiled.

~~~
saagarjha
This is more an issue with the Swift overlay for AppKit than Swift itself.

~~~
mpweiher
While my experience doesn’t match up with that, if it were true the fact that
these “overlays” are both required and fragile is most definitely an issue
with the design of Swift.

------
defertoreptar
I have to question how valuable it is to include stack overflow in equation.
It implies that all languages suffer the same rate of problems for which
people need to seek out help.

~~~
raz32dust
While not 100% reliable, more questions in stackoverflow does indicate higher
probability of the language being more popular, if you think in Bayesian
network terms. And they call out all such caveats very clearly. Any "ranking"
of programming languages is going to be flawed in some way or the other. Using
only the github data might skew it towards more recreational languages and
hide the enterprise languages, for example.

~~~
Insanity
Not to forget that many students will use stackoverflow to ask questions.
Which means that languages being taught at uni have a higher ranking (Java,
Python and JS come to mind).

both GH and SO are probably not representative of the industry.

------
jsnk
I predict that we will see Dart in top 20 by next year, given that Flutter
will become a bigger deal over time.

~~~
pjmlp
Flutter is the next GWT.

Even Fucshia is now adding support for other UI frameworks via Scenic.

~~~
bsaul
i’m really interested about flutter so your comment comes to me as a surprise
( since i think you didn’t mean it as a compliment).

Do you have any criticism about flutter you’d like to share ?

~~~
pjmlp
Easy, Flutter is the last hope to make Dart relevant outside Googleplex, being
dragged into Google's internal politics of Fuchsia, Android, ChromeOS.

Less mature than every cross-platform mobile UI framework that are around
since iOS and Android have won the mobile market.

At the same time Fuchsia how has a UI composition engine, where Flutter is
just one option among many (Scenic) and they are toying with a Rust based one
(Fuchsia-ui).

Being burned by Dart 1.0, I will only take it seriously when it officially
gets adopted by the Android team.

~~~
lorriman
What do you mean by "burned by Dart 1.0"?

Dart was rejected by the community it was aimed at, Javascripts devs (and for
pretty dumb reasons, I don't have much respect for either Javascript or its
devs).

Google understandably took the opportunity to reboot it.

None of this is the same as dropping it, which for sure would merit "being
burned".

It's now a modernised and slick version of Javascript (minus the functional,
which no one uses anyway) with a full Android and IOS framework and extensive
and properly documented libraries. And it's opensource.

At this point it's not possible for it to be 'dropped'.

~~~
bsaul
I haven’t seen this argument about about open source projects in a long time,
so i’d like to respond :

Beeing open source only means an organisation, or a group of developers, with
the capacity to handle a project the size of flutter + dart, could do so if
they wanted to.

Which means basically noone, except maybe in China, because nobody could have
the firepower to deal with something this big ( maintain and even harder have
it evolve) for free.

~~~
lorriman
That argument applies to something like Linux. Here we are talking about a
language and wrappers and an essentially completed framework (granted new
ideas mean no framework is every completed).

And unlike a google service, which requires continued resource usage and high
cost, flutter+dart has low needs. It may get outdated, but it can't be
disappeared like other dropped google projects.

In any case, Unless Dart+flutter becomes an undesirable competitor to another
google offering, there is no reason for Google to drop it unless it fails to
get sufficient adoption. But I think that's unlikely.

Javascript devs are widening their horizons these days (as opposed to their
rejection of Dart 1.0), and Dart only needs a few of those javascript devs to
take an interest. The framework is an easy crossover for many of them, with an
almost instant access to app development and little commitment needed to spin
up.

~~~
bsaul
Dart still has a long way to go as a language to catch up on the recent trends
of statically typed PL (rust and swift come to mind), flutter needs constant
update for every release of _both_ iOS and Android to make sure their native
theme are up to date and that they offer a decent equivalent to any new GUI
component those platform release.

Just look at how long it took to get a correct map on flutter (and i don't
think they've catched up yet).

I think they took a very good direction from a technical point of view, to
recode everything from the lowest level possible, but that kind of approach
requires a _tremendous_ level of commitment.

~~~
lorriman
Languages don't need to keep up with trends to stay used. But updating
languages is the fun stuff; there won't be a problem with volunteers for that
especially at universities. All the hard work has been done, unless an update
would require a complete rewrite of the compilers which, sure, isn't likely.

Flutter needs an update once a year at most, and is mostly cosmetic and a bit
of wrapping. Again, the heavy lifting has been done.

Coding from the bottom up....has been done.

I think you may be overstating the 'commitment'.

What we need to keep in mind here, is the context, that dart/flutter is easy
access - it's no Angular or Cocoa - and that no sane, mature dev programs in
only one language and one platform unless it's legacy.

We're not talking about a massive commitment from a dev, so talk of 'being
burned' by Dart 1.0 is already a bit of a headscratcher when google didn't
drop it, rather changed up and arguably improved Dart. How can that be called
'being burned'. For instance, dropping the need for 'new'. So, sure, it makes
the code slightly less readable, but it also opens Dart to neat code and even
maybe DSLs. Then they added Flutter.

~~~
pjmlp
Dart was rescued from being completely dropped by AdWords team, while key
designers like Gilad abandoned the project not happy with how things were
going.

------
kchoudhu
CSS is a language, but somehow SQL doesn't make the cut.

~~~
austincheney
Are people producing SQL as an independent language in a separate repository
or even a separate file? Since this ranking is largely based upon Github there
would have to be SQL language files to make the cut.

~~~
ptx
Yes. We have thousands of lines of code in MS SQL procedures (each in its own
file in our repository) because that's the only server-side language supported
for customization in our CRM system.

------
patagonia
Can someone please rank languages by economic value added? Sample job openings
and salary info from glass door and job search websites, then add some data
points from LinkedIn. Finally try to guesstimate the value add as a percentage
of companies market caps?

------
DantesKite
“Ordinarily technology changes fast.

But programming languages are different: programming languages are not just
technology, but what programmers think in.

They're half technology and half religion.”

— Paul Graham

------
alexanderdmitri
So for "Popularity Rank on Stack Overflow" axis, I would replace the word
_popularity_ with _attention_. In addition to general engagement and use, a
language getting more traffic/tagging there may indicate less quality
documentation, more niche use (and less answers/tutorials from other sources
as a result) or maybe tend to draw in (for many potential reasons) less
experienced developers who are looking for active guidance or maybe the
language generally has weird or non-intuitive patterns more likely to generate
_wtf?_ type feelings that route you directly to stack overflow and onward to
conspiracy sites from there.

The "Popularity Rank on GitHub" is probably more accurately measuring
popularity in the popular sense of the word. That's especially true because
the GitHub archive used for the data only offers info on public repositories
and even then I'm curious to know how it reports for multi-lingual repos (does
LOC win out, do repos get associated with multiple languages?).

Personally 90% of my commits over the past year have been to private repos for
work. My public commits are in languages I look forward to using and learning
outside my 9 to 5 because they interest and they offer a nice change up (ie
PureScript and Rust lately).

I'm super stoked to see FORTRAN is riding solidly at 60% for both metrics,
regardless of what those metrics truly measure. ~40 public commits in the last
24 hours! Check it out:

[https://github.com/search?o=desc&p=4&q=fortran&s=updated&typ...](https://github.com/search?o=desc&p=4&q=fortran&s=updated&type=Repositories)

    
    
        Off Topic PostThought:
    
        Seeing JavaScript at that top corner and the amazing
        surge over the past couple years of Rust has got me
        thinking that when it comes to the art of programming
        languages, Brendan Eich is a (if not the) seminal
        artist of this time period.
    
        Learning JavaScript is when what Dostoevsky,
        Kierkegaard, Sartre and Camus were all trying to
        communicate really hit home for me. Meanwhile a recent
        foray into Rust is reminding me of the first time I
        read books like Tolstoy's Anna Karenina, Borge's
        Labyrinths and Steinbeck's East of Eden.
    
        To me it's pretty amazing that the same person has
        played pivotal roles in two languages that are both a
        joy to write and reason with and for completely
        different reasons.

------
edpichler
I love Kotlin. I use every day for backend development, and I got surprised to
see a birthday cake on Kotlin official Twitter account celebrating the just 3
years of the language. Kotlin v1.0 was released on February 15, 2016.

~~~
guiye
I love kotlin too, I forgot about Java to something simpler... With graalvm
will compete with other runtime platforms in terms of speed and sizing

------
mem0r1
Somehow I just fail to unterstand how a technology like 'Java' can still be
popular in 2019. At least to me it seems that there are much better
alternatives for almost any use case I can think of.

~~~
w0utert
There's just an enormous supply of Java developers and consultants around,
which makes it an easy business decision when deciding the technology to base
your projects on. I would not be surprised if a very significant majority of
Java code being written today is boring business logic and dime-a-dozen web
services.

For new OSS or hobby/pet projects I can also not come up with a single reason
to use Java, except "I don't know anything else and don't want to invest time
learning"

~~~
ohaideredevs
I hate Java. It wasn't the first language I learned, but it wasn't the 2nd or
3rd either, so I don't think it's just inexperience. It feels like everything
takes 3 times as long in C# as Javascript (though I understand AND appreciate
why). It feels like Java takes 10x the time, and I DONT understand why.
Everything seems overly convoluted. Even recent features like streams.

------
mark_l_watson
I love the 2D graph. Zooming in is a much better way to see language
popularity for github vs. stack overflow.

I was pleasantly surprised at the popularity of Haskell.

------
sorokod
Is there an animation of RM ranking graphs over time?

~~~
sogrady
There is not, though we have historical rankings for the top 20 available
here: [https://redmonk.com/rstephens/2019/03/20/redmonk-
top-20-lang...](https://redmonk.com/rstephens/2019/03/20/redmonk-
top-20-languages-over-time-january-2019/)

------
randompi
CSS's not a programming language

~~~
waynecochran
It can be considered a declarative programming language and is Turing
Complete. You can even write games in it:
[https://minocernota.com/articles/pure_css_game/](https://minocernota.com/articles/pure_css_game/)

