Course Syllabus

CSci 2041: Advanced Programming Principles

Summer 2021
4 Credits

Lecture Format:

We will meet synchronously (via Zoom) Monday-Thursday from 1:40-3pm CDT.  These lectures will involve interactive (breakout room) exercises, and a synchronous quiz at the end of each Monday lecture period.

Each lecture will also have a 30-minute asynchronous component and reading that you are expected to view/complete before the synchronous meeting.  

Labs

Labs are scheduled for Fridays from 10:10am-12:05pm and 12:20-2:15pm.  For most weeks, these will be open office hours hosted on Discord to ask questions about completing the weekly lab problem sets.

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 eight weeks, each starting with a Monday synchronous meeting, and ending with the Lab meeting on the following Friday.  Before each synchronous 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 as well as some live problem solving exercises and time to work on the Lab problem sets.  After each synchronous meeting, you should spend some time to work on the lab exercise problems related to the topic.  You should finish up the lab exercises by Friday evening, and then at the end of the next Monday's synchronous meeting, we will have a quiz covering the week's materials. So week N will have the format:

  • Before Monday, 1:40pm CDT: Watch video N.1, complete reading/quiz N.1
  • Monday, 1:40-2:30pm CDT: Synchronous meeting N.1 (Zoom)
  • Before Tuesday, 1:40pm CDT: Watch video N.2, complete reading/quiz N.2
  • Tuesday, 1:40-3pm CDT: Synchronous meeting N.2 (Zoom)
  • Before Wednesday, 1:40pm CDT: Watch video N.3, complete reading/quiz N.3
  • Wednesday, 1:40-3pm CDT: Synchronous meeting N.3 (Zoom)
  • Before Thursday, 1:40pm CDT: Watch video N.4 complete reading/quiz N.4
  • Thursday, 1:40-3pm CDT: Synchronous meeting N.4 (Zoom)
  • By Friday, 11:59pm CDT: submit solutions to Lab problem set N (github)
  • (next) Monday, 2:40-3pm CDT: Quiz N. (Gradescope)

 

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 like procedural abstraction, iteration and data abstraction.  From CSci 2011 you will need to understand concepts like 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 synchronous 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 five components:

  • Reading quizzes (10%): As mentioned above, for every synchronous 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 synchronous 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.

  • 8 Lab Problem Sets (20%): 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 Friday to receive full credit for the week's exercises. 

    Note that while you are welcome to use the Friday 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 4 sub-problems roughly corresponding to the four lectures in each week.  You can score up to 3 points on each problem.  We will take your score out of 10 for each set (so you should attempt all four problem sets), and allow each student to drop three labs for any reason whatsoever.

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

  • 7 Weekly Quizzes (30% total): We will have a 20-minute quiz at the end of lecture each Monday, administered via GradeScope, beginning on June 14th.  Each quiz can cover any material up to the end of lecture on the preceding Thursday. To account for travel, illness, traffic and life's other difficulties that might occur during the semester, each student's five highest quiz scores will be used.

  • Coding Exam (20%): After week 4, we will have a programming exam, wherein you apply the Ocaml programming knowledge gained in the first four weeks of the course to produce a standalone program that will be submitted to Gradescope.  This exam will be released at 12am CDT on July 1st and due no later than 11:59pm CDT on July 10th.  Note that this is a summative assessment; no discussion of your solution or  collaboration with other students is permitted. 

  • Final exam (20%): The course will have a synchronous, cumulative 2-hour final exam on Friday, July 30th that will be available from 10:10am-2:15pm 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, the coding exam 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.

Lab Groups:

During our synchronous meetings, you will be assigned to breakout rooms to discuss example problems from the lecture and potentially start working on the associated lab problems for the given lecture.  Use of any solutions developed in these groups is entirely voluntary, and every student is expected to submit a separate lab solution whether they participate in the group or not. 

You should not discuss solutions to other graded work (prior to the due date) in these groups.

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).  If you wish to be referred to in a particular manner, please indicate that by changing your display name in Zoom to reflect that preference.  

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.  In a typical week, this should result in 6-10 hours spent on videos, reading and reading quizzes, and 8-10 hours on lab problem sets outside of class.  Another 20-30 hours should be allocated to the programming exam from July 1-10.

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 or the Canvas Discussions.  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.

