# Computational Software for the whole curriculum and beyond

Our (United States, undergraduate) math program is considering the idea of putting more mathematical modeling and computation into all levels of our curriculum. One of the hang-ups is that we can't decide on a specific mathematical software that could be uniformly adopted. Here are some of the criteria:

1. Friendly enough that Calculus I students (including a variety of STEM majors) could use it to graph functions and (symbolically) compute derivatives and anti-derivatives/integrals. Most likely at this level the students would work with faculty-created template files to allow for a gentle introduction to computing.

2. Advanced enough that students in mid- to upper-level courses (e.g. Multi-variable Calculus, Linear Algebra, Differential Equations, Mathematical Methods for Physics, Complex Analysis, etc.) can create their own files to use it to solve real-world modeling problems and/or do larger computational projects.

3. Be something that would likely be available to them after graduation in either graduate school or, more likely, government and industry.

4. Be able to create files/output that would be easily shown off during their post-graduation job searches (e.g. sharable on sites like GitHub).

Possible Example: Mathematica/Maple/MatLab. These seem to satisfy 1 and 2, but fail on 3 (except perhaps for grad schools) and I'm not sure about 4.

Possible Example: CoCalc (formerly called SageMathCloud). This seems to be a stretch for 1 and 2, but certainly satisfies 3 and 4.

Does anyone have any advice/experience with implementing any of these, or some other option, across their whole mathematics curriculum? What did you discover to be the hardest/easiest parts of doing so? How do you think your choice fared in the above criteria? Are there other criteria that we should consider?

Note: Our statistics faculty has already decided on using R in the statistics courses. So this question is only concerning mathematics courses.

(Disclaimer: I founded CoCalc in 2013 and SageMath in 2004.)

Does anyone have any advice/experience with implementing any of these, or some other option, across their whole mathematics curriculum?

I've used Cocalc and SageMath, and interacting a lot with courses using CoCalc. Mike Croucher helped the entire math and physics departments switch to CoCalc at Univ of Sheffield, and wrote about that here. The Sheffield stats department use of CoCalc very significantly influenced the implementation of our web-based Jupyter notebooks; in particular, to better handle very large output, what packages are available, etc.

What did you discover to be the hardest/easiest parts of doing so?

For the users of CoCalc, stability was an issue. The site has been very stable for months now, so the new main issue is obtaining or creating content for students (e.g., Jupyter notebooks). We make installing software, distributing and collecting homework and handouts, etc., easy. Instructors also have too much friction related to grading (both manual and automatic), and addressing this head on is our current top development priority.

If you're doing undergrad math using Sage, the book Sage for undergrads is very helpful with addressing point 1. UCLA has also done an amazing job with developing Sage worksheets for their into undergrad LS30 course (they are one of the biggest CoCalc users).

Regarding point 2, CoCalc provides a very complete Python/Jupyter/Anaconda stack, R, Octave (MATLAB clone), Julia, etc., so provides reasonable preparation for general industry work compared to Mathematica/Maple.

Are there other criteria that we should consider?

Price is also a relevant factor for some places.

Definitely feel free to email me at wstein@sagemath.com if you have any questions you don't want to discuss here...

I use Jupyter notebooks and depending on the class use Python or R. Feel free to checkout some of my calc stuff (http://calculus-notes.readthedocs.io/en/latest/). They're a a bit rough but I use the Jupyter notebooks under the assumption that my students have laptops, and install Anaconda on their machines locally.

We go back and forth between paper and pencil and computer, but I believe that Python syntax is incredibly simple and makes sense as a choice language due to its freeness, ubiquity, and versatility. (Sometimes, I'll use R if the goal is more about basic work with data and introductory visualizations because I think matplotlib is more complex than ggplot2.)

For students in precalculus or calculus, one of my main concerns is that students can quickly move between representations of functions and sequences -- tables, graphs, symbols, words. In Python this is really quite simple. For example:

 def f(x): return x**2 x = np.linspace(-5, 5, 100) plt.plot(x, f(x)) 

defines a function, determines a domain, and generates a plot. Ideas like finite differences and partial sums are easily accomplished using either built-in functions in Numpy or with plain python and basic for loops. For example, derivatives can be examined by defining a derivative function per standard Calc definition, and examining the plot for $f, df$ together:

def df(x, h): return (f(x+h) - f(x))/h plt.plot(x, f(x)) plt.plot(x, df(x, 0.1))  As a sequence with finite differences with Numpy's diff method, this would be:

an = [f(i, 0.0001) for i in np.linspace(-2,2,100)] d_an = np.diff(an) plt.plot(an, 'o') plt.plot(d_an, 'o') 

With basic lists, functions, and matplotlib you can get a lot done on the cheap.

I don't believe there is a solid solution to the platform problem. If you know somebody who has a little understanding of deploying software on servers, you might consider trying to setup a JupyterHub (https://zero-to-jupyterhub.readthedocs.io/en/latest/index.html). This would allow students to login to the materials in a browser and store all the work here. You can integrate assignments and automatic grading with some work.

Ideally, we would first support students getting a halfway decent computer, internet access, and a consistent safe and quiet space to work on the machine.