Students are responsible for reading and understanding the entire course syllabus, and abiding by the policies therein.
Successful course participants will:
Confidently define, describe, and apply the precise meaning of functional and object-oriented programs
Develop the skills necessary to learn new programming languages quickly
Master many specific language concepts such that they can recognize them in strange guises and use them effectively to build correct and elegant software
Learn to evaluate the power and elegance of programming languages and their constructs
Attain reasonable proficiency in the OCaml and Racket languages — and, as a by-product, become more proficient in languages they already know
Students are assumed to have taken introductory programming up to and including CSE 123, although this class will not use Java. Some familiarity with formal logic (e.g. as taught in CSE 311) is heavily recommended, but not mandated. Automata theory is not required in any way. References to questions of computability and/or complexity may be included for students edification, but again are not required for successful completion of the course.
Everyone deserves to be treated with respect and learn about programming languages. Bigotry and harassment is not permissible.
Please refer to university policies regarding disability accommodations and religious accommodations.
Note: we will be experimenting with pop-quizes this quarter. Because we have not done pop-quizzes in this class before, they will constitute a relatively small portion of your grade.
Because of the rise of AI in education, most students believe that their peers will use AI to cheat pervasively and without consequence. Regardless of whether this is true, we must restore confidence that students who choose to follow all policies will not be at a competitive disadvantage to those who do cheat and get away with it. For this reason, we are using an "exam ceiling" on your grade in this class. It works as follows:
We will compute two different grades for each student and combine them. The exam grade consists of a weighted average based solely on supervised, in-class work (exams, pop quizzes). The summative grade consists of a weighted average of all work (homework, exams, pop quizzes, etc.). The final grade is then computed as the minimum of the exam and summative grades.
This system has the following purpose and merits. The exam grade acts as a ceiling/cap on the final grade. A student who cheats (undetected) on take-home work, but fails the exams will fail the course. Therefore it is wise for every student to use the homework as an opportunity to practice and learn. However, exams cannot replace the benefit of the longer, sustained thinking involved in doing the homeworks. Therefore the homeworks will be graded. Unfortunately, this introduces a new problem...
One rational (but impermissible) strategy for students is to do the homework and then run all their answers by an AI (or human) checker to avoid losing any points. This is cheating, however tempting it may be. It is cheating in at least two substantial ways. It cheats other students out of fair and meaningful grades (and therefore encourages them to cheat as well). It also cheats the student doing it (and us as staff) out of a genuine opportunity to assess how well students are learning throughout the quarter. This second sense of cheating is highly likely to produce lower exam scores and worse learning outcomes too.
To compensate for the above, we plan to count 85% correct homeworks as 100% for the purpose of grades. The idea here is to remove the acute pressure to cheat on homeworks. It is very unlikely that a student who regularly gets less than 85% on the homeworks will also get a perfect score on the exams. So even if you score poorly on some homeworks, your final grade will likely not be impacted. On the other hand, if you simply fail to do one or more homeworks, it will probably impact your final grade. So there remains an incentive to make an honest attempt at each homework.
Exam Grade Percentages*
10% Pop Quizzes (we will discard the lowest 2 scores — we anticipate around 7 or 8 pop quizzes total)
40% Midterm Exam
50% Final Exam
Summative Grade Percentages*
50% Exam Grade as above
50% Homeworks (roughly equal weight, except HW0 at 1/2 weight)
Final Grade = min( Exam Grade, Summative Grade )
* Percentages are tenative. We reserve the right to adjust these percentages and policies in the interest of achieving fair grades for students in this class. We do not use a fixed mapping to a 4.0 scale, but also do not aim to achieve a particular grade distribution or "curve." Participation (in class, office hours, etc.) will be considered favorably when determining final grades.
All homework is due at 5pm (PT) on the due date. It is exceedingly unlikely that skipping class to finish homework is in your interest.
For the entire quarter, you may have four “late days” on homework assignments. You are strongly advised to save them for emergencies. You may not use more than two for the same assignment. Late days must be used in 24-hour (integer) chunks. Assignments submitted after all late days have been used will not be accepted for credit. Some assignments may have more restrictive late day policies in order to make sample solutions available or to allow for discussion in class or sections right before exams, or at the end of the quarter when work needs to be finished. You should not plan in advance to use late days on assignments or projects. They are intended to allow for unexpected situations where an extra 24- or 48-hours to finish an assignment suddenly becomes necessary. This policy may not be the same as in other classes. You are responsible for understanding it if you choose to submit late work.
In case of a true emergency (hospitalization, family emergency, other unforeseen circumstances) where the standard late policy would not make sense, please contact the instructor (and possibly staff too) to discuss the situation as soon as practical.
Incompletes are never given simply because assignments were not done on time.
This class will use the "no AI" version of the Allen School's new AI policies. However, there is currently a lot of confusion among students and staff at universities about academic integrity. This goes beyond simply concern about AI. Therefore we have a separate academic integrity document for this class. You are responsible for reading and abiding by those policies. Where there is some conflict or disagreement between the class policy and more general policies, the class policy will take precedence.
Challenge problems on homeworks are designed to have very little (but possibly some) impact on your grade. Because of the 85% threshold for homeworks, good students are not likely to get additional points from challenge problems, although they may provide a marginal benefit. Regularly completing challenge problems will be considered subjectively as possible evidence of high participation in the class, alongside class and office hour participation.
The main benefit of challenge problems is that they provide an opportunity to work on something interesting, and thereby get more out of assignments.
Challenge problems are intentionally more difficult than the points they are worth. They exist primarily for your edification, not for getting points.
You should only attempt a challenge problem after finishing the rest of an assignment.
Challenge problems may be less carefully specified and less carefully calibrated for how difficult/time consuming they are.
Both lecture and section are designed for synchronous participation. You should plan to come to class. We expect you to be there. Lectures (but not section) will be recorded for the purposes of review. The literature of controlled studies suggests that students who are highly engaged in class use recordings to review material and thus do better in class. We would like to help such students. This same literature suggests that recorded lectures discourage the least engaged students from attending.
In genuine cases of sickness or other hardship, recordings may also help mitigate the negative consequences of missing class. However, we do not guarantee that every lecture will be recorded without mistake, error, or omission.
Based on many years of experience teaching this class, you will learn much more and enjoy the course much more if you attend every day and stay up-to-date on the material. Searching around for the information you need to complete the homework minimally will set you up to do poorly on the exams and, more importantly, miss the opportunity to learn what this course is about — the material builds a "grand vision" of computer programs, not merely a pile of facts to be searched. The pacing of 3 meetings per week and how they are scheduled with respect to homework due dates supports this approach — playing catch up will likely obfuscate the "big picture."
Syntax vs. semantics vs. idioms vs. libraries vs. tools
OCaml basics (bindings, conditionals, records, functions)
Recursive functions and recursive types
Benefits of no mutation
Variant types, pattern matching
Tail recursion
Higher-order functions; closures
Lexical scope
Currying
Syntactic sugar
Equivalence and effects
Parametric polymorphism and container types
Type inference
Abstract types and modules
Lambda Calculus
Church Encodings
Racket basics
Laziness, streams, and memoization
Implementing languages, especially higher-order functions
Macros
Eval
Quoted Code & Metaprogramming
Object-oriented programming and dynamic dispatch
Pure prototype-based object-orientation
Implementing dynamic dispatch
Different variations of static OOP
"The expression problem"
Dynamic vs. static typing
Subtyping