Power
Where and When
- Lectures: Mondays and Wednesday 10:40-11:30. Be there.
- Precept P01: Wed 12:15-1:05.
- Precept P03: Thurs 10:40-11:30.
- On-line Q&A: Ed
- Precepts: attendance mandatory in the section that you are registered for.
Course Staff
Name | Position | Section | Office | Hours | |
---|---|---|---|---|---|
David Walker | Professor | Lecture | dpw@princeton.edu | CS 211 | Mon 11:30-12:30pm or by email |
Theresa Lim | Preceptor | P01,P03 | tal5@princeton.edu | Friend 010 | Thurs 12:30-3:30 |
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 seven assignments throughout the semester. The first three are due in consecutive weeks to get you up to speed with OCaml, while the last four are spread across the rest of the semester. The last assignment will be due near the end of reading period.
Lateness policy. Programming assignments are due at 11:59pm on the date specified. Late assignments 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.
Some programming assignments have an automatically graded part (which test cases did you pass?) and a human graded part. Whenever you submit an assignment (by git push) you'll get your auto-grade report, even before the assignment deadline; and you can resubmit (by git push) as often as you like, to try to improve your score (even after the deadline, but lateness penalties apply). But we'll grade the human-graded part only once, at any time of our choosing after the deadline. Auto-grade reports and human-grade reports will be comments on your commit, in github.
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 except if 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.
You may not use late days on the final assignment. Hand in any progress you have made on that assignment when it is due, even if it is incomplete.
Final Assignment
There will be a final assignment in the class. You will have roughly one month 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 up to 4 students choose the objective. The only constraintis that it must in some way make use of the functional principles taught it class.
Most students will likely choose 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. Some students may also choose to learn more about theoretical topics, exploring more about reasoning about programs, operational semantics and type systems.
Students may also choose to explore developing functional code in another language. For example, a student group could choose to program in another functional language such as Haskell or Scala or Racket, comparing and contrasting applications build 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.
We will supply more ideas for projects as the semester progresses. Deliverables for the project include the following (see the schedule page for deliverable due dates)
- A 1-2 page proposal explaining what you intend to do and using which tools.
- Engage in project discussions in precept. Doing so will count as part of your participation grade.
- A written project report describing what you did. The report should be 4-20 pages long.
- An optional 4-20 minute video that supports the report, illustrating what your application can do.
Teams of 1 person are expected to have shorter reports and videos. For example, a 1-person team may submit a 5-page report and a 5-minute video or perhaps a 4-page report and a 10-minute video. Teams of 4 people are expected to have longer reports and longer videos. For example, a team of 4 might submit a 12-page report and a 15 minute video. An individual or team doing a theory project may not find the video format effective. Such teams may submit a longer report and no video. When the time comes to create your report and video, feel free to discuss expectations on reports and videos with your TA and/or professor.
AI policy.
You may use AI/LLMs/ChatGPT to help with your assignments.
You should report all uses of LLMs --- include the prompts you use in your readme.
Collaboration policy and Academic Integrity.
Assignments (other than the final assignment) may be done individually or collaboratively with another student in the class. 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. If you do, you should put the prompts and responses you received in the signature.txt file. Some questions in this class may be answered directly by LLMs, but we strongly encourage you to try to answer questions on your own before turning to an LLM. There will be pen-and-paper exams and for those you will not have LLM support or the support of other people. Students who do not do exercises on their own will perform poorly on such exams, which make up a substantial portion of your grade.
Evaluation
There will be 2 tests during the semester. Grades will be determined as follows.
- In-class test 1: 20%
- In-class test 2: 20%
- In-semester assignments: 30%
- Final project proposal: 5%
- Final project report (including video): 20%
- Participation: 5%