You should learn Scheme

I recently did a presentation at MUG entitled Scheme, Guile, and Racket: an introduction (slides). One of the questions I got asked is "Why Scheme?". It's a valid question, but I'd like to counter with another question: "Why wouldn't you learn Scheme?".

For me Scheme is a lot like Latin.

Much like Latin Scheme is not in common usage. Look on Stack Overflow Jobs and you'll have a hard time finding any jobs that use Scheme. I know of only one person in our group that has done professional Scheme programming.

Latin is the same way. The majority of living speakers of Latin work for academic or religious institutions. It's rare to hear anyone speaking Latin, and it's rarer still to hear casual conversation spoken in Latin. Scheme is an academic language and was used to teach an introduction to computer science course at MIT. (Side-note: the course now uses Python).

So if Scheme and Latin are equivalent why would any modern person learn either language?

I took two years of Latin in high school, and I can say that one of the reasons I'm grateful for learning Latin is because so many languages borrow from it. Three of the major "romance" languages (Spanish, Italian, and French) are heavily influenced by Latin. I may not know the vocabulary, declensions, or pronunciation of any of these languages but I can get a general sense for how those languages work. When I took Spanish I had an easier time with it because it felt like a stripped-down version of Latin.

Scheme (and Lisp) are foundational languages. They were the melting pot by which ideas were tested and tempered. They also borrowed heavily from Lambda Calculus (becoming a superset of Lambda Calculus in the process). Many of the modern programming techniques we take for granted (map, filter, lambda functions, functional programming, etc.) have their roots in Scheme and Lisp. So in a sense Scheme is a short-cut for learning many of the ideas that build up computer science as a whole. If you've struggled as I have with learning lambda functions in Python and understanding what they mean then learning Scheme may help clarify what's going on.

So yes, Scheme might be akin to learning Latin, but you'll be able to take a look at something like Amazon Lambda and break it down into it's various pieces (lambda functions, no state in-between execution, return a single result). Once you understand the pieces you can better understand the whole (Amazon Lambda is a serve where it will spin up functions that return a result, and then disappear without leaving any state behind). You'll understand the nomenclature of functional programming better (closures, anyone?) and be able to apply it to your conversational languages ("Yes, that was quite an antidisestablishmentarianism thing for him to say, wasn't it?")

If you're looking for a gentle introduction to Scheme I highly recommend the Guile manual section "Hello Scheme". Also recommend Realm of Racket to learn more about the Racket version of Scheme.

"Provehito in altum"