Programming with Software Libraries

Course Overview

Welcome to ICS 32: Programming with Software Libraries. Here you will find all learning materials for the course. Assignment descriptions, lecture notes, references, and other learning related information will be located here.

As we are still wrestling with the uncertainty of COVID-19 this quarter, we will be running this course using a hybrid format. If you prefer to participate in the course remotely or need to be remote temporarily, you will have all required materials available to you online. In-person lecture times will focus on interactive activities, coding challenges, discussion, and much needed socialization. You will not be penalized for not attending in-person classes, but these sessions will offer a unique experience that will reinforce what you learn through lecture. Although in-person sessions will be recorded, the real value will be in attending live, so we strongly encourage you to join!

This website is built with Jupyter Books. We use the Jupyter Book format because it provides a rich format for sharing, viewing, and consuming technical information. In the upper right side of this website you will find a link that allows you to download the entire book in Markdown or PDF format. Feel free to use this feature if you need an offline copy of course materials. This website will be updated frequently as we work our way through the class. So be sure to check back at least once a week. However, when major updates do occur, an announcement will be sent at the course workspace on Zulip (login details on Canvas).

Course Content


For a breakdown of grade percentages and due dates please see the Canvas course page.


Although we are a hybrid class this quarter, having a chat system available during the last year of virtual-remote classes has proved to be a vital tool to building class cohesion. As we will likely have students are unable to attend in-person classes for at least some of the quarter, we need a way to stay connected. So we will have a course Zulip workspace where we can all chat, share, and learn from each other. Zulip will be our primary tool for communication. You will be expected to join the class workspace and participate in informal discussions throughout the quarter. You must join and post in Zulip to receive full credit for participation.

We will also be using an online quiz tool called Socrative throughout the quarter to keep track of our progress together and have a little fun. Socrative quiz sessions will occur live during our in-person meeting time every Thursday. Each quiz will contain questions relating to course material, discussions, and your overall thoughts on the class. These quizzes are designed to be low-stakes and fun, but will also contribute to your participation grade for the class. The results of the quizzes will be posted here, shortly after they occur.


Assignment details will be posted as the quarter progresses. When a new assignment overview page is posted, the corresponding assignment title below will be updated with a link in the navigation bar to the left.


A0 - Getting Started with Python: A simple program to get you started.

A1 - File Explorer: A program to search for and manage files on your file computer.

A2 - Journal: A program for writing your thoughts and storing them on your computer.

A3 - Publishing Online: A program for sending your thoughts off to the Internet.

A4 - Extending the Platform: A program that collects and shares data from Web API’s.

A5 - Encrypted Graphical User Interface: A program with a graphical user interface.


The assignment you submit by the deadline will be considered final. We will not accept regrade requests unless you are certain there was a mistake in the grading process. It is your responsibility to make sure your code works before turning it in. So test and test again.


You will have the opportunity to improve your code for up to three main assignments (A1-A5) by submitting a refactor. You can refactor any main assignment that you want, but no more than three. For this class we will define a refactor as:

  • More than just a bug or broken requirement fix. To be considered complete, a refactor must make identifiable improvements to your code.

  • One half part clear explanation of the changes you made.

  • One half part for actual improvement of your code.

  • One full part successful function of the improvement.

You don’t have to have a low grade to refactor. If you received full credit on your assignment, you can still submit a refactor. There is always room for improvement! Similarly, you do not have to wait for graded feedback on your assignment to work on a refactor. In fact, we prefer if you identify issues on your own rather than rely on our input to decide where to make improvements.

Completing all three refactors and receiving full credit on each will raise your grade one half letter. So if you have a B+, a perfect set of refactors will give you an A-. However, the maximum grade you can achieve through refactors is a 96% or A. Therefore, the only way to earn an A+ in this class is through high scores on original assignment submissions, lab work, and participation.


Due to the uncertainty of in-person access this quarter, we will be replacing midterm and final exams with a course project. The final project must be built using the tools and techniques you learn throughout the course. More details will be provided at the midpoint of the quarter.

Lecture Notes

As we move through each week, notes will be added from both prerecorded lectures (available on Canvas) and discussions that we have with each other. New lecture note pages will be posted every Monday. The topics we will be discussing each week are listed in the next section.



The following schedule is subject to change throughout the quarter.

Although we are an remote for the first few weeks, we will return to partial in-person class as soon as allowed. When we do return to in-person, we will focus our time together on learning exercises rather than the traditional lecture.

You can expect a typical week to look similar to the following:



Pre-recorded Lecture

In-person Class (starting week 5)


Remote Class



Remote Labs


Remote Labs


Remote Labs

Labs will be held remotely until we return to campus. We will update lab locations in week 3, assuming all goes according to plan. Although week to week lab attendance is optional, you will be required to complete a minimum of 8 labs over the course of the quarter to receive full lab credit. To learn more about labs and view the lab schedule visit the lab overview page.

Quarter at a Glance

Week 1


Exceptions and Files

Week 2

Paths and Files Systems



Week 3

Networks and Sockets

Week 4


Week 5


Week 6



Week 7


Web APIs

Week 8

Third Party Libraries

Graphical User Interfaces

Week 9

Test Drive Development

Two Dimensional Lists

Week 10

Advanced Graphical User Interfaces