You can
drown code in comments, though. In your example, saying "x += borderW" would be as expressive,
and tie that context to everywhere else it was relevant. Some comment issues are really better handled as (variable/function/method/structural) naming issues.
Comments are better for explaining the rationale behind seemingly arbitrary or crazy design decisions - "I would have done obvious thing X, but that causes huge problem Y". Why, rather than what. For things that provide important context, but could not be expressed in the language itself.
Many "what" comments should instead be static typing declarations, asserts, or tests. At least that way, people will notice when they no longer hold. Comments are just declarations the language ignores. (Citations, like "implements algorithm X, see Okasaki 1999", are fine though.)