What in the world is “language-oriented programming”?

I’ve been programming in Racket for a few years now, but Racket’s solve problems, make languages philosophy wasn’t the main thing that attracted me to the language. At the time, I was just looking for something more up-to-date than Common Lisp.

Only later did I get a sense that Racket ticks a bit differently, powered by an underlying philosophy called language-oriented programming.

It may be surprising to learn that my first reaction to this term wasn’t entirely enthusiastic. Language-oriented programming is one of those things that sounds great—initially—but which lost its shine as I began to think about more about it.

I found it frustratingly vague. Maybe even a bit pompous.

Are they serious? (Does some research. OK, they seem serious.) What in the world do they mean by that?

Is it just a high-falutin’ way of saying we use macros here? Are they talking about little embedded DSLs only, or notational tricks (hack the reader)? And what about the practical scope of language-oriented programming? Was it a value judgment? Do they mean to say that your modest module isn’t cool enough because it’s not a full-blown language? Is it a design suggestion? Are they saying that most problems should be solved with new languages?

Most frustratingly, I couldn’t find a single resource that encompassed what was becoming increasingly clear in my research: that the term seemed to be wide enough in scope that it admitted different interpretations. Different ways of giving the term life. Different instantiations.

So I went out into the Racket world and asked Racket programmers what they thought it meant.

Excuse me! You, sir. You work in Racket, right? Tell me: how do you understand language-oriented programming?

I probably scared away a few people when I approached them with this crazy-guy-at-the-train-station routine (who are you again? how do you know so much about my Racket work?!), but a number played along.

My forthcoming book, Language-oriented Programming in Racket: A Cultural Anthropology, contains the results of surveying 30 Racket programmers, including some of the language’s core developers, about what language-oriented programming means to them. I designed a 9-question survey focusing on different aspects of LOP. (Icing on the cake: Martin Ward, who coined the term language-oriented programming back in the 90s, has agreed to write a foreword for the book.) I think you’ll find it a useful resource for getting an in-depth view of the philosophy that drives Racket.