I keep bouncing off the Scheme language

I have a huge appreciation for the Scheme programming language. I just seem to be unable to get it to stick in my head. This seems like a huge revelation for someone who named their blog after the Scheme textbook, but there it is. This post is the public admission I need to make, to keep me accountable for trying again. And again.

One problem is that I’m an inconsistent LISPer. The first software I ever got paid for was an Emacs major mode for the GLE plotting language, which didn’t do much beyond syntax highlighting. But I didn’t really get deeply into Emacs customization or automation, so I still have to look at the manual or my outdated copy of Writing GNU Emacs Extensions whenever I want to do anything.

I’m OK at reading Scheme. During my investigations of AI coding assistants for the project that became Chiron Codex, I created a Smalltalk-like live environment with a module browser for the Racket dialect. Obviously an LLM generated the code, but I felt comfortable following along and understood what it was doing, reading and Trusting the Tests. And when I look at Scheme that other people have written, I think I get what’s going on.

My difficulty is with thinking the way that lets me write Scheme. I have the ALGOL neurotype. When I think about a programming problem, I think in terms of the sequence of instructions I need the computer to do, and the memory locations that can hold the information the computer needs to track. After decades of working with OOP, I can quickly identify smaller computers that run smaller programs to make it easier, but only because I’ve got experience using the Simula-derived, neurologically ALGOL-based OOP strands like Java and Smalltalk-80.

This is, unfortunately, a failure that breeds failure. I’ve started two web app projects recently, including SE100, the reading list for the SICPers podcast. In each case, I’ve thought about using GNU Artanis but ultimately fallen back into my ALGOL mindset (the SE100 catalog uses the Go programming language, for example).

I think Scheme makes for some powerful software that’s pleasant to read: when I use Linux, I use GNU Guix and GNU Shepherd. I want to contribute to that ecosystem, I just have to get over the hump that I know the other, more complex way better, and be willing to play junior developer with some unfamiliar tools. This is my admission. Check back in a while to hold me accountable to this.

About Graham

I make it faster and easier for you to create high-quality code.
This entry was posted in GNU, tool-support. Bookmark the permalink.

4 Responses to I keep bouncing off the Scheme language

  1. @admin @leeg I never really got the beauty or wonder of Lisp, despite trying multiple times. I don’t think it’s just being stuck in Algol-mode… really enjoyed pure functional languages like Miranda and Haskell. I’m clearly missing something but I may just have to accept it!

  2. John says:

    I think this is a valuable insight. I loved lisp but never had much excuse to write it. When I started writing Clojure, I felt like finally I could do something useful in Lisp for work. When I transitioned to doing small projects to doing a lot of Clojure I found myself making a bit of a mess. What was going on? I had enthusiasm, skill and enough experience to do a good job. What I learned is that I had to wait to do a significant amount of unlearning the ALGOL-like patterns that were deeply internalized into my perceptual machinery. Applying Lisp in larger projects asked me to learn to think in the minimalist and expression oriented way that the language could serve best. And that took some time, hunting and pecking through my results to ask if I could do something better. A sort of re-contextualizing of my skills, into a broader and more useful set of concepts that could apply Lisp to its best advantage. Good luck on the journey. I suspect you are right on schedule. 8^)

  3. Matthew says:

    How do you do with other functional languages, like Haskel, ML, or even Lean? Scheme, as basically an untyped lambda calculus, sits at the base of these, with then a lot of syntactic sugar piled on.

  4. tim says:

    “I have the ALGOL neurotype.”

    You’re lucky. The world runs on ALGOL.

    I learned Lisp in my late teens, after using several imperative/procedural languages, and immediately realized that this was how I’d always wanted computers to work. Everything I want to do is so much simpler in Lisp. A single line of Lisp is worth 3 or 20 or 100 lines of the popular ALGOL-family languages, and the idiomatic approach in Lisp even sidesteps their limitations.

    Then I got a job in industry. Java is painful. Python is only marginally better. OOP can be a good abstraction, for some types of programs, but it’s no match for the ability to create any category of abstraction.

    Funnily enough, I’m currently writing a program in Scheme. I didn’t set out to be contrarian. It just seemed like the simplest language for the task.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.