CSCI 2041

ADVANCED PROGRAMMING PRINCIPLES

INTRODUCTION

COURSE STAFF

INSTRUCTOR

Nick Hopper
Nick Hopper

INSTRUCTOR

Dr. Nick
Dr. Nick

COURSE INFO

http://cs2041.org

WEEKLY OVERVIEW

Each “week” of the course runs Wednesday-Tuesday.

30-minute Lecture videos and Readings: Before lecture period.

30-minute Synchronous meetings W,F,M: Q&A, practice problems.

Lab Exercises: Throughout the week, finish on Tuesday night.

Next Wednesday: Synchronous quiz covering previous week.

GRADING

42 Reading Quizzes 10%
14 Lab Exercises 10%
12 Quizzes 25%
6 Homeworks 30%
Final Exam 25%

READING QUIZZES

Before every synchronous meeting, there will be a ~30-minute video, and a required reading, from one of:

  • Hickey’s Ocaml book
  • Reade’s “Elements of Functional Programming”
  • Notes on github

Formative reading quizzes must be completed before the meeting; retakes allowed and encouraged.

LAB EXERCISES

There will be 14 exercise sets × 3 problems, posted to Canvas.

Each set must be submitted by 11:59pm on Tuesday.

Generally shorter problems applying lecture techniques.

Solutions posted Wednesday at 6am.

You may work with your study group, but submit your own solution.

QUIZZES

There will be 12 quizzes, during Wednesday synchronous meetings.

Similar in difficulty to exercise questions.

We will count each student’s 10 highest scores.

No makeup quizzes.

HOMEWORK

There will be 6 homeworks, posted to Canvas.

Each homework must be submitted by 11:59pm on Monday.

Homeworks are more “substantial” problems than we can work on in class, so they require more time.

Each student’s 5 highest homework scores count.

1 “grade me late” ticket - extend to 11:59pm Thursday

You may discuss homework with other students, but your submission must be your own work.

CONTENT

Functional Programming (Ocaml)

Reasoning & Computing with programs

WHAT “PRINCIPLES?”

Strong, expressive static type systems

Functions as values

Isolating, removing “side effects” from programs

Abstract, complex data types vs representations

Code reuse via modularity

Manipulating, reordering, evaluating programs

OCAML?!

influential

F#: Microsoft’s OCaml

Reason: Facebook’s OCaml

Rust: Mozilla’s OCaml

Swift: Apple’s OCaml

interactive

TOOLS

Tool Use
canvas Videos, Readings, Reading Quizzes, Grades
zoom Synchronous Meetings
slack Interactive course communication.
github Code submission, some autograding.
https://github.umn.edu/
gradescope Quizzes, Code feedback

Also: UNIX Command Line / VOLE, OCaml, utop, Atom

cs2041.org