3 ms·
> > My point, which you seem to be avoiding, is that words are a lot less ambiguous than symbols. > Sorry, I don't accept this and you haven't demonstrated it
by overgard 7y ago
> > My point, which you seem to be avoiding, is that words are a lot less ambiguous than symbols.
> Sorry, I don't accept this and you haven't demonstrated it except to say "well we can use an appeal to other things for words, but not for symbols." That really dosn't fly at all, for me.
Nobody is a blank slate. When we learn things we associate with what we already know. The power of symbols is that they are inherently abstract and are not associated with what we previously knew, but when we're learning things that makes symbols harder to understand, not easier. "Sum" is a lot clearer than "Σ" if you're starting out. Quick, what do you think this means?
{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}
(That's an actual program, btw, I didn't mash my keyboard). If you don't know any of those symbols, where would you even START?
But wait, let me make it easier on you:
life←{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}
Now what do you think it means? Does it give you a place to start, at least? (That's the APL version of the game of life)
That version of the game of life is much simpler than if I were to write it in C#, which would be hundreds of lines longer. But is it easier? Of course not. It's absolutely baffling.
> Imagine, if you please, a world where people in industry and on Hacker News repea an untrue mantra that one language is "simpler" from first principles, confusing familiarity with simplicity?
Simple and easy are not the same things. Familiar IS easier, even if it's not simpler. I can imagine that world, but I also live in this world, where people have a current set of knowledge and it's easier to bridge the gap between what they don't know and what they do know by using what they already know.
- KirinDave 7y ago> {↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵} This is such a contrived argument. Firstly, I'd argue that it's only because of extensive exposure to a C#-ish language that you have a mental dictionary capable of fully describing IEnumerable. To most novices, both this and my prior example would be equally impermeable. > Now what do you think it means? Does it give you a place to start, at least? (That's the APL version of the game of life) I actually do know this program. It's part of Conway's Game of Life in APL. I know this not because I know APL, but because I copied part of the code into Google. Which is how most folks these days solve programming problems anyways. And once I know that, I can type "APL ↑ documentation" and tada, I found a wikipedia page! "Select the first (or last) A elements of B according to ×A" Feels roughly about the same amount of effort as trying to coerce some meaning out of obscure Python library errors, if I'm honest. > Simple and easy are not the same things. Thanks for that. Why are you so eager to take the eas yway out? > but I also live in this world, where people have a current set of knowledge and it's easier to bridge the gap between what they don't know and what they do know by using what they already know. A world where you're actively discouraging anyone from learning anything new by writing hundreds of words on websites about how they shouldn't do it because it's simpler and not easier, for what it's worth.
- b2gills 7y agoSure you know what `sum` means, and maybe even what `product` means. `sum` is applying `add` repeatedly to a list. `product` is applying `multiply` repeatedly to a list. The thing is most people use `+` instead of `add`. Also why use two different things for `add` and `sum`? How about we use `+` for both `add` and `sum`, since they are basically the same thing: 1 + 2 + 3 [+] 1, 2, 3 While we are at it, let's make it so you can also do the same for `multiply` and `product`: 1 * 2 * 3 [*] 1, 2, 3 Or perhaps even make it so that you can use any associative infix operator: 1 ** 2 ** 3 [**] 1, 2, 3 1 < 2 < 3 [<] 1, 2, 3 (1,2) ⊆ (1,2,3) ⊆ (1,2,3,4,5) [⊆] (1,2), (1,2,3), (1,2,3,4,5) 0 || 0e0 || Nil || 1 [||] 0, 0e0, Nil, 1 I'm sure you know what exponentiation means, but do you know what word you would use to mean repeatedly applying it to a list? (If you know please tell me, because I sure don't.) --- After you learn what `sum` means, you still have to learn what `product` means. However once you learn that you can put any associative infix operator between `[]` and have it apply to a list, you've just learned one thing that is really both of the above, and also many more things. This makes it quick to learn Perl6. You learn about one thing in one place, and that knowledge applies to everything everywhere. (This is true about almost every feature of Perl6.) --- If you really don't like the syntax, you don't have to use it. # alias the `+` infix operator to a subroutine named `add` my &add = &infix:<+>; reduce( &add, 1, 2, 3 ); --- I would like to point out that this higher-order feature is basically the same one that allows `+=`. my $a = 1; $a += 2; That is because `=` is a meta operator. Meaning it can take an infix operator as a sort-of argument. sub infix:<IOP> ( $l, $r ){ $l + $r } my $a = 1; $a IOP= 2; $a *= 1; $a /= 2; $a max= 10; I just taught you a second thing that you can now use for most infix operators. What's more, is that you might have figured out that infix operators are just subroutines with a special name. I didn't even really mean to teach you that. --- I mean sure a novice is more likely to know what `sum` means. But they have only to read this comment to learn a much larger chunk of Perl6. Frankly I want newcomers to Perl6 to be confused about `[+]`, because then they are more likely to come to a place where I can quickly teach them everything above. (Teach a man to fish and he eats for a lifetime. Teach a man to use a net and he can feed his family.)