Course Syllabus

CSci 2041: Advanced Programming Principles

Section 001, Spring 2022
4 Credits
In-class meetings: MWF 1:25-2:15, MCB 3-120
Lab periods (all on Tuesdays): 
Section 2: 8:00-8:50AM, Keller 1-250
Section 3: 9:05-9:55AM, Keller 1-250
Section 4: 10:10-11:00AM, Keller 1-250
Section 5: 11:15AM-12:05PM, Keller 1-250
Section 6: 12:20-1:10PM, Keller 1-250
Section 7: 1:25-2:15PM, Keller 1-250

Class Format:

This class will use a "flipped classroom" format: before each class meeting, we will  have a roughly 30-minute asynchronous video and reading that you are expected to view/complete before the synchronous meeting; there will be a reading quiz associated with these materials.  In the class meeting, you will have the opportunity to ask questions about the video/reading or reading quiz, then you will be assigned several problems to complete in groups during class; at the end of the class period (last 10-15 minutes),  we will discuss the solutions together.

Class meetings will be streamed (and recorded) via Zoom, but you must attend the meeting and participate in a breakout room during the in-class activity to get credit for attending.

Labs

Labs will not have any formal instructional component.  You may choose to attend the lab to get help from the TAs with the weekly lab problems, or forgo this assistance.

Instructor:
Nick Hopper
hoppernj AT umn edu

TAs and Office Hours: Course Staff and office hours are listed on this Canvas page.  Office hours are via Discord.

Textbooks:

There is no required textbook for the course; however, the course schedule will include links to required readings and notes for each lecture.  Many of the readings come from the unpublished manuscript "Introduction to Objective Caml, (Links to an external site.)" by Jason Hickey, which is available at no cost online, and a transliteration (into OCaml) of the Book "Elements of Functional Programming" by Chris Reade, available to UMN students from the course page; another free online reference that students might find helpful is "Developing Applications with Objective Caml (Links to an external site.)" by Chailloux, Manoury and Pagano, and the OCaml library reference.

Course Overview

The course is roughly divided into two halves:

  1. Functional Programming in OCaml. We'll learn the basics of structuring a program as a series of (possibly) recursive expressions to be evaluated, examine the relationship between general recursion, tail recursion, and iteration; discuss using OCaml's strong static type system to build types that match the data while abstracting away the representation of these data; examine parametric polymorphism and higher-order types, and learn about higher-order functions and their applications in programming. Finally, we'll learn about modularity in programming and OCaml's rich module system.

  2. Analysis and Manipulation of Programs and Program Structures. We'll discuss the role of induction in reasoning about recursion and iteration, both to analyze correctness and efficiency of programs; further examine computation as expression evaluation; explore the use of lazy evaluation to compute with cyclic and infinite data objects; and explore programmatic representation and manipulation of programs. We'll conclude by learning about side effects, type-safe references and iterative computation structures in OCaml.

Weekly overview

We will divide this semester into fourteen weeks, each starting with a Wednesday class meeting, and ending with the Lab meeting on the following Tuesday.  Before each class meeting, you should watch the associated asynchronous video and complete the reading and quiz.  During each synchronous meeting we will have some time for questions about the material and in-class group problem solving.  After each synchronous meeting, you should work on the lab exercise problems related to the topic.  You should finish up the lab exercises by the following Tuesday, and then at the end of the next Wednesday's synchronous meeting, we will have a quiz covering the week's materials. So week N will have the format:

  • Before Wednesday, 1:25pm CDT: Watch video N.1, complete reading/quiz N.1
  • Wednesday, 1:25-1:50pm CDT: Class meeting N.1; start work on Lab problem N.1
  • Before Friday, 1:25pm CDT: Watch video N.2, complete reading/quiz N.2
  • Friday, 1:25-1:55pm CDT: Class meeting N.2; start work on Lab problem N.2
  • Before Monday, 1:25pm CDT: Watch video N.3, complete reading/quiz N.3
  • Monday, 1:25-1:55pm CDT: Class meeting N.3; start work on Lab problem N.3
  • By Tuesday, 11:59pm CDT: submit solutions to Lab N (github)
  • (next) Wednesday, 1:50-2:15pm CDT: Quiz/Homework time. (Gradescope)

In weeks 4, 7, 10, and 13 we will not have quizzes, and instead you will have extra time to work on the Homework projects that are due on Friday night for each of those weeks.

Goals and Objectives

Students who complete this course should be able to:

  • Write OCaml expressions for common programming tasks involving iteration and recursion
  • Understand common OCaml type errors and explain what they mean
  • Develop simple abstract data types in OCaml
  • Apply common higher-order functions to solve tasks involving iteration
  • Reason about and write programs that evaluate and transform program expressions
  • Explain and use OCaml modules and functors
  • Prove the correctness of simple recursive OCaml programs using inductive data types
  • Explain side effects, references and mutable data structures in Ocaml.

Prerequisites

The prerequisites for this course are CSci 1913/1933 and CSci 2011.  From CSci 11X3 and 19X3 you will need to understand programming concepts such as procedural abstraction, iteration and data abstraction.  From CSci 2011 you will need to understand concepts such as sets, relations, functions, and mathematical induction. 