Student Conduct Code

The University seeks an environment that promotes academic achievement and integrity, that is protective of free inquiry, and that serves the educational mission of the University. Similarly, the University seeks a community that is free from violence, threats, and intimidation; that is respectful of the rights, opportunities, and welfare of students, faculty, staff, and guests of the University; and that does not threaten the physical or mental health or safety of members of the University community.

As a student at the University you are expected adhere to Board of Regents Policy: Student Conduct Code. To review the Student Conduct Code, please see https://regents.umn.edu/sites/regents.umn.edu/files/2020-01/policy_student_conduct_code.pdf.

Note that the conduct code specifically addresses disruptive classroom conduct, which means "engaging in behavior that substantially or repeatedly interrupts either the instructor's ability to teach or student learning. The classroom extends to any setting where a student is engaged in work toward academic credit or satisfaction of program-based requirements or related activities."

Sexual Harassment

"Sexual harassment" means unwelcome sexual advances, requests for sexual favors, and/or other verbal or physical conduct of a sexual nature. Such conduct has the purpose or effect of unreasonably interfering with an individual's work or academic performance or creating an intimidating, hostile, or offensive working or academic environment in any University activity or program. Such behavior is not acceptable in the University setting. For additional information, please consult Board of Regents Policy: https://regents.umn.edu/sites/regents.umn.edu/files/policies/Sexual_Harassment_Sexual_Assault_Stalking_Relationship_Violence.pdfLinks to an external site.

Equity, Diversity, Equal Opportunity, and Affirmative Action

The University provides equal access to and opportunity in its programs and facilities, without regard to race, color, creed, religion, national origin, gender, age, marital status, disability, public assistance status, veteran status, sexual orientation, gender identity, or gender expression. For more information, please consult Board of Regents Policy: https://regents.umn.edu/sites/regents.umn.edu/files/2019-09/policy_equity_diversity_equal_opportunity_and_affirmative_action.pdf

Disability Accommodations

The University of Minnesota views disability as an important aspect of diversity, and is committed to providing equitable access to learning opportunities for all students. The Disability Resource Center (DRC) is the campus office that collaborates with students who have disabilities to provide and/or arrange reasonable accommodations.

  • If you have, or think you have, a disability in any area such as, mental health, attention, learning, chronic health, sensory, or physical, please contact the DRC office on your campus (612.626.1333) to arrange a confidential discussion regarding equitable access and reasonable accommodations.
  • Students with short-term disabilities, such as a broken arm, can often work with instructors to minimize classroom barriers. In situations where additional assistance is needed, students should contact the DRC as noted above.
  • If you are registered with the DRC and have a disability accommodation letter dated for this semester or this year, please contact your instructor early in the semester to review how the accommodations will be applied in the course.
  • If you are registered with the DRC and have questions or concerns about your accommodations please contact your (access consultant/disability specialist).

Additional information is available on the DRC website: https://diversity.umn.edu/disability/Links to an external site.  or  students may email drc@umn.edu with questions.

Mental Health and Stress Management

As a student you may experience a range of issues that can cause barriers to learning, such as strained relationships, increased anxiety, alcohol/drug problems, feeling down, difficulty concentrating and/or lack of motivation. These mental health concerns or stressful events may lead to diminished academic performance and may reduce your ability to participate in daily activities. University of Minnesota services are available to assist you. You can learn more about the broad range of confidential mental health services available on campus via the Student Mental Health Website: http://www.mentalhealth.umn.eduLinks to an external site..

Academic Freedom and Responsibility

Academic freedom is a cornerstone of the University. Within the scope and content of the course as defined by the instructor, it includes the freedom to discuss relevant matters in the classroom. Along with this freedom comes responsibility. Students are encouraged to develop the capacity for critical judgment and to engage in a sustained and independent search for truth. Students are free to take reasoned exception to the views offered in any course of study and to reserve judgment about matters of opinion, but they are responsible for learning the content of any course of study for which they are enrolled.

Reports of concerns about academic freedom are taken seriously, and there are individuals and offices available for help. Contact the instructor, the Department Chair, your adviser, the associate dean of the college, or the Vice Provost for Faculty and Academic Affairs in the Office of the Provost.

Course Summary:

Date Details Due