Max Levatich Stephen A. Edwards Columbia University Crown
COMS W4995 005
Parallel Functional Programming
Fall 2025

Meeting Time

Class meets Mondays, Wednesdays 1:10 - 2:25 PM in 451 CSB.

Staff

Name Email Office hours Location
Maxwell Levatich ml4553@columbia.edu Tuesday 1:00 - 4:00 PM 468 CSB
Kyle Edwards kje2115@columbia.edu Friday 4:00 - 6:00 PM CS TA Room (Mudd 122)
Stephen A. Edwards sedwards@cs.columbia.edu By appointment

Overview

Welcome to Parallel Functional Programming! The goal of this class is to introduce you to the functional programming paradigm. You will learn to code in Haskell; this experience will also prepare you to code in other functional languages. The first half the the class will cover basic (single-threaded) functional programming; the second half will cover how to write parallel programs in a functional setting.

If you are enrolled in this course, please carefully read all of the course policies at the bottom of the page.

Prerequisites: On this webpage you will find the course schedule, course policies, lecture slides, homework assignments, project teams, and links to other resources.
On the class Courseworks page you will find course announcements, lecture recordings, and grades. Courseworks is also where you will upload homework assignments.
On the class Ed discussion board you can ask and answer questions about the class and the assignments. Course announcements will also be posted on Ed.

Schedule

Date Lecture In-Class Quiz Slides Lecture Code Due
Wed Sep 3 Introduction
Basic Haskell
pdf
pdf
.hs file
Mon Sep 8 (Basics contd.)
Wed Sep 10 (Basics contd.)
Mon Sep 15 Datatypes and Typeclasses
pdf
.hs file
Wed Sep 17 (Datatypes contd.)
Quiz 1: Basics.hs file
Sun Sep 21 Homework 1 .hs filehw1.hs
Mon Sep 22 (Datatypes contd.)
Quiz 2: Types.hs file
Wed Sep 24 (Datatypes contd.)
Mon Sep 29 Monads
pdf
.hs file
Wed Oct 1 (Monads contd.)
Sun Oct 5 Homework 2 .hs filehw2.hs
Mon Oct 6 (Monads contd.)
Quiz 3: Monads
Wed Oct 8 Lazy Evaluation and Seq
pdf
Mon Oct 13 (Seq contd.)
Wed Oct 15 Using and Defining Modules
Quiz 4: Monads pdf
Sun Oct 19 Homework 3 .zip filehw3.zip
Mon Oct 20 I/O
pdf
Wed Oct 22 Parallel Evaluation
Quiz 5: Laziness pdf
Mon Oct 27 Strategies
pdf
Sun Nov 2 Homework 4 .pdf filehw4.pdf
Mon Nov 3-4 Election Day Holiday
Wed Nov 5 The Par Monad
Quiz 6: I/O pdf
Mon Nov 10 The Haskell Tool Stack
Repa: Regular Parallel Arrays
pdf
pdf
Wed Nov 12 Accelerate: GPU Arrays
Quiz 7: Par pdf
Sun Nov 16 Project Proposal
Mon Nov 17 The Lambda Calculus
pdf
Wed Nov 19 (Lambda contd.)
Quiz 8: Par
Mon Nov 24 Final project work period
Wed Nov 26-28 Thanksgiving Holiday
Mon Dec 1 Final project work period
Wed Dec 3 Final project work period
Mon Dec 8 Final project work period
Wed Dec 17 Project Report and Presentation

Course Calendar

Project Teams

Everybody:

Joshua Brown, Jonathan Chen, Eric Cheng, Eden Chung, Siying Ding, Anjolaoluwa Fajemisin, Diego Fernandez, Hazel Flaming, Ashley Garcia, Jacky Huang, Carly Kiang, Richard Li, Clarence Lin, Zhonghao Liu, James Mastran, Grayson Newell, Jeremy Newman, Zack Singerman, Maxine Tamas, Kevin Wang, Yao Wang, Pablo Ordorica Wiener, Jessica Xu, and Xinchen Zhang

Attendance and Quizzes

