5 ms·
This old argument. I won't say a thing about Lisp. Let's talk about Ruby. For those of you who were using Ruby in 2005 when Rails was released. Are there any of
by raganwald 14y ago
This old argument. I won't say a thing about Lisp. Let's talk about Ruby. For those of you who were using Ruby in 2005 when Rails was released. Are there any of these arguments that you haven't heard at least once in the last eight years about Ruby? That it's too powerful, that programmers make their own idiosyncratic worlds, that programs are too complicated to understand, &c. &c.
Yet, somehow, There is tons of working Ruby code in production and people have found a way to harness its power. People are awfully clever, I very much doubt that any serious language (i.e. a language not designed to confuse) can't be whipped into shape by a team of reasonable people who are motivated to succeed.
The "failure" of Lisp has a very simple explanation, so simple that people gloss over it. Every successful language began as the scripting language of some system that was itself exploding in popularity.
To be a hit, a language must arrive in the mass market's consciousness in tandem with its "platform." Objective C failed until the iPhone was a hit. C was a hit with Unix and then Windows. Ruby was a hit when Rails was a hit.
Lisp was the scripting language of Lisp machines. When the "AI Winter" hit Lisp machines, it hit Lisp. It never became the scripting language of something else that was exploding in popularity.
Today JavaScript is the scripting language of browsers, so it is a hit, and it doesn't matter whether its first-class functions are elegant (they are), whether its semantics have stupid corner cases (they do), or whether its inheritance model is obscure (prototypes!?).
Just show me something exploding in popularity, and I'll show you a successful programming language.
UPDATE:
I see folks are arguing about what colour to paint the phrase "Scripting Language." Must a scripting language be interpreted? Is Java interpreted? What about JIT techniques for JavaScript? When we transpile CoffeeScript to JavaScript, what is going on? I have a CPU that executes microcode. Is ASM for this CPU really an interpreted language?
All good stuff. By the way, Lisp was originally interpreted, compilers didn't come along until later. So... Was it a scripting language until it was "compiled?"
Have fun, but please remember to leave room in the shed for me to park my tandem.
- S4M 14y agoWhat are python and java the scripting languages of?
- raganwald 14y agoI can't speak to Python, but Java was for a short but incredibly relevant time, the cross-platform scripting language of web servers. Java was the scripting language of WebSphere and Tomcat and a few others. During the first dotcom boom, it was the lowest-risk platform choice.
- pcote 14y agoI consider Python to be the scripting language of "everything else". In the apps I use frequently, Python scripting support shows up in Blender, GEdit, and Linux Mint.
- jimbokun 14y agoThank you for your very clear, succinct explanation of how computer language popularity works. There may be exceptions, but they are pretty few and far between. I think this post should be bookmarked and referenced every time an argument is made using a computer language's "popularity" as a proxy for the quality of that language.
- jlongster 14y agoI like that explanation. It aligns well with my belief that language syntax/features/etc really don't matter that much in the grand scheme of things. It's unfortunate because I know people that have not chosen Lisp as the scripting language because they want their product to explode in popularity, and they fear Lisp would actually hinder that. All that said, with Clojure I think it's obvious Lisp hasn't really failed at all. Maybe it's better as a language just outside of the mainstream.
- fogus 14y agotheir product to explode in popularity, and they fear Lisp would actually hinder that. I've written systems in Lisp and as far as my clients know it might as well have been written in JSON. They don't care.
- jlongster 14y agoOh I completely agree; I'm glad you said that so others don't think it's true. Some people do think they care though, especially for tools targeted at developers. I knew a game company in Montreal that was building a game development framework in Gambit Scheme. It was awesome, and their designers found the s-expression configuration format incredibly intuitive.
- pilgrim689 14y agoYou're conflating "success" with "popularity". Lisps weren't invented to become "popular", they were invented to get something done in a way that other languages couldn't easily do at the time. One only "fails" if one cannot accomplish its purpose. Different languages have different purposes, so "success" as a measure to compare them is inane... unless the purpose of all programming languages should be to be the most popular programming language?
- ubernostrum 14y agoExcept the unspoken continuation of essentially all praise of Lisp is "...so if it's this incredibly awesome, why isn't it used more?"
- orangethirty 14y agoThere are a lot of snobs in the Lisp community. They can't stand the thought of Lisp going mainstream, because their language is too beautiful and perfect. Every language has them, but Lisp seems to have the highest ratio of snob/regular person. I love the language, but the community is not as good as others. edit: I'm getting downvoted by the snobs themselves. Hilarious.
- acheron 14y agoAs the famous "Brief, Incomplete, and Mostly Wrong History of Programming Languages" [1] essay puts it, Lisp's key techniques are "recursion and condescension". [1] http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...
- zem 14y agoverity stob said that first (and the essay did attribute it correctly)
- pivo 14y agoThis may be true of the Common Lisp community but the Clojure community seems to be very welcoming and I think one of the more exciting communities around today.
- nnq 14y agoI think Ruby's success is an example that the era of "the language of the platform" is gone: there was no OS or app to use Ruby as its scripting language, but there was more than one language to choose from for building a web framework, and DHH happened to choose Ruby. Same with Python in the scientific computing field. Or (unfortunately) PHP in the web world. We have multi-languages VMs (JVM ostensively, but CLR too...) and multi-platform languages galore. The era of the platform language is gone, and it's a free for all language war, where features and libraries are all it matters, and I'm sure Lisps will win more ground in one form or another, though something like Scala will probably "rule the world" :)
- babarock 14y agoThe core of the argument has nothing to do with popularity. You're right about everything you say (if only you glossed over notable exceptions like Java or C++), but we're discussing "power", not popularity. Unfortunately, power has a very positive connotation. As a programmer, wouldn't you want to use a more "powerful" tool? However it's different when it comes to programming languages. Too much power can hurt you. Realising that there can be such a thing as "too much power" is new to me or at the very least, it's counter-intuitif enough to deserve being debated. That's the point of, or at least that what I take away from, this page. Arguably, the success of Java comes from its complete lack of Lisp-y power. Python may be "powerful", it makes a big deal to enforce the "one way to do it" culture and has always had a love/hate relationship with functional features for this exact reason. Speaking from experience, I find it easier to read and understand Java or Python than I do Lisp or Lua (another "powerful" language where every project will inevitably implement its own object model, basically rebuilding Python or Ruby). So yes, I believe that there's a spectrum of "power" between programming languages, and more "power" isn't necessarily better. It's a characteristic, nothing more. But more importantly, I wish we could start discussing and comparing programming languages without talking about something as meaningless and volatile as popularity. I don't care if my favorite language becomes the most popular. I don't want to unify all programming languages into one. I am happy when different languages solve the same problems differently, more or less elegantly, and I have so much fun learning all these approaches. I don't care what "succeeded" and what "worked". I sincerely mean no offense, but I'm tired of having people cut the debate short by turning any meaningful comparison into a popularity contest.
- eru 14y agoOn interesting argument in favour of Haskell, is exactly that it takes the right powers away from you. The powers that allow parts of your programme to screw with other parts: side-effects.
- raganwald 14y agoOk, I'll bite. How would we go about empirically measuring whether too much power" is harmful? Do we give 100 teams a task to accomplish in Lisp, but tell 50 of them that they can't write their own macros? Or tell 50 of them that they can't use continuations? If continuations correlated negatively with success, how would we know whether continuations are "too powerful," or merely "poorly designed?" (There is a lot of talk these days about whether continuations are a "Turing Tar Pit" and that a better mechanism needs to be invented) Or perhaps our 100 programmers are merely unfamiliar with them, and as a result don't use the features well? My feeling when I consider thought experiments like this is that it is very difficult to define expressions like "too powerful" with precision. This imprecision leads to the effect where we twist our explanations to suit ur biases. So if we think Lisp is "too powerful" and that it failed in some sense, the lack of precision around "power" and "failure" allow us to draw whatever conclusion we like about the relationship between the terms.
- zimbatm 14y agoIt's more complicated than that. Languages don't become a hit in a night. It's because the authors carefully chose the features in a way that makes the language pleasant to use or that it's particularly adapted to solve a set of problems. It's a complex ecosystem that also includes package managers, editor support, ... When you read ruby you won't have 10 different implementations of conditionals. They're implemented with keywords and the language doesn't have macros so unless you want to add more indirections you have to take Matz's decision. There is also a common understanding of what is idiomatic ruby and not. I'm not sure it's the same with Lisp. It seems way to easy to come up with your own smart constructs. It seems to me that this flexibility is what makes lisp hard to settle as a language. Everyone gets their own say on small details that prevent the bigger things to emerge.
- michaelfeathers 14y agoJavaScript's success is particularly freak-ish. In the early days of research into prototype-based languages, I don't think anyone imagined that a language with a model so obscure and research-y would become the ubiquitous programming language in the world. I like how you put that. Explodingly popular languages owe their success to tandem platforms. It makes much more sense than other explanations.
- gngeal 14y agoI'd actually argue that Javascript's object model, given its current usages, is close to ideal - but not perfect. It would be better if the language provided a set of kernel functionalities for you to build whatever higher object model you might need. I have in mind something akin to this: http://www.vpri.org/pdf/tr2006003a_objmod.pdf http://www.vpri.org/pdf/tr2006003a_objmod.pdf Foe example, ES6 is supposed to bring us some meta-stuff, but that wouldn't be necessary if the core model were more general.
- lispm 14y agoCOBOL, Fortran, C++, Ada... were the scripting languages of what exactly? If I were staying in your argument, then Lisp was the language of symbolic AI. The language where things like symbolic mathematics (Macsyma, Reduce, ...), planners, theorem provers, natural language understanding, reasoning systems, expert systems, knowledge-based systems (Cyc, ...) were explored and first tried to commercialize (mid 80s). Symbolic AI funding went away with the cold war ending... Lisp was actually invented and designed for this. John McCarthy was designing Lisp as a vehicle for (his) AI research. There might still be a lot of Lisp users. Even among AI researchers (and related domains) there are many using Lisp tools which you probably have never heard of - like ACL2 (a theorem prover), PVS (a theorem prover used at NASA), ACT-R (a cognitive architecture with more publications written about then you can ever read). The usage of Lisp may even be constant in these domains. There was an explosion of programming in general. Outside these domains Lisp never really participated in this explosion (with a few exceptions like Lisp in Autocad, Lisp in Emacs, ...). But should it? Lisp's almost unbounded flexibility is obviously not needed by the average programmer. It is actually a something which makes a bad programmer worse. 'Lisp Machines' were just one development/deployment platform - 10000 sold in a decade. Lisp was used before Lisp Machines and after Lisp Machines. > It never became the scripting language of something else that was exploding in popularity. Autocad sold millions of copies and is still widely used today. Several Autocad 'clones' support the use of Lisp for CAD scripting.
- bitdiddle 14y agoI've always been curious about McCarthy's motivations and whether he was informed by Church's work on the lambda calculus. I heard he was schooled in functional analysis and symbolic differentiation and operator theory were what drove the invention of lisp, AI came later. I'm sure I could research it but I'm too lazy :)
- lispm 14y agoThat sounds like a new version. McCarthy says in his 1960 paper about Lisp just in the first paragraph of the introduction: > A programming system called LISP (for LISt Processor) has been developed for the IBM 704 computer by the Artificial Intelligence group at M.I.T. The system was designed to facilitate experiments with a proposed system called the Advice Taker, whereby a machine could be instructed to handle declarative as well as imperative sentences and could exhibit ``common sense'' in carrying out its instructions. The original proposal [1] for the Advice Taker was made in November 1958. The main requirement was a programming system for manipulating expressions representing formalized declarative and imperative sentences so that the Advice Taker system could make deductions. So it was developed by an AI group for an AI software (Advice Taker).
- neilk 14y agoKeunwoo Lee (aka cog) made a very similar argument back in 2010, "languages ride platforms to popularity". http://abstractfactory.blogspot.ca/2010/05/how-to-design-popular-programming.html http://abstractfactory.blogspot.ca/2010/05/how-to-design-pop... But I'm not sure this argument applies in the 21st century. Languages like Clojure and even Rust get significant attention just for being better, and they are not tied to any must-have tool.
- laureny 14y ago> Languages like Clojure and even Rust get significant attention just for being better They are not getting any attention beyond Hacker News and reddit. They are extremely marginal programming languages and they both have a very high likeliness to be completely gone and forgotten in the next couple of years.
- neilk 14y agoI wasn't clear - the point is that in the 21st century, you are working in a multi-language paradigm no matter what, tying together disparate services with neutral protocols like HTTP. Nobody knows or cares what language a server is running. So weirder languages are at least worthy of investigation. EDIT: Also, pg's "Beating the Averages" essay, arguing that non-mainstream language choice can be the foundation of a startup's success, is more or less the foundational text around here.
- gtrak 14y agoReal people have jobs writing clojure. I can't speak for Rust.
- kens 14y agoI'm sympathetic to raganwald's overall argument, but "scripting language" is pretty meaningless if you call Java a scripting language, let alone others in this thread calling Ada and Fortran scripting languages. I follow Erik Meijer's view on programming language success [1] - In real life, programming language success is based on the perceived crisis divided by the perceived pain of adoption. Successful languages such as JavaScript, C, Java, or Ruby introduced solutions to real problems, and they have relatively low perceived pain of adoption. On the other hand, Lisp has a high perceived pain of adoption and there's nothing specific that it solves for most users today, so there's little popularity. An unrelated thought experiment on the importance of languages vs libraries: for most programming problems, would you be better off with an old language and today's libraries (e.g. Fortran 77 somehow using the .NET or Python libraries), or a modern language without modern libraries? I argue that you could solve real-world problems fairly efficiently with the former, but would be pretty stuck with the latter. And an unrelated thought on languages and Turing completeness: has anyone considered "OS completeness" - how close you could come to writing an OS in the language? Obviously you need a bit of chip-specific assembly language, but C gets you very very close. Something like Java needs a larger assembly language layer [see jnode]. [1] http://www.righto.com/2008/07/why-your-favorite-language-is-unpopular.html http://www.righto.com/2008/07/why-your-favorite-language-is-...
- mattmanser 14y agoJavascript was the only cross-browser scripting language, that's what made it a success. It took almost a decade before Crockford turned up to say 'here's how you write javascript so it's not a complete pita'. Would javasript shrivel and die if all the browsers released Python support tomorrow? Probably not any more, but 6 years ago, most definitely. Same thing with Ruby, without Rails would it be anywhere now? So half your examples actually show there's something very different going on when trying to explain why languages become popular. What languages have truly emerged without a leg up? Python? PHP as the server-side language? C# emerging ahead of VB.Net? Scheme?
- lispm 14y agoA scripting language is a language to extend applications. These applications tend to be written in languages like C, Pascal (think Delphi), C++, and others. Like a CAD system is written C or C++ with an extension language added on top. The interpretation is only an implementation detail. For example PTC's modeller is written in C++ with several million lines of Common Lisp on top. Lisp compilers exist from day 2 in its history. The first self compiling Lisp compiler was written in 1962, IIRC. Maclisp was mostly compiled, Lisp Machine Lisp was compiled, Common Lisp was designed for compilation from day one.