

The Elite Programming Language Fallacy - jfsurban
http://blog.fogus.me/2011/10/02/the-elite-programming-language-fallacy/

======
vessenes
This sort of has a 'straw-man' feel to me. I've never heard the "Elite
Programming Language" term before I saw it deconstructed in this essay.

Most discussion around programming languages I see these days is centered
around assessment of developer skills. This is understandable -- we're going
through a period of massive technical talent shortage. Almost all tips we read
through places like HN, including PG's notes, revolved around shorthand ways
to screen developers, not pushing a one-true-language approach (unless Yahoo
Store programming skills are at stake, apparently..)

Unlike, say, the mid 1970s, when IBM could take its sweet time training you to
program, startups don't have a lot of time to make something happen. Thus,
they need a language (and application framework) that will work well, and they
need developers that they are reasonably sure will be able to succeed. And
they cannot wait six months to find out if they were correct about said
developers.

One shorthand way to look for these developers is to find ones who have
demonstrable skills in new-ish, hard-ish languages. These are the developers
that you know for sure

1) Like new things

2) Aren't afraid to experiment

3) Enjoy a challenge

You have no idea if they're any good to work with, understand software
architecture, have foul personal habits, or any number of other reasonable
concerns for some other company. As a startup company, you don't care about
most of that list (at first). This is why it's a smart move to look for people
who have just coded up some crazy Arduino-Haskell-auto-shooting-usb-missile
program. Those people will not be unduly dismayed when they need to reverse
engineer a wireline protocol one day, and 'pick up couchbase' the next.

All this to say, sure, there's no such thing as an elite language. But, right
now, there are a few languages that indicate strongly that you might wish to
recruit a programmer for a stint at your startup. Clojure, Scala, Haskell are
on my list.

~~~
kenjackson
I don't understand why those three things you listed would make a good
developer. Who doesn't like new things? I want to find the person who sticks
with the old thing, even after the shine has worn off. Everyone loves to code
the prototype. And if you tell most devs they get to code the prototype and
learn a new language at the same time they'd jump at it. In grad school, with
every project I used a new language -- why? Because it's fun. But that doesn't
make a good dev.

Again, I've never met anyone who is afraid to experiment. But I've met people
who don't know when it makes sense to experiement.

And again, the problem I've had with programmers has never been because they
don't enjoy a challenge. In fact, I'd say quite the opposite. I'd like to see
more devs say early on that something looks difficult, and could use some
mentoring or help on it.

I guess I'm just saying that this says almost nothing about the quality of the
developer.

~~~
ohyes
Perhaps you aren't trying to find a great dev, you are trying to weed out the
pigs in pokes. Anyone who isn't a total fraud of a programmer is lauded as an
excellent hire.

It seems to me that just as with reading and writing, nearly anyone could be
taught to program. The problem is that there are many people who are
completely illiterate. Of those that have been trained, there are still many
who are functionally illiterate (they can write godawful code slowly).

Anyway, I've seen plenty of bad code in Common Lisp. You'd have to assume that
any language with significant market share would produce more bad code. This
is because of bandwagon effect.

i.e. 'There are a lot of companies that want to work in lang_x, therefore
everyone gets trained in lang_x, and if you just want a job, you learn
lang_x.' All of the programmers who have been taught but never learned 'know
lang_x', so you get them producing bad lang_x code.

The elite programming language fallacy solves this, by eliminating the people
who only 'know lang_x'. If you had trouble learning to program lang_x, you
aren't going to go out and read a book on your own time about lang_y or
lang_z.

So lang_y and lang_z become 'elite' even though elite really means 'a bare
minimum test if you could possibly to produce good code'.

------
mattgreenrocks
I blame the Internet. No, seriously.

