4 ms·
> A lot of people hate sexprs In all my time I have never come across a single Lisper, neither in person nor online, and I know far more than a few dozens, who
by iLemming 4mo ago
> A lot of people hate sexprs
In all my time I have never come across a single Lisper, neither in person nor online, and I know far more than a few dozens, who once grokked the REPL-driven workflow and the structural editing idioms only to later, for whatever reason, suddenly start disliking or even hating s-expressions.
All that so-called "hatred" stems from unfamiliarity. People fuss about Lisps lacking static types, without a single clue about how a "true" REPL trades them off for something different. They compare it to a Python or C# REPL and think "it ain't a big deal". Well, the Lisp REPL is quite different, and yes, a major deal - every single part of the Read-Eval-Print-Loop differs. They complain about "hard to deal with parentheses" and "I can't refactor without types" while having no clue how amazingly nice structural editing is in practice, that you never even think about parens - you only see structure, order and reason.
- jitl 4mo agowell, i guess i know what the grandparent was talking about when they said 'I myself have heard [...] "after a while you dont even see the parentheses" enough times [...]'. Thanks for the example.
- bjoli 4mo agoAs I said, i think they have been teaching long enough to have a pretty good basis for the claim that racket's syntax can be a problem. I am firmly in the "after a while you don't see the parentheses" camp, but I have a friend who I respect a lot who works in clojure (with Emacs/cider/paredit) that just doesn't like it. I mean, I prefer sexprs above all other syntaxes, and I have had people tell me I just need to get used to indentation syntax or whatever they fancy.
- lmm 4mo ago> In all my time I have never come across a single Lisper, neither in person nor online, and I know far more than a few dozens, who once grokked the REPL-driven workflow and the structural editing idioms only to later, for whatever reason, suddenly start disliking or even hating s-expressions. And we've never seen bullet holes in these parts of the plane, so there's no point putting armour there.
- iLemming 4mo agoIt's not about survivorship bias, it's about notation. It's like "hating Leibniz's dy/dx because Newton's dot notation already exists" and I'm arguing that people don't just "hate the notation", they simply misunderstand the principles of calculus. I'm not saying that notation preferences don't have consequences, but in this case, I've seen far too often the evidence that programmers ignore the underlying ideas outright, simply because they didn't like the notation on first sight.
- lmm 4mo ago> It's not about survivorship bias, it's about notation. It's like "hating Leibniz's dy/dx because Newton's dot notation already exists" and I'm arguing that people don't just "hate the notation", they simply misunderstand the principles of calculus. Ok but where is the dot notation? If this is the only notation available for those ideas, how can you be sure that it's the ideas that are the problem and not the notation? > I've seen far too often the evidence that programmers ignore the underlying ideas outright, simply because they didn't like the notation on first sight. Then why are you opposed to people presenting the ideas with different notation, if the ideas are what you think is valuable?
- iLemming 4mo ago> why are you opposed to people presenting the ideas with different notation What are you talking about? I'm not opposed to anything, I don't know where that conclusion comes from. I'm just trying to explain why people hate s-expressions. Because of the unfamiliarity. I remember the time before I convinced myself to give Lisp a try - I'd look at it with all my previous knowledge of other programming languages and just didn't see it. I thought it was "unreadable", "weird", and had no merits in the "modern" world of computing. I was convinced that Lisp is archaic and there's no practical reason to use it. I was wrong on all counts. Learning Lisp and using it in real projects made me appreciate programming more, it taught me things that I haven't imagined before, my only regret that I didn't do it sooner.
- 4mo ago
- adastra22 4mo agoThis is survivorship bias. People who don't like s-expr aren't lispers. I've used Lisp before. I can read s-expr code. Unfamiliarity is not the issue. I just don't like them. I don't like Haskell/ML either, and I've written large projects in both, so it's not a Lisp-specific thing.
- alekq 4mo agoConsidering your experience and preferences, what do you like?
- iLemming 4mo agoNo answer from the OC - I suppose they just hate everything :) I guess, with enough experience you kind of start disliking every single motherfucking PL. I don't hate programming languages, but gosh, some code I've seen - I just can't help it but I wish to talk to whoever wrote that piece and ask them: "were you okay when you did that?".
- iLemming 4mo ago> I just don't like them That is what I don't get. I have used many different languages, and often is not the syntax that I don't like - I may dislike the semantics, the runtime, the tooling, but syntax, really how? It's like "I hate Greek alphabet", even though this is a weird comparison - alphabet is a flat bag of arbitrary symbols with no structural role, so disliking it sounds incoherent by construction. I just can't ever get over "s-expressions hate", in such a way like: "What are you even talking about? There's practically zero syntax in Lisp."
- weatherlight 4mo agoI love Lisps, ML-family languages, etc. Languages like Java or Go are just painful for me to program in, and I know I’m probably in the minority there. But honestly, I think a lot of it comes down to the fact that syntax carries semantic expectations. Certain syntax makes you expect a certain model of programming: mutability, imperative control flow, objects everywhere, etc. Gleam is a good counterexample. It has an ALGOL-ish syntax, but semantically it’s a functional language, and it’s wonderful to read/write. Same with Ruby: the parts of Ruby that still make me smile are mostly the parts that feel Lisp-adjacent. It’s kind of wild that we live in a world where, for most programmers, syntax seems to matter more than semantics.
- iLemming 4mo ago> syntax carries semantic expectations True! Syntax is a signaling system. Braces and semicolons signal the C-family, so you prepare for statements, mutation, sequential side effects, and objects. Parentheses-first signals Lisp, so you expect recursion and macros. Significant whitespace signals Python. Before you have read a single semantic line, the notation has already established a prior expectation. That is real, and most language discourse ignores it. But syntax carries more than semantic expectations. It signals era, tribe, tooling, and aesthetics too. The paren signal says Clojure, CL, Emacs, REPL, niche, old-and-proud as loudly as it says functional. Some of the aversion to parentheses originates from sociological resistance to these signals rather than from semantic concerns. Yet honestly, grokking Lisp can make a true polyglot out of a coder. It did it for me. "A Lisper" is not always someone who writes and reads Lisp full-time. Fully fluent Lisper can rationally and successfully use any other PL syntax, because they understand the semantics, even though they'd actively try optimizing the connotation and ergonomics layer, a genuine separate axis.
- rtpg 4mo agoI think if you believe that the aids types give for refactoring are equivalent to structural editing, then you are the one who might not get the value of typing information (I say this as a Python person, and am totally willing to accept lack of typing info in plenty of situations) REPLs are nice and good, but when you're working on large enough systems it's nice to have some static foundations for your facts.
- iLemming 4mo agoI don't "believe" things, I pragmatically choose the tools that work, the ideas that have merits. I did not say "refactoring is equivalent to structural editing", and I specifically talked about comparing Python REPL to Lisp's. I don't lack experience working with type systems, I have used over a dozen different PLs, some of them were weirdly unusual - I once even had to program in a language with all operators in Russian. > when you're working on large enough system I have built and supported sufficiently large systems in various languages, and have seen firsthand the trade-offs Lisp systems can bring. The holistic experience of using Clojure often can beat systems with advanced static types, but you probably won't ever notice it, because you'd first demand something to "believe" in. You guys (replying to the comment) seem to be convinced of my one-sided bias for defending s-expression syntax and dying for it. I'm defending it only because it gets bad rap from people unfamiliar with the merits. REPL-driven workflow, live image, structural editing, homoiconicity, code-as-data - none of these require the surface syntax to be parens and Rhombus is the living proof. Structural editing operates on any AST. The actual jewel is homoiconicity, and sadly it gets largely ignored by the majority of programmers today. S-expressions probably are the simplest form of syntax to operate homoiconic entities - the simplest notation that is at once a fully explicit tree and directly the language's own data structure. "I love homoiconicity" does not uniquely entail "I love parentheses", alas, programmers off the bat hate parentheses, often without even attempting to understand their significance - they think it's "aesthetic choice". They don't even for a second look around and get curious for why people keep making new Lisp dialects, 70 years on.