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.
