I generally agree with the approach of building (large) programs by creating a set of DSLs that make the different parts of the program easier to express. This is one of the reasons I prefer languages that allow user extension (like Lisps). Glad to see the author include a link to Racket in the footnotes, as their Language Oriented Programming research agenda is very explicitly about this sort of thing.