CSE 341: Programming Languages

Course information and policies

This course is an introduction to functional programming (FP). We will cover statically typed FP in OCaml and dynamically typed FP in Racket. We will also relate FP to object oriented (OO) languages, and show how to simulate FP in OO and OO in FP. Along the way we will discuss the theory and design of programming languages.

This is a difficult time. The course will be taught entirely online via Zoom. We will record lectures and section for archival purposes, but real-time attendance is mandatory except in extenuating circumstances. Please get in touch to discuss any accommodations you may need to succeed in this course.



  • Lecture MWF 12:30 (join Zoom by clicking the time)

  • Section Th 11:30, 12:30, 1:30, and 2:30 (join Zoom by clicking the time corresponding to your section)


  • Approximately 6 homework assignments, combined worth 60% of final grade

  • Two "individual assignments", together worth 30% of final grade

  • Attendance and participation in lecture, section, office hours, and online discussion, worth the remaining 10%

  • No traditional exams, tests, or quizzes

Collaboration policy

You are encouraged to discuss the homework assignments with your classmates and to collaborate. However, the work you submit should be your own. Do not look directly at anyone else's work or solution. Do not show your work or solution to anyone else. If you work closely with another student, please include a note to that effect in your submission.

Attendance Policy

Real-time attendance at lecture and section is mandatory except in extenuating circumstances (eg, in a different timezone). If you must miss any of these, please notify all staff by email as soon as possible.

Late Policy

All assignments are due on some day at 5:59:59pm Pacific time. You have 5 late days to use throughout the quarter. Late days are indivisible, and each late day extends the deadline by 24 hours. In other words, if you submit at 6:00:00pm Pacific time on the due date (i.e., 1 second after the deadline), you are charged 1 whole late day and have until 5:59:59pm the next day to keep submitting without spending additional late days. Late days may not be used on "individual assignments".



  • hw0 (due Monday 10/5 at 5:59:59pm Pacific time)

  • hw1 (due Wednesday 10/14 at 5:59:59pm Pacific time)

    • Complete the problems described in the hw1 handout. Turn in on Gradescope as described in the handout.

    • If you're using attu, you will get errors about the Option module because of an old version of OCaml installed on the server. Follow these instructions (also available in video walkthrough) to install an up-to-date version of OCaml in your attu home directory.

      • Alternatively, you can download option.ml, put it under the same directory with your hw1.ml, and then run

        • ocaml option.ml hw1.ml

        • or, to compile, use ocamlc -o hw1 option.ml hw1.ml,

        • or type #mod_use "option.ml";; before your #use "hw1.ml" if you are using the REPL.

  • hw2 (due Friday, 10/23 at 5:59:59pm Pacific time)

  • hw3 (due Monday, 11/2 at 5:59:59pm Pacific time)

  • hw4 (due Thursday, 11/12 at 5:59:59pm Pacific time)

  • hw5 (due Friday, 11/20 at 5:59:59pm Pacific time)

  • hw6 (due Wednesday, 12/2 at 5:59:59pm Pacific time)

  • hw7 (due Friday, 12/11 at 5:59:59pm Pacific time)


All slides and handouts

All videos (CSE netid or course enrollment required)