Lecture attendance is expected. Please bring your laptop or coding device of choice if you are able; we will be live-coding exercises together in class, which should help you learn more effectively.
I fully expect questions and digressions in lecture, and I will solicit them; discussions are "priced-in" to the time allocated to each topic and are an important part of your learning.
If you can't make it to lecture, the slides are uploaded on the schedule above, and full lecture recordings will be available on Courseworks.

On most Wednesdays, in the last 10 minutes of lecture, there will be a single-question pencil-and-paper quiz. The question will be displayed at the front of the classroom, and will have a simple answer (e.g., "yes", "no", or a number). Paper and writing implements will be provided, but you are welcome to bring your own; you are only accountable to turn in your name and an answer.
The quizzes are only worth 10% of your final grade, and the lowest three will be dropped if you can't make it to lecture. They are intended to be easy and stress-free if you have been following along with the lectures and submitting homeworks on time. The main purpose of these quizzes is to encourage you to attend lecture and keep up reasonably with the material.

The Project

You will spend roughly the last third of the semester on a parallel implementation of an algorithm/technique of your choice in Haskell. Marlow parallelizes a Sudoku solver and a K-means clustering algorithm in his book; these are baseline projects. We are looking for something more sophisticated than these, but not dramatically more complicated.

You may complete the project on your own or in groups of 2 or 3. Be sure to list all of your names and UNIs in the proposal and final report.

There are three deliverables:
  1. A one- or two-page proposal that gives us an idea of what you plan to do, so we can give you feedback about restricting or increasing the scope. You will upload a PDF file to Courseworks describing your project and team members. Due Nov 16.
  2. A report describing your project: what you implemented and how, some performance figures indicating how much better your solution runs in parallel (e.g., time its execution on one core and compare that to running it on multiple cores), and a full listing of the code you wrote. You will upload a multi-page PDF file to Courseworks; due during finals week.
  3. Along with your report, you will submit a .tar.gz file including the code and test cases for your project.
Strive for a little well-written, well-tested program that handles everything gracefully rather than a large, feature-filled system. If you're short on time, drop a feature in preference to improving the code you have.

Make a serious effort to make your project straightforward to run and your results easy to reproduce; include a README file in your codebase with instructions for running your code with the Haskell Stack.

Other project ideas include any sort of map/reduce application, graphics rendering, physical simulation (e.g., particles), parallel grep or word count, a Boolean satisfiability solver, or your favorite NP-complete problem. If your program is algorithmically simple (e.g., word count or word frequency count), it need to scale to huge inputs. AI applications (the classical kind, not machine-learning or large language modeling) such as game-playing algorithms are generally a good idea. Algorithms that have a lot of matrix multiplication at their core (e.g., deep learning) are less suitable.

Feel free to ask the instructor or TAs for project advice or criticism.

Grading

Assessment Weight Notes
Homeworks 60% (15% each) Graded according to a rubric; both code correctness and style are assessed
Quizzes 10% Each quiz is graded correct or incorrect/missing; lowest 3 quizzes are dropped
Project 30% Graded holistically based on quality of code, final report, and presentation

Academic Honesty and Collaboration Policy

You may seek outside help, including from other students, on homework, but you MUST write all of your own code. You must cite all people and resources you consulted. For example, you might add a comment like:

{-  I collaborated with Haskell Curry, Jim Backus, Alonzo Church, and Grace Hopper on this assignment, and consulted:
	http://hackage.haskell.org/package/base-4.12.0.0/docs/Data-List.html
	https://stackoverflow.com/questions/211216
	http://www.cis.upenn.edu/~cis19
-}
	
Please do not do any of the following: I will not be able to police all of these rules. I recommend that you follow them anyway for the sake of your own learning. That said, if we do find clear evidence that you have violated these rules, or any of the other general CS department policies, we will apply the appropriate penalty.

Extensions and Accommodations

No extensions will be granted for homework assignments except for medical reasons. A homework assignment that is not submitted by the deadline will receive a grade of 0.
CVN students who take the course entirely remotely will not be required to complete in-class quizzes. For those students, homework assignments will be worth 70% of the final grade.

If you are a student with a disability and have a DS-certified "Accommodation Letter" please come to Max or Stephen's office hours to confirm your accommodation needs.
If you believe that you might have a disability that requires accommodation, you should contact Disability Services at disability@columbia.edu.

Other Resources

Past Iterations