↩ go back to index

criticisms while attempting to learn lisp

september 29, 2021

I know I've been very negative on my gemlog lately. I'm trying to find things to be positive about but it's very difficult and a lot easier to write about all the stuff I don't like.

**A lot of the following is Scheme (and derivatives) specific, I don't have a lot of experience with Common Lisp**

So I took a look at Scheme again and I'm remembering why I stopped trying to learn it. I don't want to learn three semesters of lambda calculus and read 500 pages laboriously explaining all of Scheme's fancy features before I'm capable of writing a program that prompts me for two numbers and outputs the sum.

Even if something like that requires a lot of build-up I expect learning resources to teach me along the way to building some program rather than just dumping abstract theory at me and expecting me to learn it. Like the main GB ASM tutorial is perfect because it teaches you the basics on the way to making a hello world program which is pretty involved in GB Assembly; you always have a clear goal and most everything you're learning is to achieve that. Maybe Scheme learning resources being the way they are stems from a lot of Scheme curriculum coming from colleges where they just dump shit on you and expect you to learn it.

The Scheme learning resources I've found really do seem too focused on theory rather than, you know, actually teaching you how to do things in it. I worked through like five or six chapters of The Scheme Programming Language and I felt like I had a decent beginners grasp on the basics of coding in Scheme, and yet I did not feel I knew how to make an actual program. The first thing any Python or C or Javascript or literally any language tutorial will tell you is the language's equivalent of “okay so `main()` is where you put all the code that will execute first so to make a program you just call stuff from `main()`” and there, you can go and try to do stuff yourself. I do not feel that I know the idiomatic way to write a real program outside of a REPL in Scheme. Do I just dump everything in a “main” file and run that? Do I put everything into a main function and run that?

Another problem seems to be how heavily the Lisp ecosystem is tied to Emacs. If the first thing I'm told when trying to learn a new programming language is “the only way you'll be able to write it easily and good is if you uproot your entire system setup and replace it with Emacs” it feels very offputting. I've tried Emacs and it's just not my thing, so it makes me feel pretty put off when people say there's no way I could program Lisp without it. To make a comparison, the Factor programming language has a REPL and interactive development like Lisp, but rather than having the hubris to impose an editor upon you or else you're not dedicated enough to using it, Factor instead tries its best to integrate with your existing setup.

I dunno, Lisp and Emacs and the whole ecosystem is one of those things that I really genuinely want to like, and yet no matter how many times I go back to it I never can force myself to like it. I think that if I managed to actually learn it I'd probably really like it, but it seems to have as many roadblocks as possible to newcomers, probably with the goal of making sure you're a real super special cool person before accepting you into the community.

It certainly doesn't help that the segment of the Lisp ecosystem I seem to interact with the most are the definition of “smug Lisp weenies.” I'm sure there's welcoming people somewhere in the community but they don't seem to be in any sort of abundance where I've looked.

I think I'm going to go back to learning Ada again, I've had pleasant interactions with Ada's community and there's a few good intro to Ada tutorials out there. Or maybe I'll try out Nim.

Follow-up:

I really appreciate how after my gemlog post where I'm a little mean about the Lisp community there's some friendly people offering help now. I suppose I should've known the fediverse and Gemini would have nice Lisp people; and I somehow managed to forget how shitty reddit and some forums and mailing lists can be.
Making me really want to try a Lisp dialect for the Nth time, but I'm really enjoying Ada again so I don't know if I'll go back just yet.

See Also:

Game Boy Assembly tutorial

The Scheme Programming Language, Third Edition

My thoughts on Emacs and why I stopped using it (after my third or fourth time trying it, and after forcing myself to use it exclusively for ~3–4 months)

The Factor Programming Language