Role | Name | |
---|---|---|
Instructor | Douglas Howe | douglashowe@cunet.carleton.ca |
TA | Alexander Breeze | alexbreeze@cmail.carleton.ca |
TA | Chengjie Mao | chengjiemao@cmail.carleton.ca |
TA | Jared Tarnocai | jaredtarnocai@cmail.carleton.ca |
TA | Nazeeha Harun | nazeehaharun@cmail.carleton.ca |
TA | Nuha Sheikh | nuhasheikh@cmail.carleton.ca |
COMP 1805 and COMP 2402. Prerequisites are enforced for this course. Those without the prerequisites will be deregistered.
All students in the course are required to have a laptop that they can bring to class. The lectures will not require them, but the in-class quizzes will.
basic competence in applying a modern functional programming language
basic competence in using recursive techniques for problem solving and reasoning about recursive programs that operate on inductively-defined data-types
an understanding of the different kinds of evaluation that can be used in functional languages, and basic competence applying programming techniques exploiting lazy computation
a basic understanding of the relationship between, functional vs imperative programming languages
a basic understanding of the theoretical underpinnings of functional languages (the lambda-calculus)
ability to provide and explain the applicability of selected advanced abstraction mechanisms from type theory
familiarity with techniques for handling imperative operations, such as variable assignment and exceptions, in a purely functional language
This is a synchonous in-person course. The instructor intends to record lectures and post them on the course website to assist students who are sick etc, but there is no guarantee. If for some reason a lecture does not get recorded, it will not be redone later. Lectures will not be streamed live.
Lectures will be a mix of slides and "live coding". The slides and code will be posted on the course website along with a recording of the lecture. Lecture attendance is optional (but see above about videos).
Extensive use will be made of "Ed Discussion", a Q&A tool being used by most of the top US universities. This will be the main place where you can ask questions and have them answered. Answers can be from course staff (instructor and TAs), or from other students. Answers by students can be endorsed/annotated/highlighted by staff. It is expected that most interaction outside of class will be done this way. Conventional 1-1 office hours will only only be for students who are struggling with the material enough that they are unable to formulate specific questions.
Almost all of the term work of the course will involve the Haskell programming languages (see below on course software). See the "Help" section of the course website for instructions on how install Haskell.
There is no textbook for the course, but the online book Learn you a Haskell for Great Good is an excellent tutorial-style book for learning basic Haskell. Relevant sections will be pointed out at the course proceeds. Other web resources may be provided or pointed out during the course.
There is no official Discord channel for the course. Students, as always, are free to use one, as long as they adhere to University rules about harassment etc, but the course staff will not be answering course-related questions there, and will not be responsible for any misinformation appearing there. The Ed discussion tool is the place to get help with course material, and to discuss it with other students.
Weight | Course component |
---|---|
10% | 12 assignments @1%, lowest two dropped |
45% | 4 quizzes @15%, lowest dropped |
45% | Final exam |
Late assignments might be graded, but will have a zero recorded for them no matter what the reason for lateness.
The dropping of low scores in the assessment scheme is intended to account for work that's missed for reasons beyond a student's control. There will be no other accommodations granted for missed quizzes or assignments no matter what the reason, so be careful save your "free passes" for illnesses or other events out of your control.
Quizzes will be done in-class using your laptop. Typically you will be writing programs using whatever programming environment you like, and submitting the answers to Gradescope.
Unfortunately, for this to work in a classroom setting it's essential to use e-proctoring to make sure students aren't getting outside help.
The quizzes and, possibly, the final exam, will use CoMaS, an e-proctoring tool developed in the Carletonn's School of Computer Science and now officially supported by our Exam Services.
CoMaS is a small tool you install on your laptop for the exam period. It does not look at anything that was on your laptop before the exam starts. During the exam, it takes occasional screen shots and webcam pictures, and monitors file changes. After the exam the tool can be deleted.
CoMaS has been thoroughly vetted by the university. If you're concerned about privacy, maybe the following will help.
You almost certainly have already installed apps from sources far less trustworthy than a large public university, including sources whose business model relies on harvesting personal information.
A breach of student privacy using CoMaS, if it became public, would be an existential crisis for the university. One thing I've learned about senior academic management is that if anything gives them nightmares it's the possibility of negative national press.
If you have questions about CoMaS and privacy, please see the CoMaS Privacy FAQ.
If for some reason you can't tolerate temporarily installing CoMaS, the only alternative is to write the test on paper. You wouldn't get the help of a programming environment, or autograding in Gradescope to help with debugging, but it would still be a reasonably fair test. The programs you will be asked to write will be tiny.
Date | Topic (tentative) | Event |
---|---|---|
Thu Sep 07 | Procedural v functional | |
Tue Sep 12 | Integer recursion | |
Thu Sep 14 | Equational reasoning | A1 due |
Tue Sep 19 | Data types and case |
|
Thu Sep 21 | Data types and recursion | A2 due |
Tue Sep 26 | Quiz 1 | |
Thu Sep 28 | Guards, let , where , lambda |
A3 due |
Tue Oct 03 | List hacking, map, filter | |
Thu Oct 05 | The Maybe data type |
A4 due |
Tue Oct 10 | Induction and recursion | |
Thu Oct 12 | Interpreters: expressions | A5 due |
Tue Oct 17 | Quiz 2 | |
Thu Oct 19 | Interpreters: environments | A6 due |
Tue Oct 24 | fall break | |
Thu Oct 26 | fall break | |
Tue Oct 31 | Interpreters: mini-Haskell | |
Thu Nov 02 | Currying | A7 due |
Tue Nov 07 | Higher-order programming | |
Thu Nov 09 | Fold/reduce | A8 due |
Tue Nov 14 | Quiz 3 | |
Thu Nov 16 | Type classes | A9 due |
Tue Nov 21 | Maybe monad and do |
|
Thu Nov 23 | IO in Haskell: a naive approach | A10 due |
Tue Nov 28 | The IO monad | |
Thu Nov 30 | Lenses | A11 due |
Tue Dec 05 | Quiz 4 | |
Thu Dec 07 | TBD | A12 due |
Current information on academic misconduct (definitions, consequences etc) can be found here.
The course follows Carleton's policies. For a description of the kinds of accommodations available, and how to request them, see Carleton's Academic Accommodations page.