You don't need to be good to program. You need to be exceptional to do math. Most programmers aren't that good at what they do, and I think they should focus on their craft. I struggle to explain to my colleagues who make 100k that they need to do memory tiling: or that their loop doesn't vectorized. Changing a float from a double in a BFGS is 2 days of work for these people. Let the chosen few do math.