
Viability of unpopular programming languages - weinzierl
https://www.johndcook.com/blog/2018/04/17/unpopular-languages/
======
sho
I, for one, find the TIOBE index absolutely incredible - ie, I don't believe
it at all. As it says:

"The index can be used to check whether your programming skills are still up
to date"

C is #2. Javascript, for better or worse the most important language for web
dev, is #8. So what is this list implying - that JS developers should get with
the times and learn C?

Without details on how this list is compiled, I think it's pretty useless.
Even the most cursory search of any job site will show orders of magnitudes
more jobs for "unpopular" languages like JS, ruby and golang than for C. I'm
not even sure what C is used for these days beyond kernel/driver development
or embedded systems. I think I've met precisely one C developer in the last 10
years.

Maybe I live in a bubble but this list just seems divorced from (my) reality.

~~~
ddevault
You 100% live in a bubble.

First of all, I'm a C developer. Hi!

Second of all, web developers are not the majority they think they are. The
internet is huge, sure, but remember it's not just running on web browsers.
It's also running on servers which have network interfaces that need drivers
and implementations of the IP suite, through firewalls, routers, switches, and
load balancers that are all written in C, and running your trendy web app in a
hypervisor that's written in C. Your database - be it PostgreSQL, MariaDB,
Redis, etc - it's written in C. Your web browser uses C for loads of stuff
like sqlite, rendering, etc. The Python and Ruby interpreters are written in
C. The .NET CLR is written in C, too.

