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.