We were talking about Forth this week at work. I mentioned that it is a language that I should like due to its qualities of simplicity and minimalism, but that ultimately I couldn’t work with: I have difficulties doing a computation by stack juggling, and there aspects of the syntax that can easily confuse me (e.g., the “reverse” order of else and then in a conditional, or the fact that I often interpret drop 0 as a single command rather than popping+pushing).

Still happy that Forth gets talked about, there’s value in seeing very different approaches to programming.

There was a period of time, many years ago, when JForth on the Amiga was my primary programming environment. It was a brief period, but it was incredibly educational.

It created a lifelong love of Forth, and I’ve implemented Forth or something like it many times, but never as a programming language intended to be seen by any human eyes. Forth became an intermediate language, something to be spat out by compilers and then interpreted or rewritten mechanically. The elegance and simplicity of its design makes writing interpreters for it and compilers to it trivial.

(I realize that I am not even close to the first person to have this exact epiphany, and I realize that a stack-based-VM is not Forth in the truest sense, but that’s not the point. When I had the epiphany, I was young enough that I didn’t know how common it was.)

Often I look at an unfamiliar language and think “that’s very different, I should learn this.” But with Forth my mind skips right past to “why would anyone want to learn that?” It seems like Lisp if you took out all the good parts.

I think it’s worth learning a new type of language. If you’ve already worked in a concatenative language then Forth won’t teach you anything new. If you haven’t, then Forth will teach you a new way to decompose problems.