The first is that it is terse--often excessively so. The clearest way this manifests is the sheer predilection for single-variable names. Every variable in every equation invariably gets reduced down to a single letter, and sometimes you need to go so far as distinguishing based on font face or boldness or what random diacritic you can throw on that variable name to keep it a single-letter variable name. Even when it doesn't reach that extreme of an issue, it makes skimming difficult, because you now have to go back through the prose to figure out what 'H' means, and spotting the definition of a single-letter variable in prose is really easy, right? (No, no it is not).
Another factor that can make it infuriating to read mathematical notation is the sheer overloading. Subscript notation is a good one for this--if you see a single letter subscripted by something else, it could mean either getting a particular entry in a sequence of entries, it could be an index into a vector or a matrix or a tensor (and are you getting a row or a column or whatnot? all of the above!), maybe it might be a derivative. Or maybe it's an elaboration of which of the possible terms that get summarized to that letter is actually being referred to (e.g., E_a for activation energy).
Of course, the flip side of the notation problem is the fact that some concepts have multiple different notations. Multiplication is a common example: to multiply a and b, you can use a × b, a · b, or screw any symbol altogether and just say ab (thus a(b) is also a way to indicate multiplication, which totally has no potential confusion with applying a function [1]). Differentiation is the worst; virtually every introduction to derivatives starts with "oh there's multiple notations for this"--is it really necessary that so many need to exist?
[1] There was one paper I once read where I literally had to spend several minutes staring at a key formula trying to figure it if I was looking at function application or multiplication.
Yes it is necessary - often different contexts require different notation, sometimes as an abbreviation, sometimes not.
I do not believe that mathematical notation can be improved (a poor analogy would be trying to improve, say, English language itself); what does evolve, though, is the understanding of mathematical objects and mathematical frameworks - which can often lead to simplifying things and, sometimes, notation, too.
I strongly hope you mean that heavy-handed top-down approaches aren't likely to work. Because this reads as though you're saying we've somehow reached the optimal point on every axis for both mathematics and general-purpose communication.
For example, the issues you list here, how would you solve them if you could rewrite the notation from scratch?
No, there are different compilers, languages or even language versions or compilers settings. Programming notation is way harder and more confusing to learn than the math equivalent just because they are so many more styles languages or versions etc. And we all know that learning all of those symbols and keywords isn't the main difficulty with learning programming or new programming languages.