Making With Code I


This introductory computer science course is a tour through three programming paradigms, or ways of approaching computational problems. The first and most straightforward paradigm is imperative, which sees programs as instructions for the computer. If you clearly understand the task and understand how to express it in a way the computer can understand, you can write an imperative program. The second paradigm is functional, which sees programs as transformations on data: something comes in and something comes out. And the third paradigm is object-oriented, which sees programs as models of a problem space. When modeling real-world situations (a common example is transactions between banks, accounts, and customers), object-oriented problems create objects which represent the various actors in the situation and the ways they can interact.

Each unit starts with a series of labs designed to be done in small groups, which introduce just enough new ideas to get you ready to work on an open-ended project. The three unit projects explore some of the kinds of things people make with code: drawings, data science arguments, and games.

Along the way, the curriculum is structured to gradually introduce you to the syntax of Python, basic computational ideas such as abstraction, data structures, and algorithms, as well as the tools and practices of the trade.

Unit 1: Drawing

This initial unit prioritizes quick wins: getting students making personally-meaningful things as fast as possible. This means we aren’t aiming for completeness. In particular, we’re not introducing data structures in this unit; most students won’t need them, and we’ll spend a lot of time with them in the next unit.

Working within the context of drawing, students practice building up complex programs from simple ones. We’ll use Python’s turtle library.

Learning goals


Create some personally-meaningful drawing. First, a draft will be due with a sketch of the final project and some planning, including planned subroutines and pseudocode. Each drawing project should highlight the unique opportunities of computational art by utilizing repeated patterns, abstract designs, customization, and/or user/viewer interaction.

Unit 2: Data Science

This unit focuses on data and functions. We will write functions for basic statistics such as mean, median, mode, and quartiles; we will implement several data visualizations; and we will inductively explore regression.

Learning goals


Collect some data or use an existing dataset. Frame a research question and use the data to answer it.

Unit 3: Games

Games and other interactive media are some of the most important texts of the digital age. We will play and discuss several games, discussing how they work technically and drawing on theoretical perspectives to talk about how they create meaningful experiences for the player.

Learning goals


Create a game that matters, perhaps as part of a group. This will be very open-ended, but students will be required to submit a substantial proposal, including a game concept with some evidence of prototyping and iteration; wireframes of the game interface; decomposition of tasks and who plans to work on what.