/tinyletter

The Programs of the Week of Winter Storm Niko

This Week’s Program: Feb 6 - Feb 10

This week was a pretty slow one in terms of commits, but I spent quite a bit of time familiarizing myself with Racket. Racket is the next language on my list to learn and where I’m going to be attempting my next project.

My commits this week were mostly around the smooth transition from my work-issued laptop to my FreeBSD server. I want to be able to work in either without feeling a noticeable mismatch in capabilities. I’m continuing to refine my server’s configuration in mechwarper. This week I tweaked my tmux configuration, made sure aspell was installed on my server, and fuddled with my emacs color-theme when in a terminal.

Why Racket?

My first experiences with “real” functional programming, insofar as I was working with a programming language that emphasized its own functional-ness, was with Scala. I had known of Lisp. I had a sense of its influence on other languages; Ruby in particular, since that’s what I was closest to. I knew there was a relationship between Lisp and Scheme and a debate between Lisp1 or Lisp2 and that Lisp was not an acceptable Lisp. I knew people made jokes about parentheses. I knew SICP was the most important programming book and that I was embarrassed to admit that I had only given it a cursory glance.

Some folks haven’t seen Star Wars but they know it inhabits their consciousness. They know about Jedis and the ancestry of Luke Skywalker and they know that the force is with them. Star Wars has had a profound impact on every movie post-Star Wars. You can’t watch a movie and not see threads of Star Wars, even if you’ve never watched Star Wars. My relationship to Lisp was like the people who haven’t seen Star Wars. We know its there, we can recognize its notes and its themes and its influence on everything else, but we haven’t experienced it firsthand. I suspect many developers have similar sentiments about Lisp.

When I was immersed in Scala and its type systems I thought I had a good understanding of functional programming. That was until I was given the book The Little Schemer. The Little Schemer is my favorite programming book. I think every developer should take the time to read it. It’s short, it’s written in a friendly tone, and I learned a ton from reading it. It was that book that pushed me over the edge to learn Clojure and Emacs Lisp and now Racket.

I first encountered Racket under the name PLT Scheme. There are a lot of Schemes:

All are interesting to me. It’s been suggested to me that Racket is not the best place to start with Scheme, and to consider some of these other implementations.

I’m choosing Racket for a few reasons:

  1. Matthew Butterick’s excellent Practical Typography is written in Pollen, a publishing system of his own design, created with Racket. His writing and speaking on why he chose Racket has influenced me more than anything else. I intend to read his Beautiful Racket over the course of the next week. This dude made an incredibly beautiful book in a publishing system of his own creation and wrote in stunningly clear terms why Racket enabled him to do that. Awesome.
  2. The Racket Manifesto is the kind of document I wish existed for more programming languages.
  3. The Learning Racket blog post series about one Haskell developer’s immersion in Racket.
  4. Rosette, PLT Redex, Datalog, Typed Racket — All interesting systems in their own right. Racket unlocks all of these interesting modes of programming.
  5. This past year I attended a fun Papers We Love meetup where David Nolen presented Parsing with Derivatives with one of the authors, Matt Might, in attendance. The paper is a big influence on clojure.spec. The paper presents its work implemented in Racket. At the meetup when asked “Why Racket?” Matt said “because it’s the best.” I’m sold!

My goal for the next couple of weeks is to get myself familiar with the language, the ecosystem, the community, and the idioms. I’ve found there is nothing more challenging in learning a new language then understanding how projects tend to be structured and learning the community mores.

⛄ Mark