When dealing with coders, one can often run to two misconceptions, which I, personally, consider especially harmful:
- mathematics is not necessary,
- programming language doesn't matter.
Let me demonstrate the ways of how proponents of such claims think.
As for math, they never needed to use it, ergo, it is a waste of time. Note, this is not only about not using maths, this is about reinventing the wheel in the subpar manner.
Do you need a simple example? How would you calculate number of permutations of 10?
If you know Python and you don't know maths, you can write:
from itertools import permutations %timeit -n 2 sum(1 for _ in permutations(range(10)))
581 ms ± 11.3 ms per loop (mean ± std. dev. of 7 runs, 2 loops each)
If you know math, you can simply calculate factorial of 10.
from math import factorial %timeit -n 2 factorial(10)
300 ns ± 225 ns per loop (mean ± std. dev. of 7 runs, 2 loops each)
I can assure you that the first solution is slow like hell. And no matter what programming language I used, the math is always faster.
Mathematics might have solved your problem faster and better! Use it.
As for programming languages, they claim these are mere tools. The basic mantra they repeat sounds like: being Turing complete, it is fine and all the same. Oh geesh! Had I suggested to you to carve a spaceship with knives instead CNC machine, because both have blades (equivalent of the Turing completeness here), you would seriously question my sanity. So, what is the point here? Mere tools? Sure. And what? Cars are mere tools intended for transport; we generally buy cheaper cars because they are cheaper, not because we are not able to recognize the difference in quality and comfort.
The last argument I'd like to mention brings irresistible proof of nothing. They say that a language XY perfectly suits their need because they use this language for building complex systems. The logic fallacy lies in confusing the ability to do something somehow for the ability to do something optimally.
For instance, you can walk thirty kilometers by feet, still you can go by car faster. Or, if you decide today to make a new Egyptian pyramid, you would probably use more modern means than sledges. What would you think about someone arguing: there are loads of pyramids made by good old sledges, while none by heavy machinery? Thus, using sledges to pull stone blocks is perfectly fine! Cranes? What about cranes? The old Egyptian did not need them either.
Possible doesn't equal optimal! Do not confuse them!
Don't get me wrong. I can completely understand pragmatic answers like: Sure, the language X is undoubtedly designed better than language Y, but it lacks tooling, ecosystem, developers, and many other reasons, which may reflect your valid concerns. But the flaws in design do not disappear just because you use the language a lot. To admit them is the first step to avoid the danger.
As for math, arguably, most coders do not need it to make their job done. But I still do believe that knowing underlying principles is beneficial, anyway.
What is your opinion?