Power
Where and When
- Lectures: Tues, Thurs 10:40-11:30. Louis A Simpson Building. Room 071
- Precept P01: Thurs 12:15-1:05. Friend 108
- Precept P02: Fri 12:15-1:05. Sherrerd 001
- On-line Q&A: Ed
- Lectures: attendance mandatory (we take randomized attendence).
- Precepts: attendance mandatory in the section that you are registered for.
Course Staff
| Name | Position | Section | Office | Hours | |
|---|---|---|---|---|---|
| David Walker | Professor | Lecture | dpw@ | CS 211 | After class or make appmt by email |
| Daniel Lima Braga | Preceptor | P01 | dbraga@ | Fishbowl (Friend 010) | Fri 11am |
| Sean Wang | Preceptor | P02 | sw9414@ | Fishbowl (Friend 010) | Wed 2pm |
If you cannot make the course staff office hours, e-mail your preceptor (or one of the professors) to set up an appointment.
Assignments
There will be 5-7 assignments/projects throughout the semester. Some of the assignments are short. The last assignment is an open-ended project that will take you 3-4 weeks to complete.
Grading for assignments will usually occur in one of two ways:
- Graded by P/D/F: On some assignments, we recommended strongly against using AI as we believe students will learn less by doing so. To avoid generating an incentive to use AI on those assignments, they will be graded, often automatically, on an P/D/F scale, with students obtaining a P when they accomplish roughly 80% of the task or more. Doing the work by hand will also help students on exams that test similar material. We encourage to get feedback on their assignment by scheduling time with their TA.
- Graded by debrief:. Other assignments will be graded largely through an interview or "debrief" Q-and-A that occurs after the assignment (code/proof) has been handed in. On such assignments, we may (or may not) recommend using AI. The focus of such assignments is on what the students learned during the process of working on assignment or project rather than the artifact they produced by doing so. During the interview students may asked all sorts of questions pertaining to the assignment. They may be requested to carry out demos, explain results, illustrate algorithms by example, present pseudo code on the blackboard, explain code they turned in in detail, speculate about alternate solutions, etc. The grade will depend upon both technical knowledge and communication skills.
Late policy. Write-ups for assignments are due at 11:59pm on the date specified. Late write-ups are assessed a 20% penalty per day or partial day: 0-2 hours late (grace period — no penalty), 2-24 hours late (20%), 24-48 hours late (40%), and so forth.
Your penalties for the first 4 late days during the course, including medical or personal emergencies, are automatically waived. At the end of the semester we will calculate which 4 of those days for you, to maximize your score.
No additional lateness penalties will be waived unless there is a medical or personal emergency lasting more than 4 days, as assessed by the residential college deans. If your medical or personal emergency is less than 4 days, no need to get a note from your dean; see the policy above.
Debriefs will be scheduled for fixed times after write-ups have been submitted. These debriefs occur in the days following the date the writeup is turned in. Because the debrief comes after the write-up has been turned in, there is automatically a small amount of leeway between hand-in date and debrief. In general, you cannot use your late days to push back a scheduled debrief, unless a team member has an emergency of some kind and obtains a letter from a residential dean.
You may not use late days on the final project. Hand in any progress you have made on that assignment when it is due, even if it is incomplete.
Final Project There will be a final project in the class. You will have roughly 3-4 weeks to do the final assignment---it will be due on the final assessment day for the course. The project will be an open-ended project where you and your team of 2-4 students choose the objective. The only constraint is that it must in some way make use of the ideas in functional programming, logic, proof, and/or rigorous reasoning about programs taught it class.
In the past, many students have chosen to implement some new application in OCaml: a data analysis application, a parallel processing application, a probabilistic functional application, a lazy stream processing application, or an interpreter for a functional language, building on the work in assignment 4. There are infinitely more options of course. However, the course content is changing and this year may be different! Some students may choose to learn more about formal methods, exploring more about reasoning about programs, using a SAT/SMT solver, theorem proving in Lean, defining programming language semantics, and/or developing and analyzing type systems.
Students may also use new tools that are conceptually related to elements of the class, but not explicitly taught. For example, a student group could choose to program in another functional language such as Haskell or Scala or Racket, comparing and contrasting the experience of building applications in one of those languages to OCaml (or not comparing and contrasting and simply building something interesting in that new language). One could explore developing a library for functional programming in some non-functional language. One could also explore the use of functional domain-specific language like Jax or Dex for machine learning. One could investigate a new theorem proving environment like Rocq or Agda, or a new tool such a model checker, a CDC solver, or some of the extended features available in Z3.
We will supply more ideas for projects as the semester progresses. Deliverables for the project include:
- A 1-2 page proposal explaining what you intend to do and using which tools.
- Engagement in project discussions in precept. Doing so will count as part of your participation grade.
- A short written project report describing what you did. The report should be 3-5 pages long.
- A debrief/interview/Q&A, to be scheduled in the days following submission of the written report.
Assignments (other than the final assignment) will be done individually or collaboratively with another student in the class, as directed in the assignment writeup. If you collaborate with another student, you should submit one assignment with both student names on it. The final assignment and final assignment proposal may be done in teams of up to 4 students.
In this class, when you submit "work" where "work" includes code, comments, README files, theorem statements, proofs, or written answers to any questions, that work is assumed to be the product of your brain and/or your partner's brain unless you cite other sources. You must cite any uses of other sources in the signature.txt file that you hand in with each assignment. All students collaborating on a project are responsible for the signature.txt file and its contents.
You may discuss class problems with other students. If you do, you should cite the discussions in your signature.txt file and the people you had discussions. We encourage you not to look at other students code, but if you do, you should cite this in your signature.txt file.
You may also seek the help of LLMs such as ChatGPT in doing your assignments and you should explain what kinds of help you received in your signature.txt file. Note that in some assignments, using AI support is strongly discouraged, but it is not prohibited (except on tests and in debriefs) so there is no penalty to using it and citing it. Indeed, if you do find a need to use it when it is recommended against, that may suggest the assignment needs improvement. We thank you for letting us know.
Evaluation
There will be 2 tests during the semester. Grades will be determined as follows.
- In-class tests (2): 35%
- In-semester assignments (5-6): 35%
- Final project proposal: 5%
- Final project report and debrief: 20%
- Participation: 5%