Beyond the internet, C has an even more pronounced presence. Every
microcontroller around you - your fridge, microwave, coffee machine, car,
subway train - all written in C. The code on your phone is at least 50%
written in C. Your fancy mouse and keyboard? C. Manufacturing robots in
factories are coded in C. CNC machines and PNP machines are written in C. 3D
printers are programmed in C. Airplanes are programmed in C, and trains and
boats too. All spacecraft are programmed in C, from the Curiosity rover to the
Rosetta spacecraft (and it's lander) to the international space station.

All of your utilities like grep, ls, git - written in C. So is the code that's
decoding the music you're listening to right now, and the YouTube video you
watched earlier, and most other multimedia code is C. Your crypto libraries
are written in C. Compression algorithms are usually implemented in C. Most
font rendering is done in C. Nginx, postfix, openssh - C.

All that being said, TIOBE is probably bullshit. I can't imagine C isn't #1.

~~~
cdancette
Maybe you live in a bubble too. That's just a guess but a majority of windows
programs may be made in C#

~~~
Sir_Cmpwn
On the contrary, I also regularly work in depth with JavaScript, TypeScript,
Python, Golang, Java, Scala, Rust, C#, Perl, assembly, and more, in no
particular order, and I routinely work as a sysadmin, network administrator,
and operations. I may live in a bubble but I'd say it's of adequate breadth to
judge the relevative scales of many ecosystems.

~~~
nicolashahn
That's quite the repertoire, so you mind if I ask what your role/position is?

~~~
mamcx
This is not as uncommon. For example here where I live (Colombia) we are used
to be "the guy that know all about computers". As developer, not only I use a
lot of programming languages and tools, but also do stuff like:

\- Fix the computers problems of (End users, customers, the son of the
customer, my owm team-mates...)

\- Do tech support (that is separate of the above 'cause that are task done
when doing programming (?) not as a concret position on the company)

\- Build the network infraestructure (not the software!) (put the literal
wires, do small land-lord reparations while on that...)

\- Build the network infraestructure, but on software

\- Mount the security of the company. Sadly, the software side. Nobody let me
use actual weapons and tactical gear ....

\- Do design, UX and similar stuff because that kind of people not exist here
(or is very rare).

That not mean I actually push for this. Some of this task are never paid (and
I do 'cause I wanna to be pay for my primary work!).

This are just situations that happened...

------
larkeith
There is a severe lack of evidence in this post for the author's assertion
that "Common Lisp, Erlang, and F# would all be safer bets" than a nebulous
"several more popular languages" \- his entire argument seems to be that
Common List and Erlang have been around since the '80s, and F# shares
resources with C#.

Also, an S-curve does not seem an appropriate representation for the benefits
of a larger userbase - diminishing returns are not synonymous with
asymptomatically approaching zero returns, and the idea that the first few
users are worth negligible amounts seems wildly inaccurate.

~~~
phillipcarter
I think the author's point about F# stands w.r.t it being a .NET language.
Many services and products have officially supported .NET libraries and SDKs,
which means that if you use F# you can leverage that support.

------
allengeorge
I think the author is making an implicit and questionable assumption: namely
that the top end of the S curve doesn’t dip back down again. But that’s not
true. Standards change, use cases change, operating systems change, and unless
there’s a lot of work going into maintaining those libraries - or building new
ones - the existing libraries slowly become less useful. Yeah, they provide a
base, but then you’ll have to work around a quirky bug because you’re using it
in a way the original author never intended, or other libraries you need to
solve this problem don’t exist, or...

My point is that the S curve only remains an “S” through constant ongoing
effort by the community, and that’s what makes a language viable _for a
domain_.

(I should also point the it that that curve actually represents the viability
of a language for a particular problem domain.)

------
slx26
To me it comes down to usage: if given a problem X you are likely to chose
language Y to solve it, then Y is viable. That sentence probably sounds super
obvious, ok. The important point is realizing that the critical question there
is: Am I likely to chose language Y? And realizing that the answer doesn't
depend on popularity. For a general-purpose language popularity is probably a
big factor, but for other languages that shine in solving particular problems
it might not be very relevant. The question, as I say, is: is there any
scenario where I would chose this language over other alternatives? If the
answer is yes, then I'd say the language is viable.

~~~
stonemetal
Popularity to a certain extent is a prerequisite for viability. Given problem
X, and given that language Y is the most suitable language to solve problem X,
how likely are you to chose language Y to solve it? If you are unaware of
language Y's existence? If you have heard of Y on a internet forum but have
seen zero lines of language Y code? If you have written 10 lines of language Y
but you are the only dev at your company to have done so, and all other code
at your company is written in Z?

The more popular Y is the easier it is to choose, not because we are pop
culture, popularity hounds but because popularity conveys certain benefits.
Libraries and infrastructure, documentation and blogs, knowledge in other
people on the team. That is why large companies are able to so successfully
produce new languages, they are able to pay people to convey those benefits
without the chicken and egg problem of natural growth popularity. For an
interesting example of this D is almost the same age as C#(2001 vs 2000). D
had to grow its user base and tools organically vs C# hitting the ground with
thousands of devs working on an in it full time.

------
pg_bot
Just because something is unpopular doesn't mean that there is a reason for
it. It is actually surprising how few users you need to have a viable
programming language.

~~~
trisimix
Especially if you can compile the language to an executable or something
distributable.

~~~
hackermailman
Or you can compile to another language, like writing web apps in OCaml using
BuckleScript or using other language libraries via FFIs
[https://realworldocaml.org/v1/en/html/foreign-function-
inter...](https://realworldocaml.org/v1/en/html/foreign-function-
interface.html)

------
hpcjoe
Many proxies suffer from a set of problems relating to specificity,
applicability, and how much you can infer from quantitative data.

Specificity, in that you are attempting to model one specific question with
another, which might not even indirectly answer the question. You make an
inference on this, and this inference could be quite wrong.

Applicability ... are you or the proxy really measuring what you intend? Is
the proxy applicable as a metric?

I won't fisk this post. I will point out that people have been beating on Perl
for a long time (all versions), as a "dead horse". It decidedly isn't, from my
vantage point in a number of areas.

Cool, it is not. Hip, it is not.

More importantly, dead, it is not.

Perl6 is interesting, I've not done much there yet, though it looks like a
great general purpose language.

------
fnordsensei
I wouldn't go so far as to say that _widely used_ is the same as _popular_.
That implies an overall positive attitude towards the widely available thing.

We all know that there are things that we use regularly but wish we didn't.

------
tribby
it's kind of like the viability of unpopular social networks. people want to
be where their friends are. if more people I knew used perl6, I would use
perl6, because it's a beautiful language.

~~~
tyil
Feel free to come make some friends in #perl6 on Freenode!

------
wincent
Funnily enough, the index update this month is: "April Headline: Perl is
having a hard time"

Source: [https://www.tiobe.com/tiobe-index/](https://www.tiobe.com/tiobe-
index/)

"At the moment there are 2 programming languages in the top 20 that have lost
more than 3 positions in 1 year's time: Objective-C and Perl. The reason for
the fall of Objective-C is clear. Apple abadoned Objective-C a couple of years
ago and replaced it by its successor Swift. Moreover, mobile app development
is moving to platform independent languages and frameworks, so even Swift,
which is only available on Apple's systems, has a hard time. But what about
Perl? Till 2005 it was the most dominating scripting language in the world. In
2008 we said in an interview with Dr. Dobb's Journal that Perl would go
extinct based on the trend we saw in the TIOBE index at that time. After this
a religious war started with Perl diehards who claimed that this won't happen
and that the TIOBE index was being gamed. Stevan Little gave a ground-breaking
talk in 2013 called "Perl is not dead, it is a dead end" indicating that once
software engineers leave the Perl language they will never come back.
Personally I think that the fork of Perl 6 (and its delays for decades)
together with the unclear future of what was going to happen to the language
was the main reason for engineers to look for alternatives such as Python and
Ruby. And still today the Perl community hasn't defined a clear future, and as
a consequence, it is slowly fading away."

------
onion2k
The fewer users a language has the longer it'll take to hire someone, which
means there'll potentially be a long wait for what your team can deliver. If
you're a startup a long wait before delivering means you'll run out of money
and shut down. If you have a choice, factor hiring team members _very_ highly
in your tech stack choices.

~~~
opk
No, just hire a "programmer". It really doesn't take long to get up to speed
in a new language and can make it more fun, adding to motivation. In any other
profession job adverts don't specify the exact make and model of tools being
used so why is it always required with programming?

~~~
krapp
>No, just hire a "programmer". It really doesn't take long to get up to speed
in a new language and can make it more fun, adding to motivation.

It doesn't take long to learn the absolute minimum of many languages, but that
might just give someone just enough knowledge to be dangerous, not useful. I
would not, for instance, assume that my knowledge of javascript more or less
prepares me to write banking software in COBOL or drivers in C, even if
javascript and C share a lot of common syntax.

> In any other profession job adverts don't specify the exact make and model
> of tools being used so why is it always required with programming?

Because "programming" is not the profession. Programming specific applications
in specific languages that meet specific business needs is the profession -
and the necessity for domain knowledge beyond the bare minimum required to
produce correct syntax is always more important than the language itself.

~~~
sheepmullet
> and the necessity for domain knowledge beyond the bare minimum required to
> produce correct syntax is always more important than the language itself.

I can't help but feel you are agreeing with the parent poster.

In your examples you changed the domain. The parent was talking about the
shift in language being the least important factor.

It's not entirely true but as a web dev I have written a web app in x86
assembler and cgi-bin without too much trouble. It took longer but I never
really felt stuck.

~~~
carlmr
Exactly, it's a classic rhetoric device to destroy an argument by extending it
so much that it sounds silly and addressing the silly proposition instead.

There are some languages which are very interchangeable where someone from a
similar family will be able to get up to speed quickly. e.g. C# developers can
be hired for F#/Java/Scala/Kotlin/... positions. They're all GC'd, statically
typed and don't require much familiarity with computer architecture.

C and C++ devs can be hired for Rust positions, it's both non GC and requires
some understanding of what you're doing with your memory, even if Rust is
taking your footguns away.

Sure, I wouldn't hire a JavaScript developer to do C, because they can do a
lot of damage there. But I'd consider a C dev for a JavaScript position, even
though I'd have to ask them why they want to do that to themselves.

Levels of abstraction might be a better "metric".

ASM < C/C++ < ADA, Rust < C#, F#, Java, Scala, Kotlin < Python, JavaScript,
Perl < DSLs < GUIs

It's easy to move up in the abstraction layers. It's harder to move down,
because you have to think about things you haven't thought about before.

~~~
sanxiyn
> C and C++ devs can be hired for Rust positions

In my experience, this is very untrue. Knowing C++ does not make learning Rust
any easier than knowing Java.

~~~
carlmr
I find it does, at the very least familiarity with RAII concepts and smart
pointers will make the whole borrow checking business seem very familiar.

------
Tade0
> Haskell has better public relations than all these languages.

Haskell has had a rant about JavaScript on its official wiki for a few
years(the wording changed to a less offensive one eventually), so the bar is
pretty low here.

~~~
andrepd
The excellent tooling, documentation and package repository for Haskell is
invalidated because of a rant about js?

~~~
Tade0
_On the official wiki_

Actually - it's not the rant - it's the superiority complex. The fact that
someone thought it would be a good idea to drop filth on another language
there and nobody protested says a thing or two about the community.

I mean, it literally said "JavaScript sucks ...".

I see this condescending attitude a lot among people who do functional
programming.

Case in point: The only library that currently implements the Maybe monad as
specified by Fantasy Land is called "Sanctuary.js" \- as in "Refuge from
unsafe JavaScript".

Why the smugness? It surely doesn't help.

------
p0nce
I've found that many confuse the question "is it a viable programming
language?" with "does it stand a chance to be top-10 popular?". The second
proposition is much harder than the first, and many language will need mass
appeal to get to the top-10 ; which is not necessarily without consequence on
the language itself.

------
misja111
All these discussions are useless as long as there is no objective way of
measuring the quality of a programming language.

~~~
majewsky
> as long as

Implying there ever will be.

------
walshemj
Very Surprised that Pl/1 ranks above Haskel

------
gaius
This analysis is misguided because many of those languages are DSLs, e.g.
ABAP, Apex, F#. No one using them has the option of using a general purpose
language (and they are well-paid enough not to care). Whereas Perl 6 is in
direct competition with general purpose languages. And it really is time to
give up on flogging that dead horse.

~~~
fsloth
F# is very much a general purpose language. The tooling and infrastructure
allows one to do nearly everything that can be done in C# in F# as well, and
if one needs to use C# for something that is not really an issue because the
languages are fully compatible.

True, there are some things that are best done in C# like WPF, but that is not
a sufficient handicap to truncate F# from the population of general purpose
languages.

~~~
gaius
Don’t get me wrong, coming from an OCaml background I am a fan of F#. But I
don’t see it going mainstream anytime soon, and I don’t think that that
matters at all to anyone who uses it.

~~~
uryga
That's okay, but that's not what DSL means as far as I'm aware. Which is why
you got the comments about F# being general purpose.

~~~
carlmr
I agree with uryga here. F# is not a DSL. There might be confusion, because a
lot of F# people like to write DSLs in F#. But it's a full on language like
any other. Except for the syntax it's not even that different from C#. Just a
little better in terms of little extras it offers.

The only thing vs. C# which I think it lacks is support of unsafe pointer
arithmetic. Which I've never really used in C# either.

