Good developers strive to write code that is clear and correct. Parentheses in conditionals, even if they are not strictly required, help with both.
As for clarity, think of parentheses like comments in code: they aren't strictly necessary, and in theory a competent developer should be able to figure out code without them. And yet, these cues are exceedingly helpful, because:
- They reduce the work required to understand the code.
- They provide confirmation of the developer's intent.
Furthermore, extra parentheses, just like indentations, whitespace, and other style standards, help visually organize the code in a logical way.
As for correctness, conditions without parentheses are a recipe for silly mistakes. When they happen, they can be bugs that are hard to find--because often an incorrect condition will behave correctly most of the time, and only occasionally fail.
And even if you get it right, the next person to work on your code may not, either adding errors to the expression or misunderstanding your logic and thus adding errors elsewhere (as LarsH rightly points out).
I always use parentheses for expressions that combine and
and or
(and also for arithmetic operations with similar precedence issues).