3 ms·
It might be an unpopular position to take here, but I really think that what I think of as "language snob languages" (Lisp, Haskell, Erlang, OCaml . . . not Rub
by akeefer 18y ago
It might be an unpopular position to take here, but I really think that what I think of as "language snob languages" (Lisp, Haskell, Erlang, OCaml . . . not Ruby or Python, though) can't ever be mainstream because the barrier to entry is just too high even for competent programmers. There's a network effect problem to be sure, where people don't use it because the docs/frameworks/examples/toolkits aren't there, but part of the reason those things aren't there is that the language doesn't appeal in the same way to people who want to build those things and the languages themselves have enough of an impedance mismatch with how people think about things to keep a lot of otherwise-competent engineers from investing their time in them.
In other words, it's not just about tools or marketing or docs: some languages, while certainly more useful in the hands of a skilled expert, are so complicated and require so much dedication to perfecting their use that they can't possibly ever become mainstream.
The high barrier to entry for those languages is not just because of docs, tools, lack of standards, etc. It's just an inherent part of those languages, and what makes them so powerful is exactly what makes them difficult to get started with and what keeps them marginalized.
- rkts 18y agoC is more difficult than Lisp or OCaml, but it's extremely popular.
- akeefer 18y agoI'm not sure I agree . . . pointers in C throw people for a lot of loops, but aside from that the types are as simple as you'll let them be and I'm pretty convinced that most people have an easier time thinking in an imperative fashion than a functional fashion. The functional nature of Lisp just throws most people for a loop at first, because it doesn't match the naive breakdown of most simple programming problems. Likewise, the type system in OCaml throws a lot of people for a loop. Mastering pointers, worrying about memory leaks, dealing with the loose typing, etc. are all things you need to do to write code well in C, but you can kind of muddle through as a beginner without those. You can't even get started with Lisp until you figure out the right way to break down your problem, and that's a huge barrier for most people. To put that another way, it's easier to mentally model what your algorithm should be in C than in Lisp (for most people), even if the actual implementation is a pain to get right, and its the mental model that's a barrier to entry for more "advanced" languages. That said, C is certainly a harder language to learn than Python or Ruby.
- rkts 18y agoIf we were talking about purely functional languages, then I would agree. But Lisp isn't purely functional; it has assignment and loops and arrays and all the rest. You can program in the subset of Lisp that allows the same "mental model" as C and get the same results without worrying about pointers or buffer overflows. So I think Lisp is strictly easier.
- jsmcgd 18y agoThe fact that you only have one way of programming in C, 'the C way', can actually be a blessing. I've found that I've been paralyzed by the flexibility of Lisp. There are so many different ways to do the same thing that it is hard to choose between them.
- gaius 18y agoThe key point is, you can download Python and be doing useful work with it very quickly. If you are a complete novice, you could still probably have something actually useful done within a day. This is in part due to the library you get with it. The path into Python is very smooth too. I look back on my own code; at first I used it as a sort of glorified shell script, and now my code is all list comprehensions and lambdas. Python (the technology and the culture) caters to all levels. There's very rapid positive feedback, everything you learn immediately has a reward in power/productivity. OCaml for example is a language I'm into at the moment, but it's a good thing I knew C first because sorting out it talking to my Oracle databases has been a complete shag (and, crucially, not something that the language developers, being academic researchers, give a stuff about). And my experience is, you have to be a relatively good OCaml programmer before you can start to be productive; there's a lot less opportunity to learn by doing, you have to study first. The point at which the positive feedback kicks in is a lot later.