I studied undergrad CS including the required math department classes. Recently for my Android app (
http://play.google.com/store/apps/details?id=com.unwrappedap... ) I wanted to list the most popular wallpapers. I had a problem though - I was continually adding new wallpapers. How do I compare a new wallpaper which a few people took versus a very old wallpaper which hundreds took?
The answer I came up with was N0e^-λt. Exponential decay. Set N0 to 1. I could set t in various ways, I decided to make it days, so today is 0, yesterday 1, the day before yesterday 2 etc. The lambda I tunes, right now it is 0.04 (or -0.04 times t). So the score added for each use decays as it ages, giving new additions a chance at the top.
Worked real well. Straight out of calculus. I never learned exactly what e was until college. Who knows what I would have done if I didn't know what exponential decay, e etc. was. I can't even think of an "eight-grade math" solution of the type this article mentions.
I had to hash a small list of small numbers once when I had the epiphany - Goedel numbering! I Google'd that and saw the solution was unoriginal, but I wouldn't have even saw those pages without knowing what to Google.
I was looking at a large NP hard problem many years ago and thought I could program a solution. After a complexity class later on, I realized the futility of that approach, in a direct manner any how.
I am not sure where the line is between math and CS. Graph theory underlies graphs and trees and the algorithms which run on them. Math functions and theory of computation underlie functions and methods. Statistics and probablity underlie ML. Geometry and matrix math and algebra underlie computer graphics. I don't get people here who say they program without needing post high school math.
Or seeing the garbage code out there maybe I do. Github is beset with people who make basic errors in mutual exclusion, critical section violations, lack of understanding of concurrency etc. I forget and make these mistakes myself sometimes. I hardly think there is a problem in over-education in these things. On the contrary, race conditions are spun out all over the software infrastructure by people writing code who don't have the needed math and CS understanding of what they're doing. Understanding mutual exclusion and critical sections and avoiding critical sections is not something picked up in an hour, a day, or even a week.