Lecture Schedule

The canvas site includes a schedule of lectures for this course. The schedule includes required readings related to each class. Students are responsible for reading the appropriate materials for each lecture; we may not cover all of the reading material in the lecture but it may still be required for exercises, quizzes, or exams.  The beginning portions of class meetings will be recorded and posted for later viewing, usually within one day of the meeting, but the main value in the meeting is attending and participating in the problem solving.

Grading

Grading for this class will be based on six components.  The first three components (reading quizzes, lab problems, and in-class work) are formative assessments, meaning that they are meant to help you learn how to apply the material from lectures and readings to solve new problems; since they are primarily for learning you are allowed and encouraged to discuss them with other students.  The last three (in-class quizzes, homework, and the final exam) are summative assessments, meaning that they are meant to evaluate how well you have understood the materials they cover; since they are meant to assess each individual's learning, you should not discuss solutions to these problems with other students, doing so will be considered academic misconduct.

  • Reading quizzes (10%): As mentioned above, for every class meeting we will have an associated asynchronous video and reading you are expected to watch and complete before the lecture.  Each of these readings will have a short canvas quiz that is due by the start of the class meeting.  Prior to the due date, retakes are allowed and encouraged; you will be required to score 3/4 on a reading quiz before you can proceed to the next asynchronous video.  Reading quizzes submitted after the due date will receive a 25% penalty.

  • 14 Lab Problem Sets (15%): Each week we will have a set of  "lab problem" questions similar to problems in the lectures.  You are free to discuss the solutions to these problems with your classmates, but every student should submit their own solution and understand how their solutions work.  Solutions must be submitted by 11:59pm on Tuesday to receive full credit for the week's exercises. 

    Note that while you are welcome to use the Tuesday lab time to ask questions or seek help on these exercises, you should be working on them throughout the week.

    Each lab problem set will consist of 3 sub-problems roughly corresponding to the three lectures in each week.  You can score up to 3 points on each problem.  We will take your score out of 7 for each set (so you should attempt all four problem sets), and allow each student to drop four labs for any reason whatsoever.

    Because Lab exercise solutions will be posted by 6am the following morning, no late submissions will be accepted.

  • 28 In-Class Problems (10% total): Every Friday and Monday lecture we will have 20-30 minutes of time set aside for students to work in groups solving problems related to the lecture topic.  These will be graded on a completion with randomized checking basis, but must be turned in during the class period.  Students who complete 15 of these class work assignments will earn full credit for this portion of the work.

  • 9 Weekly Quizzes (20% total): We will have a 20-minute in-class quiz at the end of lecture each Wednesday (except in weeks 4, 7, 10, and 13).  To account for travel, illness, traffic and life's other difficulties that might occur during the semester, each student's six highest quiz scores will be used.  (That is, each student will be allowed to drop up to three quizzes for any reason whatsoever)

  • 4 Homeworks (25%): we will have four programming homeworks, all due on Friday evenings (the release dates and due dates of these are shown on the weekly schedule and the class google calendar).  The submission of any homework should be completed by 11:59pm on the date that it is due.  Homeworks are summative assessments that evaluate how well you as an individual have mastered the material covered in class up to the date they are released, and therefore you must not discuss your homework solutions with anyone but the course staff.

    Due dates for all homeworks are strict: all homeworks must be submitted to Gradescope at or before the specified time in order to receive full credit. More information about the protocol for submitting the homework and grade assignments will be included in each homework.  Note that if you have not correctly followed the submission instructions on a given homework by the time it is due, this will count as a late homework, and if you have not correctly submitted a homework by the late submission cutoff, then you will receive 0 points for the homework.

    Homework grading is performed by the TAs. If you have a question about homework grades, address it to the TAs. Only if something wholly unreasonable has occurred will the instructor intervene.  Furthermore, there is a limit of seven days from the date that an assignment is graded for grading problems to be dealt with. After that period, these requests will not be considered.

    Late Homeworks: Because everyone can have a bad week, each student's three highest homework scores will be used. In addition, each student will be granted a pool of six 24-hour extension periods that may be applied to homework submission deadlines throughout the semester, although no more than 4 days may be used for any single assignment.  Details of the extension procedure will be provided with the homework assignments.

  • Final exam (20%): The course will have an in-class, cumulative 2-hour final exam on Saturday, May 7th  from 8:00am-10:00am CDT  The exam is closed-book, closed-notes, and no electronic devices may be used.

 Composite scores will be assigned to grades as follows:

92 - 100 A
90 -  92 A-
86 -  90 B+
82 -  86 B
79 -  82 B-
75 -  79 C+
70 -  75 C
65 -  70 C-
60 -  65 D+
55 -  60 D
 0 -  59 F

The dates for all quizzes and the final exam are currently marked on the class schedule.  Please be sure to make note of them, because there will be no makeup exams, except in extraordinary and documentable circumstances.

Classroom atmosphere expectations

I want this to be a class where everyone feels comfortable asking questions (which is how we learn!) and contributing to discussions.  In order for this to happen, it is important for us all to respect and learn from one another.  Here are some things to keep in mind when interacting with fellow students and course staff:

