# Math 581d: Computer Programming for Pure Mathematicians

Meets in Room 167 in Savery Hall.

This course is about the use of computers to help with pure research mathematics. It will not discuss applied mathematics, for which there are many existing courses in the UW applied mathematics department (e.g., by Randy Leveque, and others).

## Papers to read

Joyner-Stein, 2007: a one-page paper in the Notices of the AMS on open source mathematical software

The Sage Project: Unifying Free Mathematical Software to Create a Viable Alternative to Magma, Maple, Mathematica and Matlab, with Burcin Erocal, 2010, the paper for my plenary talk at the 2010 International Congress of Mathematical Software in Japan.

## Related Sage Courses

I taught an undergraduate course on Sage three times:

## Relevant software links

### General purpose mathematics software

These are general purpose math software environments that are useful for research mathematics.

Sage -- open source, developed by academics, not for profit

Magma -- closed source, developed by academics, not for profit (try it here)

Mathematica -- closed source, developed by an American company for profit

Maple -- closed source, developed by a Canadian company (that is owned by a Japanese company) for profit

### Special purpose math software systems and libraries

Pari -- number theory, open source

GAP -- group theory and combinatorics, open source

Singular -- commutative and non-commutative algebra, open source

Macaulay2 -- commutative algebra, open source

FLINT -- number theory C library, open source

MPIR and GMP -- basic integer and rational arithmetic C library, open source

Maxima -- symbolic calculus and more (in Lisp)

### General purpose programming languages

In this course we will focus mostly on Python, Cython and C++, which provide a nice range of capabilities, which illustrate various approaches to programming with different pros and cons.

Python -- a popular general purpose interpreted programming language (user language of Sage)

Cython -- compiled variant of Python, which supports using C/C++ functions and data types directly

C/C++ -- a fast and popular compiled language that has been around for quite some time; a massive amount of useful research mathematics code is written in C or C++.

Though Java, C#, and Perl are popular languages, I've personally encountered little pure mathematics research code written in them (e.g., none of the above systems use Java, C# or Perl, as far as I know). All the systems listed above (except Maxima) are written in C/C++ and a special-purpose interpreter, or Python, in the case of Sage. In fact, Python itself is "just" a big C program.