Karsten Schmidt<p>Always very much liked the categorical and implicit data-first approach in <a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</span></a> and other <a href="https://mastodon.thi.ng/tags/concatenative" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>concatenative</span></a> languages. To me it's such a clear & direct representation of the fundamental principle of computing, i.e. chainable sequence(s) of Input→Process→Output and most problems just become about managing the flow of data and the intermediate shapes it will (and have to) take on before a "final" result is produced (in that sense it's also very closely related to node-based visual programming)...</p><p>The simplicity (in the Hickey-ian sense) of the approach/syntax is very much counter to more mainstream langs (esp. C-like langs) and also removes worrying about operator precedence, quirky irregular syntax rules (like all sorts of parantheses, punctuations, semantic whitespace etc.) and much more focuses the mind to come up with small "words" (and to refactor them) expressing the desired data-flow/shapes as concisely and as expressive as needed...</p><p><a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</span></a>:<br>`data1 data2 op1 data3 op2 op3`</p><p><a href="https://mastodon.thi.ng/tags/Lisp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Lisp</span></a>:<br>`(op3 (op2 (op1 data1 data2) data3))`</p><p><a href="https://mastodon.thi.ng/tags/Clojure" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Clojure</span></a>'s threading op:<br>`(-> data1 (op1 data2) (op2 data3) (op3))`</p><p>C-like:<br>`op3(data1 op1 data2 op2 data3)` or<br>`op3(op2(op1(data1, data2), data3))`</p><p>OOP fluid interface:<br>`wrapper(data1).op1(data2).op2(data3).op3()`</p><p>(That's not even mentioning here that as in Functional Programming, Forth ops/words/functions can also be treated as data, combined/composed, (re)assembled into larger processes/flows, transformed and lazily executed... additionally, most Forth's have the concept of immediate words, which are never lazy, but I digress...)</p><p><a href="https://mastodon.thi.ng/tags/RandomReflections" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RandomReflections</span></a> <a href="https://mastodon.thi.ng/tags/Programming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Programming</span></a></p>