The Elite Programming Language Fallacy
blog.fogus.me
blog.fogus.me
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.
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.
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'.
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.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.
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.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.
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.
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.
Java the language is painful after writing in Lisp, Clojure, Ruby, et al.
Edit: C# is also widely regarded as "superior" to Java.
It feels like saying Stheno and Euryale are Medusa's pretty sisters.
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 because only losers use stuff from MS. This is the sort of argument that you see alot of on the internet.
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'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.
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.
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.
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.)
Uh. Where did you say that?
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.
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.
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.
C is 40 years old and C++ is 32 years old. (Visual Basic is 20-30 years old, though.)
C is indeed almost forty years old.
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.
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.
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.
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)
"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.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.
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.
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.