** in Computing for Math and AIM PhD Students**

Consider taking at least one course to improve your computing skills, even if they are already substantial. This is a great way to satisfy Rackham’s cognate requirement. Most math professors strongly recommend that their PhD students learn to seriously compute in order to be better mathematicians and researchers. [The** cognate requirement** is flexible, so you can avoid computing if you must, although bear in mind that this is against the advice of the **National Academy of Science**, as well as **many of your professors**. **[More on the cognate**]

Courses vary with instructor and courses numbers can be deceptive. So be sure to get lots of advice, for example, by checking the student reviews on this website and asking around!

**SI 506:** *Programming I. *This assumes no prior coding experience and is mostly intended for non-technical students, so you may find it to be a very gentle introduction.

**EECS 402:** *Computer Programming for Scientists and Engineers. * This assumes no prior coding experience. Highly recommended.

**EECS 403:** *Graduate Foundations of Data Structures and Algorithms*.

**STATS 415:*** Introduction to Data Mining. *Students will use the coding language R, but are not assumed to already know it. Math students may find this too easy(?).

**EECS 475/575.** *Introduction to Cryptography* (is 475 too easy? How do these differ regarding assumed coding skill and mathematical maturity?)

**EECS 477.** *Introduction to Algorithms.* This is the more mathematical version of the graduate algorithms course EECS 586, probably more appropriate for most Math PhD students. Still, you should ask advice from and about the particular instructor.

**EECS 586.** *Design and Analysis of Algorithms*. Depending on the instructor, this course may be too easy for math PhD students as it covers a lot of simple math. It may be better to take EECS 477, which is usually more mathematically sophisticated.

**MATH 571:** *Numerical Linear Algebra. *Numerical linear algebra underlies much of the data revolution where mathematicians are needed desperately. Depending on the instructor, requires a high-level programming language such as Python or Matlab. Content can vary with instructors, sometimes more PDEs or more signal processing.

**EECS 551.** *Matrix Methods for Signal Processing, Data Analysis, and Machine Learning*. Similar to Math 571 but more more applied.

**EECS 442:** Computer Vision.

**EECS 444/544.** Analysis of Societal Networks (may be an ECE course?)

**EECS 574.** Computational Complexity

**EECS 454/EECS 545:** * **Introduction to Machine Learning.* This has been popular with Math PhD students. Students with strong linear algebra (most math grads) can go straight to EECS 545 instead of EECS 445, as long as they have enough coding maturity to code in whatever the instructor demands (some semesters Matlab, some semesters Python, possibly others, depending on instructor). EECS 445 will review more linear algebra concepts first.

**EECS 498 Topics.** But can be very interesting, depending on instructor.

**NERS 590 Methods and Practices of Scientific Computing. **A good class for students who have taken math 571 and know some basic programming already.