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 1997. 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 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 marginalizing 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 some 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.
So what does the comment section think? Any specific things you’d add to what math majors should know, or concepts that should be kept in mind when integrating coding into the math major? (Or disagreements that this should be done at all?)