7 ms·
The Python Paradox is now the Scala Paradox
- hassy 16y agoIt's "whatever programming language is not mainstream paradox" to be precise (and the author of the blog post would agree since he also nominates Haskell, Erlang, and Clojure). Which is obvious. And since "whatever programming language is not mainstream paradox" is a mouthful, "Python paradox" is a much better name. Those unfamiliar with the term can always be directed to PG's article to enjoy. EDIT: Using "esoteric" languages can also be a good long-term hiring strategy. It's pretty easy to get a place in people's minds as the "go to" company to work with a language. Google did that with Python, Twitter is doing it with Scala, Basho are doing it with Erlang.
- billmcneale 16y ago> Using "esoteric" languages can also be a good long-term hiring strategy. Actually, it's a good short term hiring strategy but a terrible long term strategy. Most of these languages remain a niche (Ruby, Scala, Clojure, etc...) and hiring more than a couple of people that know how to use them turns out to be a very, very tough challenge. I have seen several companies try that and then revert back to Java just because they couldn't staff up to meet the demand. Overall, color me still extremely skeptical of Paul Graham's original argument (which was that Lisp gave his company an advantage over the competition). Interestingly, ViaWeb was quickly switched back to a more mainstream language shortly after PG sold out. Deduce from that what you will.
- msg 16y agoI deduce from this that the fault was not in the language, but in the company, specifically in the resume filter that asks for 3+ years of production Clojure. A programmer who learns languages can learn Clojure for production work. That's better than trying to bring a soaring program back down to earth (or for C++, chaining it to a cart and dragging it into the salt mines). But don't listen to me, here's Paul Graham from Beating the Averages (Footnote Edition). And ponder this question: why didn't Yahoo just rewrite the templates in C++? [1] Viaweb at first had two parts: the editor, written in Lisp, which people used to build their sites, and the ordering system, written in C, which handled orders. The first version was mostly Lisp, because the ordering system was small. Later we added two more modules, an image generator written in C, and a back-office manager written mostly in Perl. In January 2003, Yahoo released a new version of the editor written in C++ and Perl. It's hard to say whether the program is no longer written in Lisp, though, because to translate this program into C++ they literally had to write a Lisp interpreter: the source files of all the page-generating templates are still, as far as I know, Lisp code. (See Greenspun's Tenth Rule.)
- bartonfink 16y agoI deduce that some people prefer some tools, and you get a big win when you match a highly skilled person with tools they feel best augment those skills. However, it's the pairing that is the big win. If I had to guess as to which element was more important, I'd bet that the skilled person with imperfect tools is better than a Blub programmer with tools that are above him. PG left the equation, and when he did, a big argument in favor of keeping Lisp around did as well. Without another similarly skilled Lisp hacker to fill the void, it's easier to make a strong case for a more mainstream language so that ViaWeb could still maintain some forward velocity even if they never got to move quite as fast as they did when PG/Lisp were driving. tl;dr - I bet that it's not Lisp that made ViaWeb tick - it was Lisp + PG.
- harryh 16y ago> hiring more than a couple of people that know how to use > them turns out to be a very, very tough challenge That's tackling the wrong challenge. Almost none of engineering staff at foursquare had used scala before starting here. But they're all talented engineers who can learn new skills and thought that learning scala would be interesting. We've had very few problems with people picking up the language.
- billmcneale 16y agoThat was my point: by choosing an esoteric language, you raise the bar for the people you need to hire, which makes hiring very challenging. Now go scale that up to 50 or 100 engineers and you understand why it's not a viable strategy. Try it yourself, go pitch a startup and then tell the VC's and their consultants that you're going to use Scala... I know you're going to say that they don't know their stuff and you should be the one deciding, but it's actually the other way around: they know how to grow a business, and nobody with that knowledge will ever recommend to go with non mainstream language and technologies.
- technomancy 16y agoIt almost sounds like you're saying raising the hiring bar is a bad thing.
- technomancy 16y agogot cut off on my phone; meant to add: why would you ever need 50 Clojure engineers?
- billmcneale 16y agoFor the exact same reason you might one day need 50 programmers in any language: if your company flourishes. What makes Clojure so special that you'll never need that many?
- harryh 16y ago
- hassy 16y agoCross the bridge when you come to it. You only need a handful of programmers in the first couple of years of a startup's life. The better they are the better. Worrying about whether you'll be able to hire 20+ Clojure programmers is best left for when/if the company is successful.
- icefox 16y agoHmm my next project has to be a website written in brainfuck... But more seriously I did write a search engine using only sed for a little site of mine (http://toybin.org/ http://toybin.org/) just to see how far I could push sed. Its only feature is that you can have negative works like 'blue -car' will show search results for blue and not car. Haven't yet found any hard core sed hackers out there though... :D Edit: GitHub would also be another Erlang company (with a ruby frontend)
- kenjackson 16y agoThe problem with esoteric languages in this modern era (with the web) is what I called the "college music problem" with the increase of college radio. By the time the early 2000s hit, the people who listened to college radio no longer self-selected for people who knew a lot about music, but rather were just people who were generally anti-establishment. But they hadn't built up an especially rich musical knowledge base. Fast forward to 2011 and languages. Now I'm almost as likely to see Clojure on a resume as C++. Yet the quality of applicants doesn't seem to have gone up all that much. TDD knowledge seems to be MUCH more prominent, but I haven't noticed an uptick in knowledge of algorithms, complexity, anything under the hood, or programming (as can be judged in a day long interview). In 2011 the choice of language says less about the programming ability of the person, and probably more about their personality. Much like the college radio heads weren't especially musically sophisticated (on average, but of course some were brilliant), but they all seemed to share a counter-cultural vibe (even when you went from goth to hip hop to polka).
- chris_j 16y agoDo you think that choosing a non-mainstream language is really the result of some sort of counter-culture vibe? Some desire to be different? I ask this because I am a fan of Python and Clojure. I got into both as a result of reading pg's essays on Python and Lisp many years ago. Both languages were sold to me not as an act of rebellion but as more-powerful, higher-level languages that could get the job done more quickly. I quickly found this to be the case, compared to Java which I was used to. Nowadays, I grimace when I have to use Java or C and find myself missing a language feature from Python or Clojure that could have saved me an awful lot of typing and repeating myself. So, in my experience, was the choice of esoteric languages born of a desire to be different? No. Does it make me out as being an amazing programmer? Sadly no, not necessarily. I'd like to think, though, that it at least shows that I was enthusiastic enough to learn and use languages that I get a lot of benefit from.
- kenjackson 16y agoDo you think that choosing a non-mainstream language is really the result of some sort of counter-culture vibe? Some desire to be different? Not necessarily, but often so. More specifically, I think it used to signal someone who was more enthusiastic, passionate, engaged -- but now people will use them because they think it signals these things. And I don't think its intentional. But I think a lot like college radio, you see the guy who is leading the crew of outsiders and you see what he listens to. You see a lot of people who are signaling what resonates with you and follow that. It's odd that C++ is one of the most denigrated languages on the planet -- yet it really does seem like the people I know who most write C++ code still are a lot more hardcore than those I know who do Clojure (and its odd that I may know more people that do Clojure than C++). To put it another way the people doing the less mainstream languages are often putting themselves in the middle of it... "look at me -- look at the language I'm using". People doing C++ are saying, "look at my code -- look at my app".
- al3x 16y agoThis is from 2009. Scala has only improved since then, although it's still not a "mainstream" programming language by any stretch. You can talk to a crowded room of programmers who either haven't heard of Scala, or have heard of it only in passing and don't really know what it's about. That's fine. Programmers who are interested in learning and growing will always be attracted to new languages and technologies. What's interesting about Scala is that it's not solely academic. You can learn and do useful things with it at the same time. Later, when you've learned more, you can go back and improve your old code for added beauty and performance. That's a fun process, I think.
- swannodette 16y agoI think the title could be updated for 2011 - "The Python Paradox is now the Functional Programming Paradox". Scala, Clojure, Haskell, and Erlang - all your points apply equally well to them.
- BMorearty 16y agoThe author says exactly that, near the end of the article. He names those languages in particular.
- l0nwlf 16y ago> Of course Sam cannot live on technical stimulation and my gratitude alone Alas. If only we could live on technical stimulation alone :(
- jleader 16y agoPreviously discussed on HN: http://news.ycombinator.com/item?id=831817 http://news.ycombinator.com/item?id=831817
- hendler 16y agoThanks - hadn't seen this. HN didn't catch the dupe as the same article was submitted from a different url, which is now a 301 to this article.
- foljs 16y ago> In his 2004 short essay The Python Paradox, PG argues (perhaps controversially) that a company can hire smarter programmers if it chooses to write its code in a “comparatively esoteric” programming language. Yes, because as we all know guys messing with Ruby and Python ―mostly to create trivial and irrelevant web 2.0 apps and frameworks- are above average programmers... And node.js dilettantes are the next Bill Joys...
- StavrosK 16y agoDoes anyone know of a concise way to learn Clojure or Scala? I'd like to learn one of these languages, but I don't want to wade through interminable books to do it. Rather, I'd prefer it if there were a place where I could quickly pick up some basics and get a few ideas/exercises I could work on to discover the language on my own, a bit like "Learn Python in 10 Minutes" (http://www.korokithakis.net/tutorials/python http://www.korokithakis.net/tutorials/python).
- hendler 16y agoScala can run in command line mode, which is pretty useful for learning. If you are coming from Java, as I was, the learning curve was pretty shallow towards doing useful things. http://www.ibm.com/developerworks/java/library/j-scala01228.html http://www.ibm.com/developerworks/java/library/j-scala01228....
- StavrosK 16y agoThank you, I come from Python but I should be able to make some sense out of it...
- jfager 16y agoOne of the hardest parts of getting into Scala for me (coming from mostly Java and Python) was that the yield keyword means something significantly different from what it means in Python. This actually broke my heart early on, as Python's generators are one of my favorite features from any language. Delimited continuations in 2.8 make up for it and then some, but they're much harder to grok, imo. Python's yield gets you 80% of the same benefits with about 20% of the brain bending.
- nagnatron 16y agoFor Scala you could check First Steps to Scala(http://www.artima.com/scalazine/articles/steps.html http://www.artima.com/scalazine/articles/steps.html). For Clojure you have very nice video introductions by Rich Hickey on blip.tv.
- bootload 16y ago"... Of course times have moved on, and Python (and Ruby, for that matter) are definitely entering the mainstream. They are still fine languages, but they no longer carry as much of an early adopter aura about them... what are the new technologies to look out for? ..." http://nodejs.org/ http://nodejs.org/
- gtani 16y agohttp://news.ycombinator.com/item?id=2084732 http://news.ycombinator.com/item?id=2084732 (the last pardox thread)
- Stormbringer 16y agoUpfront I want to be very clear that I'm not hating on any of the languages that he mentions in the article. okay, maybe secretly hoping that Ruby will go die in a fire somewhere, but let's put that aside. What grieves me as I read that article is that it seems like he had a perfectly good way of doing it simply and easily, but then decided to go for a much more complex and risky solution (with what _he_ describes as poor tooling) ... for what? Simply to increase the difficulty level? Take the analogy of a backyard pool. Instead of just running up to the pool and doing a bomb (or even a belly flop), he has to climb up on the roof of neighbours rickety garage, where he is going to attempt to do a triple twist half pike helicopter/superman maneuver in order to score higher from the judges. Problem is, he's got a real risk of either missing the pool entirely or cracking his head open on the concrete. I'm not saying we should never use new languages or techniques or tools. What annoys me is that given the choice of doing something simple, or doing something complex, he chose the complex way, and then piled on the risk, with a side order of complexity. From the article: "Shortly after working this out and drawing my architecture diagram (a pretty insane-looking tangle of boxes and arrows on a sheet of paper)" Shouldn't that have been a pretty big red flag? Sure he found some superstar programmer to pull it off for him, but I can't help but think that a little bit of darwinian natural selection would have been in order here. The annoying thing is that you see this all the time in the Enterprise. Time and time again someone with architect in their title goes and makes an appalling horrible mess of the design, leaving the poor bastards at the coal face to sort it out and try to make the abominable crime against nature, reason and common sense actually work.
- fleitz 16y agoIf you're dealing with message passing architectures a language like Scala is a good way to go. Actors or Mailboxes in F# parlance fit perfectly with the way the architecture was described. His point about code fashion is also equally valid, what Seurat did with pointillism is impressive, printing a picture on on your inkjet is not, even though what Seurat did is essentially the same thing. Coming from an imperative background writing in a functional style has risk, coming from a functional background imperative style has risk. You can implement the lambda calculus on a UTM and implement a UTM in the lambda calculus, for all intents and purposes they are the same, however, in terms of elegance they are far different. (And there are arguments on both sides as to which is more elegant). I tend to agree with you particularly on 'enterprise architects' but the solutions are usually a reinvention of the wheel rather than marrying two disparate technologies that actually fit quite well together. Scala or another functional language is a great fit to a message bus architecture. Doing something for the difficulty of it usually doesn't attract a lot of smart minds, putting two things together that at first one wouldn't think of but that makes sense WILL pique the interest of a talented developer because he wants to see if it actually bears fruit.
- BonoboBoner 16y agoI have been reading books about Scala and used it for scripting here and there. I gained some Scala experience over the last years, yet it still amazes me how often people state: "Scala is not ready yet, but when it is, it is gonna take over Java as the next big language". Years have passed and this has failed to materialize. Maybe it will never be 'ready enough' to take over? What do you think?
- benreesman 16y agoscala is quite complex. it has O(m + n) complexity from functional and "object oriented" (single dispatch, backported type system) requirements, plus whatever their interactions cost, plus the novel shit. I admire anyone who really grasps it in it's entirety. as a mere mortal I gravitate to simpler things.