Should Math Be a Prerequisite for Programming?
linux.com
linux.com
Calling for "mathematics to not be a pre-requisite to programming is like calling for mathematics to not be a pre-requisite for trigonometry. Programming is constructing and manipulating syntactic objects. Programming is, literally and unambiguously, "doing math". They are not separable activities.
Aside from which, elementary algebra is actually extremely important stuff for any programmer to understand. We're not talking group theory, we're talking knowing the difference between a graph of x vs. a graph of x^2 vs. a graph of 2^x. How to manipulate conjunctions and disjunctions and implications. I can't imagine programming anything particularly useful without knowing that sort of stuff. Which doesn't mean that formal elementary algebra is a reasonable pre-requisite course, but it really is pre-requisite knowledge.
Notably the authors of SICP, no mathematical slouches, would disagree with you, in the first few pages they explain the difference between using symbols to mean what from symbols used to mean how.
I think it resolves to this: having formal descriptions for what matters a great deal in defining limits and algorithms resolving into calculation. That is important because you could waste your time. We see creatures in nature like Julia Galef's Sphex which follow simple algorithms but because they don't understand their terminal goal they cannot alter a suddenly ineffective algorithm. Clearly understanding limits has the capacity to limit stupidity.
However we also know that practically many non-trivial problems are solved before we can put them into a mathematical framework. It applies to Geoffrey Hinton and the neutral network's effectiveness with a small number of layers. According to many mathematicians that should have been implausible and Hinton was toiling in barren fields and yet today we see it works. So the limit existed in their model rather than reality. Physical examples of the same phenomenon include useful atomic power and heavier than air powered flight.
Sometimes the theory leads the practice. Other times the practice outstrips the theory. So in answer to your question, I wouldn't have much confidence either way.
Many a student thinks to themselves in a math class: "Man, I'll never use this." When you actually need the math, suddenly you have this "oh shit" moment and you step into gear.
If programming = "The ability to solve problems by modelling them as computational problems and coming up with the solution aka algorithm and then using computer to solve the problem". Then you do need math.
Remember, you can be a good mechanic without being an engineer but there will always be the ceiling of mechanic that you cannot cross.
I remember wasting a lot of time learning algebraic and geometric identities that I never ended up using for anything more than rearranging and simplifying nonsense equations.
My solution for this was exponential decay. Newer downloads get a higher score than older downloads. The older the download, the lower the score. Now I have a better chance of seeing what's popular no matter when it was added.
This is not the most complex practical problem in the world and the solution is straight out of Calc 2.