Rationalizing the Illusion: Readability over Writability


#1

Infix isn’t common in languages Rebol would typically be compared with (maybe Haskell, but I’m the only person who would probably see any parallels between Rebol and Haskell).

I’ve defended the broader notion of “enfix” (which permits postfix, as well as choosing to fall back as prefix, or behaving variadically with multiple right hand side arguments). And I’ve advocated pushing its usage even more to the forefront when it improves the rhythm of code–instead of considering it a guilty mechanism that is used as a last resort (which was @earl’s take).

Then, when contrasting Rebol with its usual peer group (Forth, Kernel Lisp, etc.) I made a comment that is something worth challenging:

“…I feel like having a language of equal power where I can write if x = y + 2 […] feels better, even if I have to learn the ropes a bit to realize why I can’t write if y + 2 = x […] and expect that to work.”
– (Me)

So I say I like it. But a confused user who tries to make that modification–and finds it won’t work–might ask me why I’m comfortable with that. e.g.:

Why would someone make a language where a program can be written to appear familiar, when what’s actually going on will be non-obvious to beginners.

The “bad” answer–which we should probably be cautious of–is not entirely untrue: that I like it because I like a good magic trick. I think it’s fun for people to have those little “a ha” moments in life. There’s a possibly perverse way in which I just like it because it’s tricky…and I imagine people coming from their ALGOL-inspired languages (C, JavaScript, whatever) and having the strong impression that Rebol code is accessible and simple. Then going “wait, what?”

I’ll cite a remark made by Carl from his “Deep Lake” post:

“Although we like to make REBOL look a lot like other programming languages, it is much deeper than it looks.”
– (Carl)

The surface illusion of looking like a simple scripting language–like one of any of the dozens of others people have seen–is a testimony to the bendability. x: 10 => “oh, colon is the assignment operator” => “no, it isn’t”.

I think every time we get another one of these illusions under our belt, like ELSE and THEN, the game goes a little further. I’d have quit Rebol a long time ago if these breakthroughs weren’t still coming along… each one probably buys one more month of my interest in the area of study. (Kudos to @Brett for buying another month with OF.)

It’s not necessarily a bad answer to say that Rebol’s trick is all being done for fun. Programming is supposed to be fun. But let’s rewind and try a different attack on the question I posed above:

Why would someone make a language where a program can be written to appear familiar, when what’s actually going on will be non-obvious to beginners.

Carl thought, initially, that Rebol would be a good language for all programmers. Especially new programmers…as was part of the target market, a kind of “modern LOGO”. Until that didn’t work, and so in a fox-in-the-grapes style he switched and said “REBOL, Not for Everyone” ("?")

“Early on, many programmers who encountered REBOL looked at our simple scripts, and not diving any deeper, concluded that REBOL was too simple. Little did they know. REBOL is one of the deepest languages ever designed.”

“I think it has come time to update our message and website. I should not pretend that REBOL is for everyone. It is not. REBOL is for those who of us who think differently.”
– (Carl)

Some people took this to mean that–for instance–infix be excised, e.g. guru Peter Wood:

“…perhaps Rebol 3 would be a good opportunity for Rebol to rid itself of those unRebolish C-like infix functions. Strict left to right evaluation will help with thinking differently!”
– (Peter)

Peter and I might agree on some niche point, like that == looks terrible, isn’t even consistent with C’s pairing of == and != and shouldn’t be polluting the codebase. Unsurprisingly, I disagree with the premise–and think infix is actually what makes Rebol “RebolIsh”.

But I agree with some of what Carl says. While it is sort of a cop-out to say “nobody understands my work, because I am too deep”, the analogy to poetry is apt for what the aim is. And poetry isn’t necessarily something you expect everyone to write (nor read), but once written it should usually be the case that anyone who wants to can appreciate it. But customer #1 of your code is you.

This has wandered a bit, but I guess it’s about making peace with the idea that Rebol serve its own users well, to make them individually happy with their coding and enjoying it. So let them say things how they want to say. Peter Wood can load up his “all prefix” skin and not be wrong, he can just have bad taste… and that kind of freedom is where we want to go.

As for helping with the understanding problem, what is needed–badly–is better debugging and visualization, of how the evaluator machine is grinding through code. I think that will make a huge difference in how the language is perceived. And the “mind of the evaluator” can be opened up and shown to people.