CSci 2041: Advanced Programming Principles
Section 010, Fall 2020
We will meet synchronously (via Zoom and Slack) MWF beginning at 1:25pm CDT. While I expect that Monday and Friday meetings will finish in 30 minutes, you should reserve the entire 1:25-2:15pm time slot for all meetings.
Each lecture will also have a 30-minute asynchronous component and reading that you are expected to view/complete before the synchronous meeting.
Due to social distancing requirements, in-person lab meetings are scheduled for a variety of times and rooms each Tuesday. We will communicate directly with students about these arrangements. Please do not attempt to attend a lab section other than your assigned time. Note that all students are expected to comply with state and university requirements regarding face coverings and students who do not meet this expectation will be asked to leave immediately. Continued failure to comply with these requirements will be dealt with as a violation of the university student conduct code.
hoppernj AT umn edu
TAs and Office Hours: Course Staff and office hours are listed on this Canvas page. Office hours are via Slack.
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.
The course is roughly divided into two halves:
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.
- 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 techniques to express programs as units to be evaluated concurrently and in parallel; and side effects, type-safe references and iterative computation structures in OCaml.
We will divide this semester into fourteen weeks, each starting with a Wednesday synchronous meeting, and ending with the Lab meeting on the following Tuesday. 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. 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: Synchronous meeting N.1 (Zoom/Slack)
- Before Friday, 1:25pm CDT: Watch video N.2, complete reading/quiz N.2
- Friday, 1:25-1:55pm CDT: Synchronous meeting N.2 (Zoom/Slack)
- Before Monday, 1:25pm CDT: Watch video N.3, complete reading/quiz N.3
- Monday, 1:25-1:55pm CDT: Synchronous meeting N.3 (Zoom/Slack)
- By Tuesday, 11:59pm CDT: submit solutions to Lab exercise set N (github)
- (next) Wednesday, 1:50-2:15pm 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 simple memory management concepts
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.
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 homework. Synchronous meetings will be recorded and posted for later viewing, usually within one day of the meeting.
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 4/5 on a reading quiz before you can proceed to the next asynchronous video. Reading quizzes submitted after the due date will receive a 40% penalty.
14 Lab Exercise Sets (10%): Each week we will have a list of "lab exercise" 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 exercise 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 best 2 scores each week, and your best 12 scores for the final exercise score.
Because Lab exercise solutions will be posted by 9am the following morning, no late submissions will be accepted.
12 Weekly Quizzes (25% total): We will have a 20-minute quiz at the end of lecture each Wednesday, administered via GradeScope. with two exceptions noted on the class schedule. Each quiz can cover any material up to the end of lecture on the preceding Monday. To account for travel, illness, traffic and life's other difficulties that might occur during the semester, each student's ten highest quiz scores will be used.
6 Homeworks (30%): we will have six programming homeworks, all due on Monday evenings. The submission of any homework should be completed by 11:59pm on the date that it is due.
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 five highest homework scores will be used. In addition, each student may request a three-day extension to the normal deadline for one homework only. Details of the extension procedure will be provided with the homework assignments.
- Final exam (25%): The course will have a cumulative, 2-hour final exam on Saturday, December 19 at 8am 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
|90 - 92
|86 - 90
|82 - 86
|79 - 82
|75 - 79
|70 - 75
|65 - 70
|60 - 65
|55 - 60
|0 - 59
The dates for all quizzes, homeworks 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.
Before the start of the semester, you were sent a form asking if you were interested in a lab/lecture study group. If you expressed interest in this concept, you will have been assigned to a group that you can meet with on Slack to discuss lectures and lab exercise problems. Use of these groups is entirely voluntary, and every student is expected to submit a separate lab exercise solution whether they participate in the group or not. You should not discuss solutions to other graded work (prior to submission) in these groups.
Student Workload Statement
As a 4-credit class, students should expect to spend roughly 12 hours outside of lectures each week. Of these, 5-6 hours should be spent on exercises and class readings, and 5-7 hours should be spent on homework.
Academic Integrity Policy
Every student is expected to turn in their own work for all homeworks, quizzes and exams in this class. This is not meant to block general discussion of HOW to approach homework problems: you are encouraged to discuss questions that clarify what the problems on the homework 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 Slack 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 homework problem with another student, 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" 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.pdf
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
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/ or students may email email@example.com 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.edu.
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.