Programming is a splendid tool for teaching abstract mathematics
For the skeptics, we have some additional scientific arguments in
favor of the described approach. We quickly experienced that
programming numerical algorithms allows the students to solve hard or
impossible math problems occurring in real applications. This power to
conquer the mathematics is very motivating in itself. Also, the
combination of programming and mathematics appear to be difficult and
therefore needs to be trained systematically. The reason is that
classical mathematical training concerns specific problems (such as
multiplying two specific polynomials) while programming must addresses
abstract mathematical quantities (like a general polynomial). The
students therefore need to understand that a specific mathematical
problem belongs to an abstract class of problems, pick a general
solution method for that class of problems, implement this method, and
then apply the general tool (a Python function) to solve the original,
specific problem. This is the power of mathematics in a nutshell and
the reason why mathematics has been such a great success in our
society. Programming is a natural tool to teach this way of using
mathematics, while pen and paper techniques tend to decrease the
abstract view on mathematical quantities. Obviously, teaching
programming and mathematics separately in the classical way, and then
expecting the students to master the combination, fails because few
will then master the necessary abstract view of the mathematics on
their own.