Hacker News new | ask | show | jobs
The Elite Programming Language Fallacy (blog.fogus.me)
87 points by jfsurban 5368 days ago
10 comments

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.

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.

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'.

> I've never heard the "Elite Programming Language" term before I saw it deconstructed in this essay.

Google search for "elite programming language" -"elite programming language fallacy" [1] (to avoid links to this post) yields eight results. It seems the term "elite programming language" was coined by the author in order to knock it down, which is one type of a straw-man argument. [1] https://encrypted.google.com/search?q=%22elite+programming+l...

    It seems the term "elite programming 
    language" was coined by the author
You might have saved your time searching Google and instead read the first paragraph of the post.

    This sort of has a 'straw-man' feel to me. 
    I've never heard the "Elite Programming Language"
    deconstructed in this essay.
I all but admit to coining the term in the first paragraph. It's a term without baggage that is meant to encapsulate many related terms: hipster, academic, complex, obscure, !blub, etc. To say that the post is a straw-man is to deny these other terms exist and are used to mean roughly the same thing.
Never heard of the concept, or never heard of that specific phrasing? Because I've heard of the concept repeatedly for years.

http://paulgraham.com/pypar.html

I agree with vessenes, the article is vaguely strawman-ish.

What pg says in Python Paradox is not "all Python programmers are elite hackers" but rather that -- when he wrote the article -- the percentage of good hackers in the Pythonista population was higher than in the Java-programmer population.

Again, the point is not that learning Python automatically makes you a better programmer. It's that people who are great programmers or are interested in being better programmers are more likely to go and learn a non-mainstream language.

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.

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.

LAMP is better than .NET because I dont need to buy Windows Server licenses to get going. That is a fair statement.

LAMP is better because only losers use stuff from MS. This is the sort of argument that you see alot of on the internet.

LAMP is better than .NET because I dont need to buy Windows Server licenses to get going.

A fair statement, but not exactly accurate :)

Even discounting the Mono stuff, there's always BizSpark or one of the cloud many providers that offer Windows/MSSQL hosting at a slightly increased price (essentially renting Windows Server licenses).

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.
Getting things done is usually the most important factor in a business setting.
No one here said it was.
Well said. A lot of people on HN (including PG) like to diss Java as some backward corporate language. The fact that you can run Lisp on the JVM (clojure) shows that such criticisms are shallow.

Lisp may be superior to Blub. But if Blub has excellent libraries X,Y, and Z that make solving your problem a lot easier, using Lisp may be a no-go - unless you can interoperate with Blub code from Lisp -- something that a virtual machine like the JVM makes very easy without having to write bindings.

J2EE (what most people are referring to when they talk about Java sucking) is a really awful, verbose thing to write programs in, and I had those feelings well before I started reading articles about it. It's not a shallow criticism.

The JVM, on the other hand, is great, and lots of great tech has come out of it. I haven't seen too many people disparaging the JVM. There is also quite a lot of useful, stable library code in the Java universe.

j2EE != Java. J2EE is a framework. More accurate to compare J2EE and Rails. Or compare Swing to Qt. You can program in Java without J2EE and Swing (which suck). The criticism is against Java. You are adding your own qualification.
Java, the Programming Language, not the Development Environment, is what I think he was talking about. The JVM is awesome and will be one of the platforms that defines the next generation of languages (e.g. Clojure, Scala).

Java the language is painful after writing in Lisp, Clojure, Ruby, et al.

Edit: C# is also widely regarded as "superior" to Java.

> C# is also widely regarded as "superior" to Java.

It feels like saying Stheno and Euryale are Medusa's pretty sisters.

I suppose, but it's what a lot of people are stuck writing in enterprisey Java shops, and it's been my impression that people mix the two up when complaining. That might be wrong, though. I suppose the core language has a number of problems of its own as well. I don't think people think the JVM is one of them, though, and it's not really what most people are talking about when they talk about programming in Java.
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.

