- Instructor: Qusai Al Shidi (call me Qusai): qusai@umich.edu
- Course Meeting Times: Wednesdays 3pm-5pm
- Location: Climate and Space Research Building--Auditorium
- Contact Information: qusai@umich.edu
- Office Hours: Fridays 1pm-3pm, CSRB 2128
- Course Website: http://github.com/qalshidi/programming-practices
This course is for intermediate coders that are in the sciences. Graduate or undergraduates welcomes. If you are a beginner coder I recommend taking a beginner class before taking this one. This class is to teach capable scientist programmers to code well.
Since this is a programming course, please bring a laptop into class.
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 be 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.
Remember those points while we are learning throughout the semester.
The first half of the class will be an interactive lecture in which I will present concepts and ensure your understanding through clicker questions and discussion. The second half of the class will be working on your fellow classmates' code and a small presentation by a student showing off what you came up with.
Part of the benefit of this class is to improve upon your own code. Therefore come to the first day of class with code you've written before that you want to improve. This will ensure you are invested in making your code better. If you don't have any code I will provide it but I strongly encourage you bring your own.
We will not have a textbook, all the material can be found on the course github. It will include further reading, and if you want more, don't be afraid to ask me through an email or after class 😊.
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.
This course is programming language agnostic, your code should be readable to any programmer, examples will be in Python because I believe I can make examples easier to read with it.
Assignments are due before the beginning of class since you will be working on those assignments with your groups as well. In the beginning of the semester we will work on the presentation schedule which will happen every week.
Before the first week of class email me the your code in which you are planning to improve. This can be anything, code you've written before or code for your research. We will create git repositories in the first week of class and we will track improvement over time.
Course Weeks:
- Intro to version control: You will learn how to use git to submit homework for the class. (Learning Objectives 3, 4)
- The Zen of Coding: We will learn how to get into a mindset a good coder must get into before tackling code. (Learning Objective 1, 5)
- Writing Readable Code: We will learn everything needed to write clear and readable code. (Learning Objective 1, 2)
- Programming Patterns I: Programming patterns are programming skills to use when coding. Anti-patterns are programming habits that you can avoid to code better. (Learning objective 2, 4, 5)
- Programming Patterns II: Programming patterns are programming skills to use when coding. Anti-patterns are programming habits that you can avoid to code better. (Learning objective 2, 4, 5)
- Programming Anti-Patterns I: Programming patterns are programming skills to use when coding. Anti-patterns are programming habits that you can avoid to code better. (Learning objective 2, 4, 5)
- Programming Anti-Patterns II: Programming patterns are programming skills to use when coding. Anti-patterns are programming habits that you can avoid to code better. (Learning objective 2, 4, 5)
- Functional Programming I: Functional programming is a coding style that helps you avoid buggy code. (Learning Objective 4, 5)
- Functional Programming II: Functional programming is a coding style that helps you avoid buggy code. (Learning Objective 4, 5)
- Collaborative Coding I: We will learn how to use git to code collaboratively. Merge code, create branches, submit pull-requests. (Learning Objective 3)
- Collaborative Coding II: We will learn how to use git to code collaboratively. Merge code, create branches, submit pull-requests. (Learning Objective 3)
- Unit tests: You will learn how to make your code resilient to failure from edits of others by making easy tests. (Learning Objective 4)
- Final Project and Presentations I: Show how your code has improved over time to your class mates.
- Final Project and Presentations II: Show how your code has improved over time to your class mates.
The class will be divided by a lecture portion and a presentation portation. Both will include active participation in terms of clicker questions for the lectures. A student will present their homework to class and you are expected to comment and give your thoughts on how to improve this code. This is because making clear and readable code is part of our learning goals.
Every week you will have homework you will need to submit before class in preparation which will be outlined in course webpage. If you make sure to do this you will come to class prepared to understand how you can improve as a programmer.
This course is a 1 credit hour course and will only have a Pass/Fail grade. Nobody is perfect and as long as you're able to achieve 80% effort you will pass, but you should strive for 100% anyway. This means that as this is a 14 week course try not to miss more than 3 classes. You will have one homework a week so try not to miss more than 3 homeworks. You will be expected to present at least once so make sure it will happen this semester.
Passing Grade:
- 80% effort which includes.
- Attendance: 11/14 weeks.
- Homework: 11/14
- Presentation: 1/1 (You must present)
- Final project: 1/1 (You must show how you improved your own code in the last week).
If this might cause a problem for you or you will need accomodations please see me as soon as possible. I am invested in your success and want to see you grow as a scientist and programmer.
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 laptops 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. SSD (734-763-3000; http://ssd.umich.edu) typically recommends accommodations through a Verified Individualized Services and Accommodations (VISA) form. Any information you provide is private and confidential and will be treated as such.
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.
Confidential support and academic advocacy can be found with the Sexual Assault Prevention and Awareness Center (SAPAC) on their 24-hour crisis line, 734-936-3333 and at http://sapac.umich.edu/. Alleged violations can be non-confidentially reported to the Office for Institutional Equity (OIE) at institutional.equity@umich.edu. Reports to law enforcement can be made to University of Michigan Police Department at 734-763-3434.