Sites like HN and Reddit tend to have a vocal crowd who decide that certain
languages and tools are the domain of the elite. This groupthink is
religiously defended through self-righteous blog posts ("I switched from Java
to C and became a better person!!!") and comment threads. Inevitably, posters
go looking for something that the True Language is known to do well, and then
overgeneralize their experience. The result? Karma, and another voice to add
to the constant din of Conventional Wisdom. Intellectual honesty takes a
backseat to conformity...as usual.

Developers looking to improve their skills should pick up new languages,
especially those of different paradigms and abstraction levels. But the
hegemony of 'superior' languages will always weigh in to these decisions, and
potentially block out the idea that the language is merely a tool used in
implementing the final solution. It was never the end goal.

Nor is being right on the Internet. This phenomenon is one of humans, and
their politicization of engineering. We must be wary of the ego, and harness
it for it's good uses, rather than always looking to appear badass or hip
through our technologies.

~~~
steve8918
I have to agree. The Internet somehow does create these weird pissing contests
where people seem to want to show that they are cool and everyone else sucks.
For example, in an internal mailing list where I work, there is currently a
thread between two idiots over whether iPhone or Android is superior.

What a completely ridiculous waste of time!

The mature "elite" programmer knows that solving problems is more important
than the underlying technology.

There was that article from pud a few weeks ago talking about "you won't like
my back-end", where he details how he uses a Microsoft stack, including IIS.
So many people were responding with how much better LAMP was, etc. But the
funny thing is that pud has made more money and acquired more customers than
99% of the people who responded. He is solving customer problems and being
rewarded with money, and not engaging in useless pissing contests over which
technology is better, and I admire that.

~~~
nightski
I don't like flame fests any more than you do, but honestly is making money
always the most important factor? Especially in our profession there are far
more rewarding goals than money.

~~~
mattgreenrocks
Getting things done is usually the most important factor in a business
setting.

------
jerf
"So why does the term “elite” become attached to certain languages over
others?"

Because the causality flows the other way. At any given point in time, there
are certain languages that the elite programmers tend to flock to, because
they spend more time looking out for new, good things that the average person
(part of what got them to "elite" in the first place), and therefore finding
someone who knows that language is evidence (though not proof) that they are
elite.

That's not a logical fallacy; in Aristotelian logic, (A -> B) !-> (B -> A),
but you can use probabilistic logic to combine "A -> B" and "B" to update the
probability of A (when combined with a couple of other values). And that's how
you get certain languages associated with elite programmers, even though the
languages itself does not confer eliteness. It's actually all-but-inevitable
that such processes occur in any community of sufficient size that has any
sort of skill ramp. There's going to be at least one identifiable group that
is the "cutting edge", and they are going to have certain characteristics or
tastes or whatever that will tend to separate them from the not-cutting-edge
folk.

~~~
shin_lao
_because they spend more time looking out for new, good things that the
average person_

Yet I think the best programmers I know use languages that are 20 to 30 years
old as their main weapon of choice (C/C++ for example).

I'd also care to say that once you reach a certain skill level, you see beyond
the language and don't find yourself looking for the latest shining new stuff.

~~~
WildUtah
>> _the best programmers I know use languages that are 20 to 30 years old as
their main weapon of choice (C/C++ for example)._

C is 40 years old and C++ is 32 years old. (Visual Basic is 20-30 years old,
though.)

~~~
shin_lao
Well if you want to be pedantic, C++ is actually twenty eight years old
(1983), but as the language evolved a lot, modern C++ is probably less than
ten years old. It depends on what you can a language and what you call a
dialect.

C is indeed almost forty years old.

~~~
swah
I've only recently found out that by "Modern C++" most people mean the way to
write C++ as exposed by Alexandrescu's book on Generic Programming - is that
what you mean too?

------
cageface
_So I say that even a notoriously difficult language like Haskell is only
difficult because you haven’t learned it yet._

Can't say I agree with this. Haskell embodies a lot of fairly advanced and
much more formally rigorous concepts than most programming languages. It may
be that there's a corresponding payoff in concision or correctness but Haskell
has this reputation for a reason.

~~~
lurker19
Not just rigor. Haskell is very difficult to debug performance issues of, and
is hard to use when manage changing state.

Haskell shines when used to manage a sophisticated computation of a static
result, not a constantly changing dataset.

Haskell is a great way to learn stateless pure programming style, since it
forces a lot of discipline. Haskell makes you a better Java/Lisp/Python/C
programmer. (Except that it will make you write inefficient Java if you get
too accustomed to the idioms that are efficient Haskell)

------
Jun8
I think the post somewhat misses the point of "elite languages" by denying
their existence in teh first sentence. To see the absurdity of the claim,
reword the argument thus:

"There are no clubs that will make you “elite”. In fact, there are no “elite”
clubs."

But, of course this is _not_ true, there are clubs for which membership shows
eliteness. This is not a physical property, it is agreed upon by the relative
strata of society.

Similarly, there definitely are elite languages, i.e. ones for which
understanding and use confers some sort of eliteness to the programmer. This
is different from being a good (or great) programmer, so the examples of great
programmers he's known is irrelevant. Eliteness, to me, is not the same as
coolness or the next big thing either, i.e. for most people Lisp (or a
dialect, say, Scheme) is elite although it's old.

~~~
fogus

        But, of course this is not true, there are clubs 
        for which membership shows eliteness. This is 
        not a physical property, it is agreed upon by 
        the relative strata of society.
    

This is a weak analogy. Elite clubs do not make the members elite; they are
"elite" to begin with. These clubs are not admitting the janitor. On the other
hand programming languages do not admit members. Anyone can pick one up and
learn it, but that alone doesn't make them elite.

~~~
rbanffy
> Anyone can pick one up and learn it

This is horrible to say, but, in reality, it's not anyone. Not everyone will
ace the SAT or have an IQ of 140+ much like not everyone can run 100m in less
than 10 seconds. Maybe anyone can learn Java or Haskell or Python, but not
everyone will be capable of writing excellent (or even correct) code.

~~~
Jun8
Yo dou have a point but it goes beyond standard intelligence, I think: A big
curiosity towards programming is more like it (although curiosity is a large
part of intelligence). Most of the so called "elite" languages are not used in
widely in corporations. So, if your goal is to just make money and move up
(someday) you better put all your time in Java or C++, rather than learning
Haskell or the like.

An analogy could be evolutionary explanation of the peacock's tail: it has no
real purpose but shows females that this guy can afford this liability without
a purpose. Similarly, when a coder knows, say, Forth (without being required
to do so at work), I form immediately form a certain mental picture of
him/her: this guy loves programming, definitely needs a further look.

------
akkartik
I was following the essay just fine until the paragraph on clojure. What's it
doing there exactly? Is he saying there are no 'elite' programming languages
-- except Clojure?

~~~
regularfry
He's saying exactly the reverse. Because clojure makes a traditionally hard
task easy, you don't have to be 'elite' to use it.

------
tom_b
"Having said that, there are languages that are designed to solve hard
problems."

Which kind of says that there _are_ actually elite languages, right?

I agree that people conflate their use of an "elite" programming language or
framework with actually being an elite hacker.

And certainly there are masterful hackers in any given language.

There is no substitute for getting things done, but my own programming life
would have been more productive earlier had I simply known more programming
paradigms to start with. The wonderful idea in an "elite programming language"
is that the thinking hacker is forced to look at least a little at languages
that support different programming paradigms. Then, their mental modeling of
problems may be forever changed - improved even.

------
baddox
Then clearly, "Elite" is a great name for a programming language.

~~~
fogus
<http://sourceforge.net/projects/aom-elite/>

------
bitops
What is STM? I was following along until that came up.

~~~
sparky
Software transactional memory.

------
jbarham
Mad props to all the l33t COBOL programmer analysts out there!

~~~
rbanffy
To be fair, their task is not a simple one: to bend a very old language into
new problems it was never designed to solve is an outstanding achievement.

