Syllabus

Primary Objectives

This course is designed for students who may be familiar with their core theoretical and research topics but may not be as familiar with standard computational techniques. The use of computation as the third pillar of research (along with theory and observation/experimentation) in both applied mathematics and statistics, as well as most other scientific and research disciplines, is now completely standard and necessary for success in these fields. This course is designed to ensure that students have the necessary basic computational skills and tools on which to build more specific technical knowledge. The course therefore acquaints the student with all the most fundamental aspects of scientific computing, providing a brief overview of the most important topics from algorithm development, programming (including the use of compilers, libraries, debugging, optimization, code testing, code publication, etc.), data storage, and data analysis and visualization tools. Students will be introduced to a variety of programming languages and will gain hands-on practice on all subjects through practical homework assignments and projects.

Learning Outcomes

By the end of this course you will be able to:

  • Effectively navigate Linux machines, and utilize the git version control system to manage your own projects

  • Approach scientific problems and reinterpret them in way suitable for investigation with scientific computing

  • Build Fortran and C programs using make

  • Execute numerical tasks using Fortran 90, Python, and C

  • Debug Fortran and C programs effectively

  • Use Python as a scripting tool to manage other codes, and for data visualization/analysis

  • Describe the relative strengths and weaknesses of Fortran 90, C, and Python, and explain what sort of problems each one is well suited to solving

  • Appreciate the complexities of computer hardware and how it influences the design of scientific software

Required Materials/Equipment:

This is a computing class, and regular access to a compatible computer is required. Chapter 1 deliberates on this requirement, and what campus resources are available to you. Note that all software used in this course is freely available. Please contact the instructor as soon as possible if you have any concerns regarding your access to an appropriate computer.

Please see Items for the Class for more information.

Schedule

Please note that this schedule is tentative and may be modified if needed.

Week 1:

The syllabus and course policies will be discussed, as well as what scientific computing involves. Introduction to Unix/Linux basics including basic tools for programming – editors, compilers, libraries, ssh/scp, version control, etc.

Week 2:

Introduction to Fortran (90 or above) algorithm development and programming (e.g., data types, control flow, data structures, functions, subroutines, etc). Introduction to writing makefiles (e.g. wildcards, environment variables, incremental builds, etc).

Week 3-4:

More advanced programming in Fortran (90 or above), (e.g. modular programming, dynamic memory, user typed structures, I/O, etc.). Demonstration of debugging with GDB and valgrind. Reasoning about problems in scientific computing.

Week 5-6:

Introduction to Python and discussion on interpreted languages. Contents include numerical tools (e.g. NumPy, SciPy), data visualization tools (e.g. Matplotlib), as well as a view of Python as a support system for heavier scientific codes.

Week 7-8:

Introduction to the C programming language and best practices. Control flow, data structures, pointers, and dynamic memory will be introduced. Interoperability between C, Fortran, and Python will be discussed. The Final projects will be introduced.

Week 9:

Basics of computer architecture (chip architecture, cache, network infrastructure, file systems, etc) with a view to understanding code optimization, bottlenecks, debugging, etc. The final project topics will be discussed in greater detail.

Week 10:

Introduction to good software engineering practices: structure of large code bases, code verification and validation. We will take a brief tour through several actively maintained code bases.

Optional Topics:

Depending on the pace we keep through the quarter we may have time to cover a few optional topics, such as wrapping C/Fortran functions for direct use in Python, LaTeX typesetting, and whatever else we may think of.

Covid-19

This is an in-person course, and as such we need to remain cognizant of Covid-19. This course has been designed to allow us to smoothly shift to a remote format if required (e.g. I need to self-isolate, or university requirements change).

What you can expect from me:

I will wearing a mask throughout our lectures regardless of the overarching campus guidelines. I will be getting regular asymptomatic Covid tests, pending their availability on campus. All assignments have been designed to work in a remote format. Lectures will be recorded and available to all students (see below).

What I expect of you:

If you experience an illness or exposure that requires you to miss class sessions, please communicate with me as early as possible. I will ensure that you have all necessary materials to continue making progress in the course.

Lecture Recordings:

I will be recording all of the lectures. There are two primary reasons for this. First, I want to cater to any students needing to miss class for the sake of self-isolation. Second, I believe that computational courses can benefit greatly from a repository of lectures. Sometimes you may want to see what the expected output of a particular command or program is, or perhaps you need the greater context for running something. These are things that do not translate particularly well to personal notes, so having recordings of the lectures available to re-watch later on can be quite helpful.

I emphasize that these recordings are not a substitute for attending lecture. This is still an in-person class, and working purely from these recordings would only be a disservice to your education.

The lecture capture system will record both the projector video, and video of front of the room. The student seating will not be recorded, but you should be aware that recording is happening in the room.

Academic Integrity:

All members of the UCSC community benefit from an environment of trust, honesty, fairness, respect, and responsibility. You are expected to present your own work and acknowledge the work of others in order to preserve the integrity of scholarship.

Academic integrity includes:

  • Using only approved materials and sources on assignments

  • Submitting your own original work

  • Citing all external sources

Academic misconduct includes, but is not limited to:

  • Sharing assignment solutions/code with others

  • Copying/purchasing material from another source and submitting it as your own

  • Submitting your own work in one class that was completed for another class (self-plagiarism) without prior permission from the instructor

Violations of the Academic Integrity policy can result in dismissal from the university and a permanent notation on a student’s transcript. For the full policy and disciplinary procedures on academic dishonesty, students and instructors should refer to the Academic Misconduct page at the Division of Undergraduate Education.

Accessibility:

UC Santa Cruz is committed to creating an academic environment that supports its diverse student body. If you are a student with a disability who requires accommodations to achieve equal access in this course, please affiliate with the DRC. I encourage all students to benefit from learning more about DRC services to contact DRC by phone at 831-459-2089 or by email at drc@ucsc.edu. For students already affiliated, make sure that you have requested Academic Access Letters, where you intend to use accommodations. You can also request to meet privately with me during my office hours or by appointment, as soon as possible. I would like us to discuss how we can implement your accommodations in this course to ensure your access and full engagement in this course.

Title IX / Care Advisory:

The Title IX Office is committed to fostering a campus climate in which members of our community are protected from all forms of sex discrimination, including sexual harassment, sexual violence, and gender-based harassment and discrimination. Title IX is a neutral office committed to safety, fairness, trauma-informed practices, and due process.

Title IX prohibits gender discrimination, including sexual harassment, domestic and dating violence, sexual assault, and stalking. If you have experienced sexual harassment or sexual violence, you can receive confidential support and advocacy at the Campus Advocacy Resources & Education (CARE) Office by calling 831-502-2273. In addition, Counseling & Psychological Services (CAPS) can provide confidential, counseling support, 831-459-2628. You can also report gender discrimination directly to the University’s Title IX Office, 831-459-2462. Reports to law enforcement can be made to UCPD, 831-459-2231 ext. 1. For emergencies call 911.

Land Acknowledgment:

The land on which we gather is the unceded territory of the Awaswas-speaking Uypi Tribe. The Amah Mutsun Tribal Band, comprised of the descendants of indigenous people taken to missions Santa Cruz and San Juan Bautista during Spanish colonization of the Central Coast, is today working hard to restore traditional stewardship practices on these lands and heal from historical trauma.

Primary reading material

  • This website and the contained lecture notes Contents:

Secondary reading materials