Syllabus
Course number: CAAM 37830=STAT 37830
People
Instructor: Yuehaw Khoo. Office Hours Tuesday 600pm-730pm (Jones 122A).
TA: Yian Chen. PhD student in the Committee on Computational and Applied Mathematics. Office Hours Wednesday 5-7pm (Zoom).
TA: Sue Parkinson. PhD student in the Committee on Computational and Applied Mathematics. Office Hours Wednesday 1-3pm (Jones 304).
Course Format
This course is scheduled to meet T/TH 9:30 AM–10:50 AM.
Classes will be in person. Some material (including video) may be posted in extra to lectures to help students in assignments.
Homework will be posted Thursday, and due the following Thursday. We plan to have a homework assignment almost every week.
There will be a course-long group project. There will be a midterm checkpoint, and a final report. Groups will be assigned a few weeks into the quarter.
Problem solving sessions and office hours will not be recorded, so you can feel free to ask any question you want.
We will open discussion topics on Canvas where you can ask (or answer) questions as well. This may be the best way to get help at odd hours or find others to work with.
What you need for this course
You will need
- A computer, with the ability to install software and run programs
- An internet connection
Sue’s office hours will be held in person, and Yian’s office hours will be held via zoom.
We will assume you are running some UNIX-based operating system on your computer. For most people, this will mean either Mac or Linux. We will not support troubleshooting Windows issues - if you have windows on your computer, consider using the Windows Linux Subsystem, or dual-booting or single-booting some version of Linux.
In addition to a University of Chicago account, you’ll need to create a GitHub account as assignments will be distributed through GitHub classroom. Any work you do will be kept in private repositories. If you want, you can create a “burner” account that isn’t associated with your primary account (if you already have one).
Evaluation
- Weekly homework (70% of final grade, each weighted equally)
- Group final project/report (30% of final grade)
10% of group work (5% of total grade) will be based on teammate evaluations. These evaluations will be kept confidential. If you believe your score to be unfair, you can reach out to the instruction staff. We will look at git logs/history if we need to resolve any disputes.
You can drop your lowest homework score (or just not do a homework) if you submit a successful pull request to improve the content of the course reader. You can drop up to two homework grades in this way. Please coordinate through GitHub issues.
There are several things you will be evaluated on
- Correctness - is your answer correct? Does your code produce the correct output? (may use an autograder to check this)
- Performance/efficiency - there are often many ways to implement an algorithm. Some will be faster than others. We’ll let you know if we are looking for certain optimizations.
- Style - your code should be reasonably easy to understand. This is typically achieved through the use of docstrings, comments, and appropriately named variables.
- Team work - we’ll ask your teammates to evaluate whether you performed a fair share of the work.
Grading Policy
Letter grades will be assigned using the following hard cutoffs:
A: 93% or higher
A-: 90% or higher
B+: 87% or higher
B: 83% or higher
B-: 80% or higher
C+: 77% or higher
C: 60% or higher
D: 50% or higher
F: less than 50%
We reserve the right to curve the grades, but only in a fashion that would improve the grade earned by the stated rubric.
Late Work Policy
Late work won’t be accepted - however one can drop the lowest homework scores. Groups will be expected to come to a consensus on how to get work done on schedule.
Collaboration Policy
You are encouraged to collaborate with others in the class and use the internet to help with solving problems.
When working with others, you can discuss problems and solutions, but do not copy code. Note anyone you who contributed to your solution in a comment in your code. Same goes for any written answers (write your own, acknowledge others).
If you find helpful information online (e.g. on stackoverflow), put a note about what you used as well as the url in a comment in your code. There are only so many ways to call a function, and it is perfectly acceptable to copy and paste a line or two of code (with a comment).
You are welcome to make your solutions publicly available, but please wait until after the assignment due date.
The group project will be judged collectively - you do not need to say who did what. This will all be recorded by git logs anyways.
Textbook & Readings
There is no required textbook for this course. Readings will be posted in the schedule. An online course reader was also developed by Brad Nelson [https://bnels.github.io/].
A good reference which we may follow portions of is: Mastering SciPy by Francisco J. Blanco-Silva.. This is available as a free electronic resource through the University of Chicago Library.
We will cover a variety of topics that are not adequately covered in Mastering SciPy, including basic Python (and some advanced topics), use of computing resources, basic numerical and algorithmic analysis, and additional libraries.
Required, recommended, and optional readings will be posted in the schedule. Required means that the reading covers something that you will want to know that we may not cover in lecture, either for homework or life in general. Recommended means that the reading covers something you may find interesting/useful but may also not be necessary. Optional means that the reading covers material that overlaps with other sources, but perhaps you will like the exposition better.
List of Topics
We’ll survey a variety of topics used in scientific computing in (roughly) the following order, and with (roughly) 1 week per topic.
- Programming in Python
- Dense linear algebra (numpy)
- Sparse linear algebra (scipy)
- Functions of one variable (scipy)
- Symbolic computing (sympy)
- Numerical optimization (scipy)
- Graphs (networkx)
- Data processing (pandas)
- Machine learning (scikit learn)
In parallel, we will cover several practical topics, including
- Version control with git
- Unit testing
- Package development
- Cluster computing
- Parallel & GPU computing
A detailed schedule will be maintained.
Students with Disabilities
The University of Chicago is committed to ensuring equitable access to our academic programs and services. Students with disabilities who have been approved for the use of academic accommodations by Student Disability Services (SDS) and need a reasonable accommodation(s) to participate fully in this course should follow the procedures established by SDS for using accommodations. Timely notifications are required in order to ensure that your accommodations can be implemented. Please meet with me to discuss your access needs in this class after you have completed the SDS procedures for requesting accommodations.
Phone: (773) 702-6000
Email: disabilities@uchicago.edu