We all have different experience levels.  Some students may have encountered some materials in this class before, and might make it look like a problem is easy, where other students might find the material new and intimidating.  Please keep in mind that no one knows all of the material, and everyone struggles at some point.  When someone is struggling and you help them move forward, they will remember and you will learn more than if you try to hold them back.  When you are struggling, just remember that just because you haven't learned something yet doesn't mean you can't learn it now.

We all have different identities.  As part of respectful dialog, please think how your comments could impact others in your group. Refer to others as they prefer to be referred to (including, if referring to them in the third person, using any preferred pronoun they choose to indicate).  In the class discord, please use a nickname that we can associate with your participation in the class.

Part of respecting each other is helping to keep each other safe and healthy.  At this time, the university is requiring all students, faculty, and staff to wear masks when indoors, regardless of vaccination status, and has mandated vaccination for all students, faculty and staff.  You will be expected to follow the mask-wearing requirements during lecture, may not bring food into the classroom, and if you remove your mask to drink it should be immediately put back on.  Further information on the University's masking requirement can be found on the safe campus website.

By the same token, if you are not feeling well, please do not attend lecture.  All class lecture slides will be posted on Canvas, and lecture recordings will also be available through UNITE with no delay.

Remote Participation

Due to the ongoing pandemic, some students may not feel comfortable attending class in person.  To accommodate this, we will stream the in-class meetings on Zoom, using breakout rooms for the in-class work.  Here are some additional policies associated with this option:

  • I (Nick) will attempt to properly record the beginning and ending of each in-class meeting, but I cannot guarantee that such recordings will always be available or have high quality.
  • In-class exercises must be completed during class time.  Missing a few class periods is fine (we only require 15/28 to be completed for full credit) but part of the value of completing these exercises is discussing them with others in class, so we will not accept submissions from students who were not attending in-person or in the Zoom meeting.
  • Students who wish to complete the in-class quizzes remotely must inform me by 7pm the night before the quiz.  To do this, send an email with the subject line "taking quiz <number> remotely" to the instructor.  Only in this case will we configure gradescope to allow remote access.  
  • Remote quizzes will be administered as follows: for students who opt for remote completion, we will configure Gradescope to start the quiz at 1:50pm promptly, at which time these students can download and print out the quiz.  They will then have 20 minutes to complete the quiz, and another 10 minutes to scan and upload their completed quiz to gradescope.  Quizzes not uploaded by 2:20pm will not be accepted.  Please note that we will only accept scanned quiz solutions on the printed form.  If you elect to participate remotely, you must ensure beforehand that you will have access to a printer; this is simply a cost of completing the course this way.

Student Workload Statement

As a 4-credit class, students should expect to spend the equivalent of 12 hours per week over a 15-week semester, or 180 hours, outside of class.  Of these, about 2-3 hours should be spent on videos, readings and reading quizzes;  about 4-5 hours should be spent on labs; and about 5-6 hours should be spent on homework.  Note however, that this time will be unevenly distributed:  you should expect to spend about 20 hours per homework project, but you will not always have a homework project to work on.

Academic Integrity Policy

Every student is expected to turn in their own work for all quizzes and exams in this class.  This is not meant to block general discussion of HOW to approach problems: you are encouraged to discuss questions that clarify what the assigned problems are asking, ask about possible errors in the problem descriptions, clarify what is expected of your solutions, and what resources you can use (for example) on Discord.  However, it is important that you do not proceed to share solutions to the problems and it is certain that sharing or copying another student's solution, (or from another source such as the Internet) whether on an exam or homework, is prohibited.  A good rule of thumb, that I have stolen from the University's Talented Youth Mathematics Program, is as follows: if after discussing a problem, you think you understand how to solve the problem, do something else for half an hour.  Get a snack, go for a walk, work on a different class; whatever.  If you can then solve the problem without referencing any notes or code from the discussion, then you must have understood the solution; if you can't, then whatever you eventually submit won't have been directly copied from your discussion.

Note that while it might be tempting to think that you can take another person's code, modify it a little and turn in a solution that does not look like the original, there are several tools that can detect when this has been done and we will be using such tools in this class. If we determine that you have submitted such code, we will treat this as an instance of scholastic dishonesty.  

The University Student Conduct Code defines scholastic dishonesty as: submission of false records of academic achievement; cheating on assignments or examinations; plagiarizing; altering, forging, or misusing a University academic record; taking, acquiring, or using test materials without faculty permission; acting alone or in cooperation with another to falsify records or to obtain dishonestly grades, honors, awards, or professional endorsement. In this course, a student responsible for scholastic dishonesty will be assigned a penalty of an "F" or "N" for the course. If you have any questions regarding the expectations for a specific assignment or exam, or are unsure about posting a particular answer to the class forum, please ask us first.

This course conforms to the standard University policies on Student Conduct; Sexual Harrassment; Equity, Diversity, Equal Opportunity, and Affirmative Action; Disability Accommodations;  Mental Health and Stress Management; and Academic Freedom and Responsibility.

Course Summary:

Date Details Due