I'm not even particularly old, and I ran into this offline first. Go anywhere within 500 feet of a tech meetup, and you'll have people telling you these kinds of conversion stories, overgeneralizing their experience, etc. My first encounter, when I was a high-school student, was with a C-programming graybeard who was sort of religious about C.

One of the best comments I've read on HN. Fight group think.
"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.

It's not just that elites use other tools and techniques because they are intellectually more curious, it's also a method to establish identity and separate themselves from "the peons".

The irony, in my opinion, comes from the fact that there is no official membership mechanism when it comes to belonging to an elite. People that wield power withing a community because of their above average skill set have mannerisms, and often, as said above, agree, sometimes silently, on a certain code of conduct or modus operandi. People who want to belong to the elite start to emulate these mannerisms and identity forming mechanisms, reinforcing them over time.

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.

>>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.)

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.

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?
There is a huge difference between being pragmatic and beaten into submission by industry, and seeing no value in language innovation. I highly doubt the latter is the case for most of these veterans you speak of.
It could be that, or it could be that the very best stuff was discovered years ago.
The best programmers maybe. But not "elite programmers".

Where by "elite programmers" we mean the average startup kid that thinks he is teh awesome because he has written yet another framework/library no one needs in the functional and/or scripting language in vogue at the moment.

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.

The problem is that there's no evidence at all that it's language which is the characteristic function. Looking at most of the devs that I truly respect and admire, few if any, are the ones that spend a lot of time with cutting edge languages. And most people I know who are famous devs that use cutting edge languages, are famous for using, writing about, or developing cutting edge langauges.

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

I think that's a very subjective thing to attach "elite" to. I see a lot of people jumping between languages who are ahead of the curve, but nowhere near anything I would call "elite". At the same time, some of the most "elite" programmers I've seen have been doing things like the same old embedded programming for X years, getting really, really good at it.

You, and most of the other repliers up to this point, haven't fully thought through the implications I was making when I said there can be more than one group of "elite".

Elite embedded programmers who have been using C for 20 years will have other characteristics that set them apart from the non-elite, but are not themselves the reason for them being elite embedded programmers. And so on for other groups of elite programmers. Language geeks are just a particularly visible manifestation of the process, because it's so easy for so many people to get into, and has such concrete effects. (Perhaps less so than when you were using Python when everyone else was still using C and you could program circles around them as long as performance wasn't an issue (which it frequently isn't), but I can still confidently say there are projects around where using Erlang (for instance) can put you well ahead of anybody using a language with a worse concurrency story, no matter how skilled in that language they are. There's a time and a place for superior primitives.)

the implications I was making when I said there can be more than one group of "elite".

Uh. Where did you say that?

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.

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)

For most people it will probably be much harder to grock than Java, I fully agree.

By the way, I think the linked article was rather mundane. Many programming articles and blog posts seem to moot fairly uninteresting problems and are littered with empty catch phrases and notions. They remind me of books about the latest management techniques. What is the point of an article like this? I feel like I've gained nothing from reading it.

There is no discussion about the meaning or definition of the term "elite". If you consider that "elite", in the realm of sociology, describes the aggregation of people of above-average qualification within a certain functional context ("performance elite"), the term will often be used to describe the tools and techniques these elites use to achieve and maintain their status.

Elites, like many social groups, find means to separate themselves from other groups, they create informal habits and rituals, formulate means for the establishment of their group identity and so on.

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.

    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.
> 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.

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.

I think you are agreeing with Jun8, but it is confusing because "elite" has a subtle meaning (not just "99%ile quality") and it is not being defined here.
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?
He's saying exactly the reverse. Because clojure makes a traditionally hard task easy, you don't have to be 'elite' to use it.
"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.

Then clearly, "Elite" is a great name for a programming language.
What is STM? I was following along until that came up.
Software transactional memory.
Mad props to all the l33t COBOL programmer analysts out there!
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.