The problem is that Bray's reasoning could apply just as well to any aspect of a language that can be worked around, and leads to meaningless bloat in every case. Other examples:
"We shouldn't have to learn the standard library. Always implement functions you want yourself, and comment what each line of code does."
"We shouldn't have to learn about variable scopes. Just put all your variables at the top of the file."
Knowing the basics of operator precedence should be expected. If you don't know it, you don't really know the language. Bray even drops his own thesis when his code sample assumes that the dot operator and function application operator have higher precedence than logical-and.
There is definitely such a thing as expecting too much familiarity with operator precedence, but it's illogical to say that you shouldn't need to know anything. These are the syntax rules of the language, people!
> Knowing the basics of operator precedence should be expected. If you don't know it, you don't really know the language.
What are "the basics of operator precedence" for C++?
Yes, I'm serious. I don't think that there's any agreement on that. At best, there are a bunch of answers with significant overlap, and each non-trivial organization has at least two answers.
That's why every non-trivial organization produces software which uses multiple definitions with blurs between them for interfaces and common code. And bugs.
C++ has almost 30 precedence levels and yet folks think that lisp is unnatural.
Regardless, C++ seems to show that "Knowing the basics of operator precedence should be expected." is unreasonable, at least wrt C++.
Note that C++ isn't all that complex wrt precedence, so the real problem is with the claim. Humans can do about 10 levels of precedence. Since demonstrating precedence knowledge is not the point of a programming language....
Knowing the basics of operator precedence should be expected. If you don't know it, you don't really know the language.
I don't see any validity in a comparison to knowledge of the standard library, or of variable scoping. Ignorance of those aspects of the language has very real, measurable costs. Using unnecessary parentheses incurs no cost at all unless taken to an extreme like some of the examples posted above.
"We shouldn't have to learn the standard library. Always implement functions you want yourself, and comment what each line of code does."
"We shouldn't have to learn about variable scopes. Just put all your variables at the top of the file."
Knowing the basics of operator precedence should be expected. If you don't know it, you don't really know the language. Bray even drops his own thesis when his code sample assumes that the dot operator and function application operator have higher precedence than logical-and.
There is definitely such a thing as expecting too much familiarity with operator precedence, but it's illogical to say that you shouldn't need to know anything. These are the syntax rules of the language, people!