This course aims to serve the broad community of graduate students (both pure and applied) who might benefit from having a forum in which to explore topics in coding. This course is open to all levels, from beginning programmers working on their first project, to advanced programmers.

course goals

While many mathematicians end up using computation, few of us received any formal training. As a result, mathematicians often miss out on important programming strategies, techniques, design ideas, and collaborative tools which could make their projects easier to create, use and maintain. This course aims to bridge some of these gaps, by taking students with specific computing goals (i.e. some ideas for projects, or projects currently in progress), and work with them both with group and individual meetings, to provide them with specific tools to help them from wherever they are.

course structure

The emphasis will be on a combination of individual projects and small working groups, each group engaged with either a single project collaboratively, or on similar projects in parallel.

The course will meet weekly, alternating each week between a group meeting in the 6th floor lab, and individual/small group meetings. The individual/small group meetings will either take place in person or via video (Skype/Google Hangouts, etc), depending on schedules and timing. For the group meetings, we will have scheduled a block of time for “open lab,” from 10am to 2pm on Fridays, roughly once every other week, and all course attendees are required to attend for at least one hour of these blocks, at each meeting.

course content

Students should either come with their own coding projects of interest, or have a desire to learn a particular specific set of skills during the semester.

Some other things that we could focus on, depending on student needs, are:

  • specific support with the use and installation of mathematical software packages (SAGE, MatLab, Mathematica, pari, Macaulay2, R, …);
  • coding technique and style (algorithms, memory and speed issues, recursion, datatypes and abstraction, objects);
  • coding strategies and project management, for example, working with larger projects over long periods of time;
  • tools for collaboration, such as version control (i.e. Git) and task assignment;
  • using computing resources available at UGA such as the 6th floor computing lab and the machines at the Georgia Advanced Computing Resource Center (GACRC) for extra computing power;
  • coding in specific languages (C/C++, python/jupyter, ruby, javascript, FORTRAN, …), compiling and running programs on different platforms.

I will personally be working on learning some combination of Haskell and/or Coq, and would be happy to do this in collaboration with students who are interested in this as their project.