- Instructor:
- Qusai Al Shidi (call me Qusai): qusai@umich.edu
- Flemming Holtorf
- Aaron Ridley
- Peng Mun Siew
- Chen Wu
- Course Meeting Times: 9am - 5pm
- Location: Climate and Space Research Building (CSRB 2230) on 2455 Hayward St
- Contact Information: qusai@umich.edu
This course is for beginner to intermediate coders that are in the sciences. Graduate or undergraduates welcomes. This class is to teach capable scientist programmers to code well.
Have you ever been writing a bunch of code and then at some point it gets out of control and becomes hard to manage? Have you ever looked at code you wrote from a long time ago and don't remember what it's supposed to do? Do you have a piece of code that works and you're too afraid too touch it in case you might break it? We all have these fears and anxieties, this course will address them and help you become a better programmer.
Programming is becoming an exceedingly important skill for us scientists. Most scientists only learn how to code by self-teaching programming in graduate school. This course will alleviate the difficulties you might face in that phase of your scientific career. The skills and knowledge gained from this class is widely applicable to any project you will be working on for the rest of your scientific future.
You will be working with your peers and I in simple coding examples and learning disciplines and techniques to improve code. After all, programming is not writing code, but editing it!
The aim of this course is to make you a strong and capable science programmer. By the end of this course:
- You will develop skills to write clear and readable code.
- You will will be able to employ programming patterns to your code like adding docstrings.
- You will be able to collaborate and code as a team using git.
- You will be able to manage your code effectively.
- You will be able to avoid writing buggy code.
- You will learn how to code in Python effectively.
- You will learn how to code with scientific data.
- You will learn the fundamentals of writing simulations.
- You will learn how to code differential equation solvers.
- You will learn the different schemes involved in simulations.
- You will develop the skills to write your own space weather simulation.
Remember those points while we are learning throughout the weeks.
Throughout the class we will be using version control software, git, to write code together and review it by end of day. We are planning a workshop style summer school where you will be spending your time doing 'hands-on' programming and working with your peers. Let's have a good time!
At first it may be difficult to show your code but the further we go with this course the stronger your confidence in your readable code.
We will be using Python to teach the basics of coding.
Course Days:
- Monday: Intro to version control and the terminal: You will set up a github account and use git to learn some basic Python. (Learning Objectives 3, 4, 6)
- Tuesday: Coding using scientific data: We will be working with scientific data from various sources. (Learning Objective 1, 5, 7)
- Wednesday: Using python numerical tools: We will be learning how to use
numpy
,matplotlib
andPandas
. (Learning Objective 1, 2) - Thursday: Making more complicated plots and animations: We will learn to make animations and plots that are a little more complicated (Learning objective 4, 5, 7)
- Friday: Final project: We will end our week with a project for personalized groups to manage and plot scientific data (Learning objective 1-7)
- Monday: Intro to version control and ODEs: You will set up a github account and use git. (Learning Objectives 3, 4, 6, 8)
- Tuesday: Intro to chemistry, timestepping and discretization of diffusive terms: You will learn chemistry schemes and different time stepping schemes. Moreover, the discretization of Laplace/Poisson equations. (Learning objectives 9, 11)
- Wednesday: Radiative transfer and advective schemes: You will learn to how to model radiative source terms and the discretization of convection terms. (Learning objectives 9, 10)
- Thursday: Julia programming language and GITM: You will be introduced to Julia and be introduced to space weather models currently used in the field. (Learning objectives 8, 10)
- Friday: Final project: Develop your own 1D Ionosphere model. (Learning objectives 11)
Please start by sending me a short email introducing yourself to me. Things to inlude are your name, pronoun(s) and interests. This will help me cater my class time to your personalities.
Collaboration is encouraged since learning can be enhanced by sharing that experience with others. Please realize you are expected to produce your own work by the end of the day so do not copy and paste code and the idea is to understand what your code is doing which should be the end goal.
Try to use your pc only for course related work like coding in class or taking notes. Make sure you understand how to present with your laptop before coming to class, if you need help please let me know. You may take notes in a notebook if you are more comfortable handwriting your notes. Remember that the slides will be available after every class so spending too much time note taking might impede you from engaging fully during class time.
If you think you need an accommodation for a disability, please let me know at your earliest convenience. Some aspects of this course, the assignments, the in-class activities, and the way the course is usually taught may be modified to facilitate your participation and progress. As soon as you make me aware of your needs, we can work with the Services for Students with Disabilities (SSD) office to help us determine appropriate academic accommodations.
Our school is committed to fostering a safe, productive learning environment. Title IX and our school policy prohibit discrimination on the basis of sex, which regards sexual misconduct — including harassment, domestic and dating violence, sexual assault, and stalking. We understand that sexual violence can undermine students’ academic success and we encourage students who have experienced some form of sexual misconduct to talk to someone about their experience, so they can get the support they need.