What should mathematics majors know about computing, and when should they know it?

This is a throwback post, first published in March 2014 (and referring to yet another post all the way back in 2007). As I teach my Linear Algebra and Differential Equations class this semester, which uses more computing than ever, I'm thinking even more about these topics. Enjoy, and check the post-credit scene at the end where I add some updated thoughts for 2023.


Yesterday I got an email from a reader who had read this post called What should math majors know about computing? from 2007. In the original article, I gave a list of what computing skills mathematics majors should learn and when they should learn them. The person emailing me was wondering if I had any updates on that list or any new ideas, seven years on from writing the article.

If anything, over the past seven years, my feelings about the centrality of computing in the mathematics major have gotten even more entrenched. Mostly this is because of two things.

First, I know more computer science and computer programming now than I did in 2007. I’ve learned Python over the last three years along with some of its related systems like NumPy and SciPy, and I’ve successfully used Python as a tool in my research. I’ve taken a MOOC on algorithms and read, in whole or in part, books and articles that contain significant discussions of computer science-y things like time complexity and NP-completeness. As my own understanding of CS has expanded, I’ve been better able to see how computing is important to mathematics and how fluency with computing can help a person learn mathematics.

Second, I’ve been using computers and software more and more in my teaching. Back in 2007, I was just using Geometers Sketchpad and Derive (anybody remember Derive?), and then somewhat sparingly. These days the computer plays a front-and-center role in all of my classes. My students are using Geogebra, Wolfram|Alpha, and Excel every week in Calculus; LaTeX in my proof-oriented classes; Mathematica in my linear algebra and Calculus 3 classes; and so on. The more I use the computer in my classes, the more upside I see for student learning, and so I use it even more.

So I would argue now, even more fervently than I did in 2007, that computing is an essential facet of any legitimate Mathematics degree program, including those for pre-service teachers, and that Mathematics majors need to demonstrate skill at computing early and often. By “skill at computing” I mean a collection of skills often referred to as “coding”. By “coding” I mainly mean making a computer do what you want, rather than you doing what the computer wants. Math majors need the former kind of computing fluency. The latter kind of fluency is that of a skilled end user of an application, which is useful too but not necessarily helpful in solving the kinds of problems that mathematicians solve. As a mathematician you have to bend the computer to your will.

Why even have computing and coding part of the math major in the first place? My convictions are:

  • Computing and coding are skills that are complementary to non-technological mathematical reasoning such as proving theorems. In fact proving theorems and writing computer programs are remarkably similar processes and can be mutually supportive for learners when they do both.
  • The computer is a tool for studying mathematical ideas in the same sense that a microscope is for studying biology and a telescope is for studying astronomy. Can anyone seriously imagine banning microscope technology from the biology major, on the argument that biology is a more pure discipline without the technology? Instead, bring it in and teach students how to use it well.
  • Computing is a valuable skill in the workplace in its own right, and full of other skills that are transferable and in harmony with the traditional learning goals of the math major. Try debugging a program sometime without engaging in critical thinking and rigorous problem solving.
  • Computing is fun, and fun is good.

I will admit that I have no research to back up those claims, which is why I label them “convictions”. However, I’d point to the MAA CRAFTY report for some support. In that report, various client disciplines were asked about what they’d like to see more of, and less of, from their own majors’ first two years of mathematical studies. This is mostly calculus, linear algebra, and differential equations. Shockingly, not a single discipline said, “We need more trig substitution integrals” or “Let’s have more crazy-exotic limits being taken by hand in Calculus 1”. If anything, the client disciplines wanted less content and more depth. And they wanted more technology – both explicitly (like engineering which specifically calls for more spreadsheet use) and implicitly (like those disciplines that want students to have more skill with checking their own work).

In terms of what I think math majors should know, I don’t have much to change from my list in the original 2007 article, actually. I would substitute “mathematical software” for “computer algebra system” in year 1 – starting students off with Geogebra, Wolfram|Alpha, and Excel rather than Maple or Mathematica seems smarter, since the former set of tools is free (or ubiquitous) and simpler to learn. I would emphasize the use of free and open-source tools whenever it makes sense (Sage, rather than Mathematica or Maple; Python + NumPy + SciPy rather than MATLAB; etc.) And I’d keep it developmental – learn simple tools in year 1 and build complexity as students gain mathematical maturity. And I think I would save requiring learning how to program until year 2 just because programming pairs so well with learning how to prove theorems.


Updates for 2023

  • Like I said at the top, my current class on Linear Algebra and Differential Equations uses computing technology more than probably any other class I've taught, including the discrete math course I teach for CS majors. The tool stack is pretty simple: We use SymPy, running in Python via Jupyter notebooks that are hosted through Google Colab. We are using SymPy for just about everything: experimentation/conjecture activities (e.g. What are the eigenvalues of an upper-triangular matrix?), doing computations in miniprojects (e.g. using a Markov chain model to predict voter turnout in election cycles many years into the future), even pedestrian stuff like checking hand-computation practice. Not much in the way of programming, in fact there really is no programming at all – just using SymPy like most people would use Mathematica. But certainly a lot of coding in the sense I mentioned here: Making the computer do what you want, rather than always doing what the computer seems to want.
  • By-hand computation in this class is important, in fact the "Foundational Skills" are all assessed through by-hand computation. But it's limited. For example Foundational Skill LA.1 requires students show that they can get a 3x4 matrix to reduced row echelon form by hand. Skill LA.2 has students show they can determine if a vector is in the span of a bunch of other vectors — which involves row reduction, but they can use SymPy on this one to do the row-reduction.
  • I have not noticed any reduction in students' ability to do calculations by hand as a result. In fact, using the computer to shoulder the load of tedious and error-prone computations shortens the path to understanding the numerous and intricately-connected concepts that linear algebra is famous for, which then helps students understand more complicated computations faster. I noticed that this week teaching eigenvalues and eigenvectors for the first time: The students picked up the idea lightning-fast because they completely understood linear dependence and how this creates free variables in a system.
  • These are all engineering majors, but their experience makes me more certain than ever that math majors should be doing a lot of this same kind of thing, from day 1. Especially pre-service teachers who have the most to gain from a deep understanding of mathematical concepts and from being relieved of having to do computations by hand all the time.