I&#x27;ve dealt with it lots.  While concatenating variable  and string literals like your example is very rarely ambiguous, but what can be is using + to operating on two variables whose input has been returned from elsewhere.<p>Does that function that gets the user supplied value for height automatically convert to a numerical type, or is it a string?<p>What about the function that gets the user supplied value for width?<p>Is it stored in a back-end format that strictly types those fields to ensure that if the data is set from some less frequently used method it has the same type (e.g. are you storing as JSON, and can this JSON be created from multiple code paths?)<p>Given a simple statement like &quot;foo = bar + baz&quot;, why should there be ambiguity when there doesn&#x27;t need to be?  The glib answer to the problem is to tell people to use better variable names, or document their functions better, or any number of suggestions that put the onus on the programmer, when this is a very simple to solve problem.  Don&#x27;t overload operators in the core language for conceptually different actions.  We don&#x27;t &quot;add&quot; strings, we concatenate them.  Add is at best, shorthand for &quot;add to end of&quot; which means to <i>append</i>.<p>Coercion can be a useful tool, except for when it creates confusion.  There are well known and tested ways to combat this confusion, so I&#x27;m not sure why we haven&#x27;t adopted them widely where coercion is in use.<p>P.S.  It&#x27;s not just addition.  Testing for equality is another common case where coercion can cause problems.  The answer to that is equally as simple, use a different operator (such as &quot;eq&quot; and &quot;ne&quot; for string equality in Perl).  Numeric equality is not the same as string equality (10.0 is equivalent to 10, but &quot;foo.&quot; is not equivalent to &quot;foo&quot;), and making the programmer think (not not!) about what will happen when using an overloaded equality operator on two variables just shifts a <i>small</i> amount of up-front cost when learning the language (we have different operators for string concatenation and equivalence testing, learn them) to a cost imposed every time the programmer has to use those operators.