Since I reminded myself that concatenative programming exists, here’s a description of it.
Programming languages can be split into two categories: applicative and concatenative. I’m willing to guess that every single programming language you know is applicative, where the focus is mostly on applying functions/procedures to arguments.
Concatenative programming, on the other hand, has the focus mostly on composing several functions together on some kind of big data storage that the entire program runs on, usually a stack but can also be a deque or whatever it is that Om (https://concatenative.org/wiki/view/Om) does. The “concat” part of concatenative programming refers to how composing functions is just concatenating them together.
It might not seem like a big difference, but it actually leads to some nice features. For example, since concatenative languages are made specifically for putting together functions, it does it really concisely. No parameter names or variables, just functions.