I couldn't agree more. Abstraction and decomposition were not talked about in the programming classes I took, nor were they talked about in the discrete mathematics class I took.<p>When I asked teachers why calculus was required for discrete mathematics and programming I was told, "To create mathematically mature thinkers, which is a prerequisite for these topics." This seemed foolish to me, because calculus seems to weed people out who struggle with abstraction and decomposition, not teach it to them. Instead the topics could be explicitly taught, and thankfully these topics are taught in some schools.<p>Over the decades I've seen people who taking programming classes, struggle, and assume they're not smart enough. By sitting down with them and not only teaching these topics but demonstrating them in a concrete way, programming seems to come easily and naturally for these people who once struggled.<p>Discrete mathematics is incredibly important for programmers. I'd argue it's the single most important class for a dev. It also helps the student understand where a teacher or text book is coming from, by seeing how they structure their lessons, and how they communicate those lessons. The intent becomes transparent. Discrete mathematics taught me how to read text books in an effective way. This accelerated my learning of every subject I've studied since. For this reason, discrete mathematics should be taught easily and simply in elementary school. We're already teaching programming in elementary schools, so we're half way there already. Furthermore, the way discrete mathematics is taught today is difficult. It doesn't have to be. Difficult subjects can be made easy. The complexity of the subject is not an excuse to not teach the topic to kids.