HNHacker News
TopNewBestAskShowJobs

iLemming

2,928 karma · joined February 14, 2015

@iLemming

[ my public key: https://keybase.io/agzam; my proof: https://keybase.io/agzam/sigs/La7qFk8YkbwfkgeSx7vkBWBba2f3HIpZyNVxUHvshbU ]

submissionscomments
iLemming··on What makes Lisp difficult to read?
So what's your point? Physics is hard for those who don't know it? Butter is buttery, water makes things wet?

Any language is difficult at first. Nobody ever comes to any PL, opens random piece of code and goes like: "yup, I understand everything". It is called "code" for a reason, it's not "revelation", it takes some effort to grok it.

iLemming··on What makes Lisp difficult to read?
McDonald's is the most popular restaurant in the world. Constantly growing, it's a name everyone knows. That's not my kind of food. I don't even consider it "food" really, I'd eat it only if there's no other option. Have you ever heard of Sobrino de Botín in Madrid? Probably not. It opened in 1725 and still serves good food. In my book, that's a success story.

I bet you have no idea what Emacs is for, what it is capable of; you probably think it's "a text editor", yet in experienced hands it simply destroys all the other alternatives, easily. TextMate, Eclipse, Komodo, Aptana, Zend Studio, Dreamweaver, Brackets, Atom, Sublime Text - each of them at some point in time was more popular than Emacs, most of them slowly disappeared, Emacs is still here, stronger than ever. That is a success story.

I guess you have techno-myopia, and just can't see past your own bubble - some ideas are simply timeless: Lambda Calculus, Relational algebra and SQL, Vim modality, Regular expressions and finite automata, Homoiconicity, Unix Pipes, Curry-Howard, Immutability, Garbage Collection, etc.

None of that will ever be affected by the industry trends and will always be relevant. Nobody can kill Lisp because it's not a concrete implementation, it's an abstract idea. Clojure won't ever die, it will simply transform into another kind of Lisp. Just like it emerged as a Lisp, built on top of other ideas. Newton's laws no need to be "successful", they seek no recognition, it's not a popularity contest. They are still relevant, even after Einstein's discoveries.

What's your goal here? To prove something to me? Buddy, I'm far beyond redemption - I've seen way too much crap, and I learned how to collect good ideas and put them to good use. I suggest trying something like that. Some ideas are worth attention.

I don't know what the heck makes you so angry; I suppose it's your own inability to look into a given idea and, with candid curiosity, attempt to see what it is about. Your views are one-sided. You should at least acknowledge that I have seen both sides of that coin and maybe, just maybe, there's some truth in my tale, despite of me being biased (everyone, almost always is).

iLemming··on What makes Lisp difficult to read?
Most people don't know jack squat about first and second laws of thermodynamics. Yet I don't see articles of kind: "why physics is so difficult to grok" or shit like that. They don't complain about it, because everyone, even ten year olds understand - any shit feels difficult until you learn that shit.
iLemming··on What makes Lisp difficult to read?
> That went to Nazism real fast.

Thank you. Perfectly proves my point. "Some people still get triggered by the title alone."

> most people do think Lisp is difficult to read

Correction. Most people unfamiliar with Lisp think that. I've been using Lisp for over a decade, I went to conferences, organized meetups, used Lisp for work and for personal projects, I met many experienced Lispers and I have mentored complete newbies. Not even once have I met someone in person who actively practiced writing and reading Lisp and ever complained about its readability.

What makes Ramayana difficult to read? Sanskrit - you need to learn darn language. What makes Quran difficult to read? Arabic - you need to learn darn language. What makes Lisp... the language, you need to learn the darn language. That's all you ever need to do. And you have to do it once, never twice, never repeatedly. Do it once in your life and that's it. It suddenly becomes not so difficult to read. Just learn the fucking language. Why the fuck complain about anything without first learning the darn thing?

iLemming··on What makes Lisp difficult to read?
Yeah, right. The biggest digital bank in the world uses it. Nubank, using Clojure as their primary driver, grew from ~12M customers in 2019 to 131M in 2025 - almost 1000% growth in less than a decade. For JPMorgan (just for comparison), getting to their ~80M customers took around 150 years and dozens of acquisitions.

Netflix uses it. Amazon uses it. Apple uses it. Walmart built their billing system in it. Cisco's entire cybersec stack is on it. Even NASA uses it.

Let's see, how has it been "dying"? Clojure, Clojurescript, Clojure-Dart, Coalton, Fennel, Janet, Jank, Jolt, LFE, Joker ... and these are relatively recent additions. The amount of Emacs Lisp on GitHub alone should be at least surprising - go check the GitHub lang stats, isn't it weird - a non-general-purpose PL, that has one and only one intent, is among the top languages, why? Check the r/emacs subreddit - there are daily, pretty much daily announcements of some new Emacs packages. Who the hell are these psychopaths? Don't they realize that Lisp is "dying"?

You don't know jack shit about whatever you're trying to talk about, and you call yourself "a hacker"? Honestly, it's pretty sad when someone can't find the time and patience to learn an instrument and then blame their own failure on the thing. Rather pathetic.

iLemming··on What makes Lisp difficult to read?
What's there "to prove"? It took two people getting dragged into a downvoted and dead topic and meticulously fishing for references for you to finally accept that Common Lisp was never dynamically scoped - something you could do yourself, without wasting anyone's time. You perceive Lisp to be "cumbersome and stupid" and "inhumane" due to your own personal opinions. You just lack understanding of the mere idea of a homoiconic language and are pigheadedly trying to prove to the world that somehow it's not a good idea or whatever. Well, I can tell you this - nobody really cares. They're just your opinions; you're entitled to have them, just like I reserve the right to have my own.

Opinions don't mean shit unless they are supported by evidence, and Lisp has plenty of it. It has survived subjectivity for almost 70 years, and it's still thriving. Good ideas don't need to prove anything; they just exist. If you still cannot see the reasons for why so many people still choose to use it, I'm sorry, that's just dumb and nearsighted. And you don't really have to listen to me - try to find some renowned CS academics or big-shot programmers publicly bashing Lisp - you won't find many.

iLemming··on What makes Lisp difficult to read?
You just used some contrived example to make it look harder to read, perfectly knowing that there are dozens of different ways to improve your specific snippet for readability, and I simply grabbed the first method I could think of. I can equally chose pretty much any PL and make it look very nasty, it's not that hard. "Readability" is not some intrinsic value of any language.
iLemming··on What makes Lisp difficult to read?
> For the record "Jtsummers" and "iLemming" do look quite a bit more alike than two random usernames!

Great. Arguing about "readability" with a dyslexic person. What could ever go wrong here?

iLemming··on What makes Lisp difficult to read?
> You are not familiar with the history.

You are incorrectly presumptuous. Common Lisp had lexical scoping as a design requirement from its first technical meeting in 1981, three years before the language was published. https://dl.acm.org/doi/10.1145/234286.1057818 https://www.dreamsongs.com/Files/HOPL2-Uncut.pdf

Steele wrote the Lambda Papers in 1975-1980, before CL existed. They contrast Scheme with MacLisp, and Steele then brought Scheme-style lexical scoping into CL.

CL marks itself as different from its dynamically scoped predecessors. https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node43.html

> It's not common lisp.

It is, but you're correct, it's not core of CL, it's from ruricolist/serapeum - a widely known CL lib.

iLemming··on How to keep enjoying programming in a world of LLMs
> don't bottleneck on coding

It makes me feel very uncomfortable to say this - I don't want to appear presumptuous or patronising, but it honestly sounds almost like you have little or no clue about this.

LLMs are not about code generation. Code generation is almost like a side-effect and there are so many different things LLMs are really good at way before you get to even talk about code - gathering data by its semantic fingerprint; classification and routing where the boundary is fuzzy: is this a bug, a config error, or a support question; semantic diffing; reading stuff nobody will read: a 900-line helm file, a dependency tree, six months of changelogs, a vendor contract, etc.

If you have never dealt with cases where the input is messy and the matching criteria are impossible to write as rules, yes, of course it would feel like you don't even need LLMs. But pretty much any serious software does have plenty of those, and LLMs are incredibly good at that. Not only they are great - they are quite irreplaceable, in the sense that, yes, I won't die if I stop using the Internet, but any reason for choosing that path obviously must have some drastic rationale.

iLemming··on What makes Lisp difficult to read?
> read beyond the title

Feels good to find a perfect opportunity to be witty and snarky, yeah? Well, allow me to murder this vibe of yours. Titles do exist for a reason. This article's title specifically, assumes too much. It's nearly click-baity. Imagine a title like "Why does the Holocaust feel like a hoax?", and then it goes into intricate detail to prove it isn't. Some people still get triggered by the title alone.

iLemming··on What makes Lisp difficult to read?
I honestly never understood this premise of Lisp being "difficult", "demanding", "complicated", "taxing" or "annoying" to read. Over the course of my career I've had to learn over a dozen different PLs. Every single one of them was "hard to read", until it wasn't. Every single one of them required some initial effort, and not a single one of them was like "yup, I clearly understand everything, don't even need to read the docs..." And honestly, I'm not even a very talented programmer. I'm pretty average.

What's interesting is that at the point when Clojure finally started feeling more intuitive and I was able to quickly scan the code snippets and understand the flow, it almost wondrously opened the gates for just about any Lisp. I can easily switch between Lisp dialects, as a matter of fact I can do it multiple times a day and the overhead is so tiny, it feels like I'm dealing with the same language, just on a different platform. It's by far the easiest language to deal with, be that Clojure, Clojurescript, ClojureDart, Fennel, Elisp, CL, Jank, Jolt, etc.

I think most programmers simply don't do that. They don't switch between different platforms (and thus languages) very often, they pick one or two, get proficient with them and build some loyalty or whatever, the language almost becomes their identity (at least at that point in their lives, until they find a new one).

And then the problem with Lisp dialects is that they are pretty niche - they are not so widely used in the industry, therefore the incentive to specifically learn Lisp is very moderate at best. But people hear stuff like "how expressive and powerful...", "Emacs has no competition", yada-yada and they'd try to spend a weekend to see what it is about, then look at the unfamiliar syntax and go like: "hmm, I don't know..." They try to learn kung fu but skip all "Mr. Miyagi's bullcrap". Alas, it just doesn't work that way.

For me, it was absolutely worth it. I think learning Clojure saved my career. At the time I was so overwhelmed with complexity in the apps I was trying to build and maintain. I started having an existential crisis - I thought about leaving the field for good and starting something else. Turns out, I wasn't a complete failure, I wasn't stupid, and I didn't lack incentive. I just needed a different perspective. And that "weirdness" and "uniqueness" of Lisp was that inflection point that I desperately needed in my life. Guess what? Becoming a Lisper helped me understand other languages much better.

I think I found a lifehack - want to become a polyglot programmer without wasting ten years of your life? Grok Lisp. It will do.

iLemming··on What makes Lisp difficult to read?
There's so much crap here, I don't even want to waste my time to unpack.

> Lexical binding was added to Common Lisp almost as an afterthought

Common Lisp was lexically scoped from day one. You're arguing about CL using Elisp's history.

And your "cumbersome and stupid" snippet is that, because, well you wrote it that way.

     (local
       (def user (find-user user-id))
       (require-admin user)
       (def report (build-report user))
       (write-audit-log user report)
       (def receipt (send-report report))
       (record-delivery receipt))
       
In modern Lisp dialect like Clojure it would look even more cleaner.

Lisp is the language where you do whatever syntax is suitable for the task, yourself, in an afternoon. In Python you wait for a PEP.

iLemming··on What makes Lisp difficult to read?
There's nothing "natural" about reading. We've not evolved as a species to have natural reading abilities. Of just about anything - be that cuneiform, hieroglyphs, katakana, math formulas or Sanskrit. Every person has to be taught how to read. A Mandarin-speaking person may argue that their writing system is "more natural" simply because it's one of the oldest and most widely used in history. Would you buy that argument?
iLemming··on How to keep enjoying programming in a world of LLMs
How? It's like waking up in the 90s and deciding "not to use the Internet". How would you even do it without sounding wacko? I'm not even asking "why", there are a bunch of reasons for why one may choose not to drive a car, eat beef or watch Netflix, and they may even be the right reasons, but I honestly don't understand, do you not see what's going on? The shit is out of the horse, you can't put it back, you can't pretend it's not happening; everybody understands that the horse just keeps shitting. And you're saying: "can you not make the horse shit?"...
iLemming··on How to keep enjoying programming in a world of LLMs
> It's very clear they dont.

Be careful, these statements are aging faster than milk. Most skeptics of even a few months ago suddenly got very quiet. New models are getting very advanced; the pace is stupefying. LLMs absolutely can and do write much better code today than the majority of senior software engineers, or at least at comparable levels. If you're not seeing that, you either aren't using the greatest models, your harness needs some work, or maybe you specialize in some very niche domains where LLMs are legitimately helpless.

iLemming··on How to keep enjoying programming in a world of LLMs
> you'll gradually lose the ability to think in a programming language

So be it. It's fine. It will be fine. At some point I knew assembly well enough; I read hex fluently and confidently changed things directly in some random-looking files. This skill sometimes comes in handy (even today) when reading network packets. How many people today need to really understand offsets, field sizes and padding, so shit like: "bytes 12-13 are the EtherType" feels natural? What percentage of programmers actively creating software need to know how to read, say, exploit and malware traffic?

Some may say: "well, this is enormously important", but the reality is, "no, it's fucking not". For like 95% of programmers, it isn't.

And the number of programming languages I had to learn and then forget later... The point is - you don't need to be "thinking in a programming language". You just need to be thinking, period. Whatever language it will be tomorrow, it really doesn't matter. Cuneiform tablets with math still hold the math even though nobody in the world does any math in cuneiform anymore.

Technology has always been moving from lower abstractions to higher ones, and that's a normal cycle. Why is it so inconceivable to think that most of the software developers of tomorrow would have no idea how to "think" in Python, C++, Java, or Clojure? Does every car mechanic need to be able to explain the principles of a combustion engine?

iLemming··on How to keep enjoying programming in a world of LLMs
> You literally ask the agent to do something and it does it, that's it.

When was the last time you built something meaningful with it? I admit, LLMs do help and save tons of time and effort, yet building noteworthy software still remains a difficult task, with or without LLMs.

Funny, but your comment reminded me of my wife. Circa 2009, she was walking behind my back, she stopped to watch me work without me noticing. I was using Visual Studio (sluggish, temperamental mammoth, not its smaller cousin). She stared at my screen for a few minutes and suddenly exclaimed: "You're not even working, this thing is telling you what to do. I could probably do this shit too..." By "this thing" she obviously meant the intellisense completion that was giving me hints whenever I typed.

iLemming··on How to keep enjoying programming in a world of LLMs
> Babel cannot gather code from external files into a single place

Yes it can. org-babel-detangle copies edits you make in a tangled file back into the matching source blocks in the Org file. There's also `#+INCLUDE: "file.py" src python :lines "10-40"` and org-transclusion package - `#+transclude: [[file:foo.el::some-defun]] :src elisp` shows live content from an external file in the Org buffer.

Babel has no built-in way to import arbitrary existing files, but for the stuff that you make it make sense, it knows how to get its shit together back into one place.

iLemming··on Delta: Highly available, strongly consistent storage using chain replication (2022)
Dammit, why can't we get more inventive with naming our projects? How we're supposed not to confuse it with https://delta.dev? There's also diffing thingies https://dandavison.github.io/delta and https://jmacd.github.io/xdelta
iLemming··on NEO Emacs – GPU-Accelerated Emacs Powered by Rust
> has way more bugs than modern editors

That's just factually untrue. Emacs core is not obviously buggier than, let's say, VSCode, which has tens of thousands of open issues and is written in Typescript. What differs is visibility. Emacs throws a backtrace in your face; VSCode swallows extension errors into a log nobody reads. And every Emacs user runs a unique build with like 350 packages nobody tested together; try to even start VSCode with half that number of plugins.

The bugs that actually hurt in Emacs are state bugs, not type bugs. Two packages advise the same function. A buffer-local variable is set in one mode and read in another. Dynamic binding leaks. None of that is a type error in the Haskell sense.

The dynamism is the product, not an accident. Redefining any function at runtime, advising anything, inspecting live state - that is why people use Emacs instead of an editor with a plugin API. Strong static types plus separate compilation cut against late binding everywhere.

You're not "biased", you just seem to be unfamiliar with the type dynamism in Lisp systems. Dynamic types are not equally bad everywhere; don't take what you know about Python and apply it the same way to things built in, e.g., Clojure.

iLemming··on NEO Emacs – GPU-Accelerated Emacs Powered by Rust
You're spitting nonsense. Emacs cannot exists without running inside a Lisp REPL loop. Emacs is not a text editor, technically it's a Lisp REPL with the built-in editor. Dynamism and malleability on the live image is the point. That's the categorical feature of Emacs. Any attempt to build it differently; well, will end up being not Emacs - entirely something else.
iLemming··on NEO Emacs – GPU-Accelerated Emacs Powered by Rust
Wake me up when all the 40-years of Emacs package development all migrated to Lem. Do you even use Org-mode? Anyone who tried it beyond just basic outline features knows very well - Org-mode needs Emacs to run. There's no such thing as "the clone of Org" that runs in anything else. We'd fly humans to Mars sooner.
iLemming··on NEO Emacs – GPU-Accelerated Emacs Powered by Rust
CL is really not the answer. In fact, most Lisps probably can't beat Elisp for the simple reason that majority of Lisp dialects are very data-oriented, while Elisp is specifically text-oriented and that's not the property of the language but the runtime - implicit current buffer, an implicit point, global match data, etc. You can't simply replace forty years of packages, where every single one of them assumes the exact Emacs runtime. Lem's problem (or any Emacs alternative) is that it has to be much better to justify migration, and nothing is much better than Emacs at being Emacs.
iLemming··on US Military had close call after using AI for hallucinated intelligence report
Building software takes time. It remains a difficult craft, with or without the help of LLMs. You can't simply build a piece of "important software" in just a few months, and the good models capable of reasoning on complexity came out just a few months ago. And no, it's not "all slop". If you're incapable of using tools to build something meaningful with them, it's on you - don't blame the tools. LLMs are qualified to help with developing software, and if you're focusing on just the code-generation aspect of it, you're using it wrong; that's not how it's done.
iLemming··on Sublime Text Build 4213
Emacs doesn't have "plugins", they are called "packages" for a reason. Every Emacs package is not just a plug-n-play "product", it's a recipe, you can use them as libraries, cherry-picking behaviors you want without ever executing the main features of the package.
iLemming··on Arrow heads at Obi-Rakhmat (Uzbekistan) 80K years ago?
Yeah, right. Why the fuck those "Atlanteans" chose to fight over the land that is literally the farthest point from any major sea? You know that Uzbekistan is a double-land-locked country?
iLemming··on Why Emacs Consult async searches feel slow and how to speed them up
That piece is now extracted into https://github.com/agzam/clipimg.el
iLemming··on Why Emacs Consult async searches feel slow and how to speed them up
I have a piece of Elisp that checks if the last thing in clipboard is an image, then sends it to tesseract¹. It's not as accurate as I wish, but it's very fast and it works for cases when someone's screen sharing. I've been thinking of extracting it all into a proper package with some additional features.

On Mac, I combined it with Flameshot to select a region, and Hammerspoon that watches the clipboard, so it always automatically OCRs anything I screenshot and pops into a buffer. On Linux I haven't spend time figuring out how to hook it up, so after the screenshot, I just have to manually call the command.

¹ https://github.com/agzam/.emacs.d/blob/main/modules/writing/...

iLemming··on Astra and Fable still hack on simple variants of alignment evals from 2025
I'm still so conflicted about Fable. Sometimes you throw at it seemingly impossible problem to solve and it might come back with some brilliant suggestions. Sometimes you give it a straightforward task with explicit instructions and it travels across the solar system and starts boiling oceans in some kind of elaborate dance of chaos and entropy, only to get stuck with "The model declined to generate this response (safety classifier refusal, category: cyber)". To leave you speechless. "What the fuck do you mean? There's zero cybersec-related shit in what we're trying to do here. Zero!!!" I'm getting really tired of these wild false positives.
Page 1 of 34Next →