Scientific Programming, Data Analysis & Visualization
CU Boulder ATOC
2026-01-01
Spring 2026
Education:
Research Expertise:
Previous Lives:
Energy Consultant • NCAR Project Scientist • Photographer • Musician • Woodworker • Ping-Pong Table Maker • Pizza Maker • Baseball Field Tender
Call me: Will (or Dr. Chapman if you prefer)
Office Hours: Tu/Th 11:15-12:15p (Aerospace Café)
My promise to you: I will work hard to make this valuable for your career.
Education:
Interests:
Call me: Aiden
Office Hours: M/W 4-5p (DUAN D391)
If you are struggling there are resources:
Basic Needs
Mental Health
Academic Support:
My door is always open (SEEC N258). If you’re struggling, please talk to me.
This class follows CU’s Honor Code
What collaboration looks like in this class:
When in doubt, ask! I’d rather clarify than have you worried.
Large Language Models (ChatGPT, Claude, Copilot) are here to stay.
My philosophy:
✅ Allowed:
❌ Not Allowed:
⚠️ Gray Area → Ask First:
Bottom line: If you can’t explain your code line-by-line, you don’t understand it well enough.
This course will prepare you for software-intensive geoscience careers
Week-by-week progression:
| Week | Topic | Key Skills |
|---|---|---|
| 1 | Python Fundamentals | Variables, functions, control flow |
| 2 | NumPy & Plotting | Arrays, vectorization, matplotlib |
| 3 | Pandas & Time Series | DataFrames, resampling, rolling windows |
| 4 | xarray & Gridded Data | NetCDF, multi-dimensional arrays, climatologies |
| 5 | Mapping & Cartopy | Projections, overlays, publication maps |
| 6 | Version Control (git) | Repositories, commits, collaboration |
| 7 | Data I/O & Formats | CSV, NetCDF, HDF5, APIs |
| 8 | Midterm 1 | |
| 9 | Statistics & Uncertainty | Distributions, confidence intervals, bootstrapping |
| 10 | Linear Regression | Fitting, residuals, diagnostics |
| 11 | Spectral Analysis | FFT, power spectra, filtering |
| 12 | Midterm 2 | |
| 13-15 | Final Projects | Real research workflows |
By the end of this semester, you will be able to:
These skills apply far beyond this class:
Graduate research • Climate modeling • Data science • Environmental consulting • Software engineering
Online Textbook: Runestone Academy
your_identikey_sp26_atoc4815 (e.g., abcd1234_sp26_atoc4815)hellox ← Please reset this immediately!Look at Runestone dashboard
Additional Resources:
.ipynb files)Everything is free and online. No textbook to buy!
Each week follows this pattern:
Before Tuesday:
Tuesday Class:
Before Thursday:
Thursday Class:
By Sunday 11:59pm:
.ipynb).py)Throughout the week:
Labs (12.5%):
Homework (12.5%):
.py files)In Class Tests (10%):
Attendance/Participation (10%):
Midterm 1 (15%): Monday, February 3rd
Midterm 2 (15%): Wednesday, March 12th
Final Project (25%): Due Monday, April 27th, 11:59pm
Conflicts with these dates? Let me know ASAP.
| Component | Weight |
|---|---|
| Homework + Labs | 25% |
| Attendance & Participation | 10% |
| In-class quizzes | 10% |
| Midterm 1 | 15% |
| Midterm 2 | 15% |
| Final Project | 25% |
| Total | 100% |
Wait!
I will build in a curve (likely ~15%) Yes! 15% buffer built in. You can miss some assignments and still get an A.
Translation:
On the whiteboard, write:
| Level | Meaning |
|---|---|
| 0.2 | Can follow examples, modify small things |
| 0.4 | Can write from scratch with docs open |
| 0.6 | Productive, can debug non-trivial issues |
| 0.8 | Could teach it / deep fluency |
| 1.0 | I basically wrote the language |
Example:
Alice | Python (0.6), MATLAB (0.4), SQL (0.2) | ✓
Grab a marker and add your info!
I had a hard time getting questions answered last semester.
New system I’m trying (you’re my test subjects):
When I ask a question in class:
The scale:
| # | Meaning |
|---|---|
| 0 | I have no idea |
| 1 | I’ve heard the term but can’t explain it |
| 2 | I have a rough idea but not confident |
| 3 | I could kind of explain it |
| 4 | I can explain it clearly |
| 5 | I could explain it AND give an example or connect it to other things |
Traditional classroom problem:
This system:
If you hate this, tell me! We can abandon it if it’s not working.
If you love this, also tell me! I’d like to know it’s helpful.
Question: What is a for loop?
Take 15 seconds to think…
Ready? Show me your numbers: 0-5
[I scan the room for distribution]
[I call on someone with a 3-4]
Answer: A for loop is a programming construct that repeats a block of code for each item in a sequence (like a list or range). For example, for i in range(5): would repeat the indented code 5 times, with i taking values 0, 1, 2, 3, 4. It’s how we process multiple items without writing the same code over and over.
Show numbers again—did that help?
We need to get your computer ready for the semester:
Install VS Code (our code editor)
Install Git (version control)
Set up terminal in VS Code
Install conda environment
(This takes ~5 minutes)
Install these extensions today:
PLACEHOLDER: Screenshot of VS Code extensions panel
| Extension | ID | Purpose |
|---|---|---|
| Python | ms-python.python |
Python language support |
| Pylance | ms-python.vscode-pylance |
Fast Python IntelliSense |
| Jupyter | ms-toolsai.jupyter |
Notebook support |
| Ruff | charliermarsh.ruff |
Fast Python linter |
| Markdown All in One | yzhang.markdown-all-in-one |
Markdown editing |
To install:
Need help? Raise your hand! Will and Aiden will circulate.
What is conda?
Download the environment file:
Canvas → Files → atoc-2025-lite.yml
Then run:
Stuck? Don’t leave today without getting this working. Get help now!
By Tuesday, Jan 13th:
By Thursday, Jan 15th:
By Sunday, Jan 18th, 11:59pm:
Pro tip: Start homework in Thursday’s class—we’ll be there to help!
Stuck on something? Here’s the hierarchy:
Canvas: canvas.colorado.edu
Runestone: runestone.academy
Course Website: willychap.github.io/slides
GitHub: (We’ll set this up in Week 6)
To make this class work for everyone:
This class is hard work.
Every employer I talk to says:
“We need people who can code and understand atmospheric science.”
That’s you, by the end of this semester.
I promise:
What I ask from you:
Today (remaining time):
Raise your hand if you need help at any point!
Aiden and I will circulate to help troubleshoot.
Welcome to ATOC 4815/5815!
Let’s make this an amazing semester.
| Week | Dates | Topic | Lab/HW | Reading |
|---|---|---|---|---|
| 1 | Jan 14-16 | Python Fundamentals | Variables, functions, loops | Runestone Ch 1-3 |
| 2 | Jan 21-23 | NumPy & Visualization | Array operations, matplotlib | Runestone Ch 4-5 |
| 3 | Jan 28-30 | Pandas & Time Series | DataFrames, resampling | Runestone Ch 6 |
| 4 | Feb 4-6 | xarray & Gridded Data | NetCDF, climatologies | Canvas reading |
| 5 | Feb 11-13 | Mapping & Cartopy | Projections, overlays | Canvas reading |
| 6 | Feb 18-20 | Version Control (Git) | Repos, commits, branches | Canvas reading |
| 7 | Feb 25-27 | Data I/O | CSV, NetCDF, APIs | Canvas reading |
| 8 | Mar 4-6 | Midterm 1 Review | Practice problems | Review all |
| 9 | Mar 11-13 | Statistics | Distributions, uncertainty | Canvas reading |
| 10 | Mar 18-20 | Linear Regression | Fitting, diagnostics | Canvas reading |
| 11 | Mar 25-27 | Spring Break | No class | Rest! |
| 12 | Apr 1-3 | Spectral Analysis | FFT, filtering | Canvas reading |
| 13 | Apr 8-10 | Midterm 2 Review | Practice problems | Review all |
| 14 | Apr 15-17 | Project Work Time | In-class work | N/A |
| 15 | Apr 22-24 | Project Presentations | Final project due | N/A |
Common Issues:
Issue: “conda: command not found”
Issue: “Permission denied” on Mac
sudo before command (requires admin password)Issue: Git Bash not showing in VS Code on Windows
Issue: Environment creation fails
conda instead of mambaconda update condaIssue: Extensions won’t install
Still stuck? Slack me a screenshot of the error!

ATOC 4815/5815 - Week 0