Overview
CSCI054 is a combined course on functional programming and formal proof. The course both exposes students to a new programming paradigm and introduces discrete structures and proof techniques that will be needed in later computer science classes. In addition a few practical applications will be discussed.
The prerequisite for the class is any flavor of CSCI051, a 5 on the CS A AP exam, or permission of the instructor. Send me (Prof. Chen) an email if you have questions about these requirements.
Resources
The professor for this class is Professor Chen. If you want to talk about the class, theory more generally, or general advising, please stop by my office hours either in person Mondays 9-10am or Thursdays 11am-noon. I'll also be available for occasional small group lunches/dinners (see sign-up sheet on my office door) if you'd just like to chat sometime. I can also meet with you at other times by appointment (in person or on zoom): send me an email with some times that are good for you and a sense of what you want to talk about.
The mentors/TAs for the class are: Arsh Chhabra, Alan Guo, George Johnson, Seohyeon Lee, Robin Shen, Vivien Song, and Sumi Vora.
We'll be using piazza for distributing course materials as well as making announcements and answering question. We'll be using Gradescope for submitting and returning assignments. Let me know if you have problems accessing either.
The textbooks for the class are:
You are encouraged to look for and to use other resources. Some others that people have found useful are:
If you find anything particularly helpful you are encouraged to share it with the class on the Piazza forum!
If you might need accommodations please contact the Disability Coordinator on your home campus. The process for Pomona students is available here.
More generally, life happens to all of us and I know there may be times when staying on top of the workload in this class is going to feel like too much on top of everything else that you're managing. If that happens, please come talk to me so that I'm aware and so that we can work together to try to figure out a plan.
Logistics
The basic flow each week will be as follows:
The lectures will be in Edmunds 114.
You will be assigned to a small group of approximately 4-6 students the first week of classes. Your group will work together for the entire semester; your first task will be to find an hour when all of you can meet either Thursday or Friday. The plan is for each group to have an assigned TA who will attend the meetings to answer questions, talk through concepts, etc. Each week there will be a low-stakes assignment to work on during your group meeting; this should be turned in by 10pm Friday evening on Gradescope. There will also be two anonymous surveys during the semester for you to give feedback on how your group is working.
In addition, there will be a weekly problem set. The assignments will mostly be done and submitted in pairs and will also be submitted on Gradescope. The pairs will be by assignment for the first few weeks and then at your discretion after that. Problems on the assignment will ask you to apply concepts in new ways. As with the practice problems you may discuss the problems with anyone else currently taking cs101 (or with the TAs or myself), but each pair must write up their own solution. Unless stated otherwise, these are due by 10pm on the due date.
Finally there will be a written, in-class checkpoint approximately every 5 weeks. The final exam will be in-person on Monday 5/8 from 2-5pm.
The breakdown of grades will be as follows:
Schedule
This is a high-level outline of the planned schedule. Note that the calendar is subject to change . For the readings "DMCS" refers to the book "Connecting Discrete Mathematics and Computer Science" by David Liben-Nowell and "LYAH" refers to the book "Learn You a Haskell for Great Good!" by Miran Lipovača. The chapter numbers for LYAH refer to the online version of the book; note that the section numbers are not explicit.
Unless stated otherwise, all deadlines are at 10pm on the given date.
Week | Day | Date | Topic | Reading | Due |
---|---|---|---|---|---|
1 | M | 1/16 | *** no class - MLK day *** | ||
W | 1/18 | intro to class and to Haskell | LYAH: Ch 1, 2.1-2 | ||
Su | 1/22 | week01-ps | |||
2 | M | 1/23 | lists and tuples | LYAH: Ch 2.3-6 | |
W | 1/25 | types, intro to pattern matching | LYAH: Ch 3, 4.1 | ||
F | 1/27 | week02-group | |||
Su | 1/29 | week02-ps | |||
3 | M | 1/30 | pattern matching, guards, where | LYAH: Ch 4 | |
W | 2/1 | where, let, higher-order functions | LYAH: Ch 4, 6 | ||
F | 2/3 | week03-group | |||
Su | 2/5 | week03-ps | |||
4 | M | 2/6 | higher order functions | LYAH: Ch 6 | |
W | 2/8 | defining types and typeclasses | LYAH: Ch 8 | ||
F | 2/10 | week04-group | |||
Su | 2/12 | week04-ps | |||
5 | M | 2/13 | discrete math data types: sets, functions | DMCS: Ch 2.1-3, 2.5 | |
W | 2/15 | *** checkpoint 1 in class *** | |||
F | 2/17 | week05-group | |||
Su | 2/19 | week05-ps | |||
6 | M | 2/20 | discrete math data types: functions, relations | DMCS: Ch 2.5, 8.2-4 | |
W | 2/22 | propositional logic | DMCS: Ch 3.1-3 | ||
F | 2/24 | week06-group | |||
Su | 2/26 | week06-ps | |||
7 | M | 2/27 | predicate logic | DMCS: Ch 3.4-5 | |
W | 3/1 | predicate logic continued, writing proofs | DMCS: Ch 3.5, 4.3-5 | ||
F | 3/3 | week07-group | |||
Su | 3/5 | week07-ps | |||
8 | M | 3/6 | proofs: direct, contrapositive | DMCS: Ch 4.3-5 | |
W | 3/8 | proofs: contradiction | DMCS: Ch 4.3-5 | ||
F | 3/10 | week08-ps, group survey | |||
M | 3/13 | *** no class - Spring Break *** | |||
W | 3/15 | *** no class - Spring Break *** | |||
9 | M | 3/20 | proofs: induction | DMCS: Ch 5.2-3 | |
W | 3/22 | proofs: induction | DMCS: Ch 5.2-3 | ||
F | 3/24 | week09-group | |||
S | 3/26 | week09-ps | |||
10 | M | 3/27 | proofs in the context of functions | DMCS | |
W | 3/29 | proofs in the context of basic number theory | DMCS | ||
F | 3/31 | week10-group | |||
Su | 4/2 | week10-ps | |||
11 | M | 4/3 | *** checkpoint 2 *** | ||
W | 4/5 | application 1 (encryption?) | |||
F | 4/7 | week11-group | |||
Su | 4/9 | week11-ps | |||
12 | M | 4/10 | application 1 continued | ||
W | 4/12 | application 1 continued | |||
F | 4/14 | week12-group | |||
Su | 4/16 | week12-ps | |||
13 | M | 4/17 | application 2 (error correcting codes?) | ||
W | 4/19 | application 2 continued | |||
F | 4/21 | week13-group | |||
S | 4/23 | week13-ps | |||
14 | M | 4/24 | application 2 continued | ||
W | 4/26 | TBD | |||
F | 4/28 | week14-group, group survey | |||
Su | 4/30 | week14-ps | |||
15 | M | 5/1 | TBD | ||
W | 5/3 | wrapping up |