Mathematics is a very beautiful subject that is being taught in a totally wrong way, causing it to be perceived as a very boring and ugly subject. One of the biggest problems with math education is the totally flawed idea that one has to focus almost exclusively on the elementary basics and make sure these are mastered 100% before one can move in to the next level. No other subject is taught in this way, although physics comes close and we see the same sort of problems with that subject too.
Imagine that we would teach language in the same way as math. Then children would not read books, write essays etc. in school. They would instead learn lots and lots of grammar, exceptions to the grammar rules etc., and after several years still not have progressed far enough to apply what they've learned to simple conversations.
Music taught in this way would degenerate to practicing playing simple notes on musical instruments over and over again, never to move toward playing an actual piece of music. That would be considered to be "advanced university level music", and you need to first have mastered the basics good enough to qualify for that. There would be no better way to make children hate music class!
So, how can we best remedy the problem with math teaching? I.m.o., the best way is to design a new curriculum that is based on using the tools children like to play with. Computers should be used a lot more. The best way for children to learn mathematics with pleasure is by teaching them computer programming. In trials it has been shown that primary school children have no problems learning to code in languages like C++.
Instead of subjecting children to boring math problems, one can give them assignments where they have to write code to tackle a problem. They'll then be exposed to the rigorous mathematical logic at a far younger age, and yet they'll have a lot of fun. Most of the the feedback they get when they make a mistake will come quite promptly from their own computers, when the compiler complains about errors. The children working on a project will then both practice their logical reasoning skills and yet not get bored by having to do that, as their goal isn't to get to just any code that the compiler will accept, but to finish the project they are working on.
Then, mathematics as we traditionally learn it does need to be presented differently so that it can be presented in this context. For example, instead of introducing calculus via smooth curves, integration as area under a curve etc., one can just as well introduce this topic via coarse graining. Unlike the concepts use in traditional calculus teaching, children encounter coarse graining all the time. Every time they look at a picture on their computer screens, they are looking at a coarse grained representation of the data that makes up the picture.
Limits are then about computing properties of data in a scaling limit, and calculus is about doing commutations directly with the quantities defined in the scaling limit. This way of introducing calculus is i.m.o. not just easier to master, it's also more consistent with what the continuum really is. It's not fundamental, it's an artifact of having taken a prior scaling limit.
This is something that can be obvious to five-year-olds zooming into a smooth pictures and then seeing pixels. In contrast, we are indoctrinated by the wrong idea about a fundamental continuum, and we then need to unlearn this and do computations properly when Nature tells us we're making a mistake, see e.g. here on page 12:
Often, authors forget to mention the first, very important, step in this logical procedure: replace the classical field theory one wishes to quantize by a strictly finite theory.