Formalism, Philosophy, and Feynman

I remember watching an interview with Richard Feynman, and was impressed by the way in which he reasoned about reality. Perhaps this was just because he was speaking to a lay audience, but he described phenomena in a very macroscopic and informal way, avoiding mathematical formalism as much as possible. This had a significant impression on me, because I realized for the first time that good scientists don't pursue abstraction for abstraction's sake.

One could say that in that interview, Feynman was mindful of what's called the map-territory relation (a model of a phenomenon is not the same thing as the phenomenon itself). Somewhat unsurprisingly, this relationship is very relevant to programmers, though many wouldn't recognize it by name. As someone interested in programming language design, I came across this idea when reflecting on what makes it so difficult to design a language.

Perhaps the map-territory relation is ubiquitous in programming, but what makes it important? What's the raison d'être of this blog post? Computer programs are like sickly poems, and programming is a form of symbol manipulation; and symbol manipulation has been a subject of many crafts (poetry, hermeneutics, mathematics, magic) throughout history. As is explained in a previous article on this blog, computer science would benefit from the legacy of these arts (but doing so seems very difficult). Accidentally designing programming languages using a formalism-first approach is very restrictive, because you're constrained to whatever math or logic already exists, and one finds it harder and harder to implement novel ideas using those formalisms. It's quite like walking around in knee-deep snow—the farther you try to go, the more difficult it becomes. On the other hand, if you avoid formalisms as much as possible in the design process, there are more degrees of freedom in how you can think and what you can do.