CSE 116: Intro to Functional Programming
Fall 2019
Information
Meeting time and place
Lecture: Tuesdays and Thursdays from 3:20pm to 4:55pm Steven Acad 150.
Discussion Sections:
- Monday from 4pm to 5:05pm @ Steven Acad 175
- Wednesday from 7:10pm to 8:15pm @ Kresge Clrm 327
Lab sessions:
Computing Resources
We will use the Piazza site for communication, discussion, and announcements. All homework programming assignments will be distributed and submitted via GitLab.
Please use Piazza for communicating with course staff whenever possible. You will be more likely to receive a timely response.
If you would prefer to use a remote server to build and test your assignments, then you should be able to access grunhilda.soe.ucsc.edu with your CruzID blue password. However, I maintain this server myself, and I can't make promises about its uptime or how quickly issues will be resolved. It has your AFS home directories mounted, though, so even if it goes down, you shouldn't lose access to your data.
Text Resources
There are no required textbooks for this course, but using one or more of the following textbooks to expand your understanding of course topics is highly recommended. In particular, these textbooks are good sources of example problems to test your understanding of course concepts. When a free online copy is available (either a preprint or an ebook via the UCSC library), I've noted it below. More ebooks may become available through the library soon.
- An Introduction to Functional Programming Through Lambda Calculus by Greg Michaelson. Free pre-print.
- Thinking Functionally with Haskell by Richard Bird. Available online (free via library).
- Programming in Haskell (2nd ed.) by Graham Hutton.
- Real World Haskell by Bryan O'Sullivan.
- Learn You a Haskell for Great Good by Miran Lipovača. Available free online
- Write You a Haskell by Stephen Diehl. (incomplete, but useful) Available free online
Course Staff
Name | Position | Phone | Office/consulting hours | |
---|---|---|---|---|
Owen Arden | Instructor | Turn on JavaScript to view the email address | 2-7044 |
Fridays 1pm-2pm, E2-349A (please make a appointment) |
Sohum Banerjea | TA | sobanerj@ucsc.edu | Mondays, 2:00pm - 3:30pm, E2-397 | |
Devesh | TA | ddevesh@ucsc.edu | Wednesdays 4:00pm - 5:00pm BE-151 | |
Austin Cheng | Reader | abcheng@ucsc.edu | ||
Timothy Eppstein | Reader/Tutor | teppstei@ucsc.edu | Mondays & Wednesdays, 10-11am, Crown 201 | |
Carl Erez | Tutor | cerez@ucsc.edu | Tuesdays & Thursdays, 5:30-6:30pm, Crown 201 | |
Matthew Johnson | Tutor | maaajohn@ucsc.edu | Fridays 10am-11am & 4pm-5pm, Crown 201 | |
Kit Lao | Tutor | kilao@ucsc.edu | Wednesdays 12pm-1pm, Crown 201 | |
Art Parkeenvincha | Reader | tparkeen@ucsc.edu | ||
Jacob Rowen | Tutor | tjnrowen@ucsc.edu | Wednesdays & Fridays, 10-11am, Crown 201 | |
Emily Soth | Reader | esoth@ucsc.edu | ||
Vishal Swaminathan | Reader | vswamina@ucsc.edu |
Coursework
Students are evaluated on the basis of homeworks, labs, and a final exam. Regrades must be requested, in person, within 2 weeks of receiving graded assignment.Class participation
Involves answering questions in-class via Google Forms. | 5% |
Homework assignments
There will be 6 programming assignments, primarily in Haskell. You may work on these assignments individually or in groups of at most two, but all work must be submitted individually. Both individuals must clearly indicate membership in the group in their submission. | 30% |
Midterm exam
Will be held during lecture (see schedule). Closed book, but you may use a double-sided “cheat sheet”. | 30% |
Final exam
Will be held on Thursday June 13, from 12-3pm (location TBD). Closed book, but you may use a double-sided “cheat sheet”. If your final grade is higher than your midterm grade, it will replace your midterm grade, but you must take both the midterm and the final. | 35% |
Piazza extra credit
Extra credit for top 10 best participants on Piazza, decided by course staff. | +5% |
Course data collection
We may, in the future, use anonymized data collected from in-class quizzes and other course assignments to improve learning outcomes for future CSE students. If you do not want us to use any data associated with you for these purposes, please opt out here.
Mandatory Course Requirements
You must receive a 60% or higher for your homework average and final exam grade to pass the class.
For example, doing well on the final but submitting poor (or no) homework solutions will see you fail the class.
Late submissions
You have a total of four late days that you can use throughout the quarter as you need them, where a late day means anything between 1 second and 23 hours 59 minutes and 59 seconds past a deadline. You should save your late days for when unexpected circumstances arise that prevent you from turning in your homework on time. It is very unlikely that additional extensions beyond these four days will be approved, so use them wisely.
To have your late submission graded, you must fill out this form.
DRC accomodations
UC Santa Cruz is committed to creating an academic environment that supports its diverse student body. If you are a student with a disability who requires accommodations to achieve equal access in this course, please submit your Accommodation Authorization Letter from the Disability Resource Center (DRC) to me privately during my office hours or by appointment, preferably within the first two weeks of the quarter. At this time, I would also like us to discuss ways we can ensure your full participation in the course. I encourage all students who may benefit from learning more about DRC services to contact DRC by phone at 831-459-2089, or by email at drc@ucsc.edu.
Schedule (subject to change)
# | Date | Topic/notes | Assignments |
---|---|---|---|
1 | Thu 09/26/19 | Course overview and introduction (slides) | |
2 | Tue 10/01/19 | Lambda calculus (slides) | |
3 | Thu 10/03/19 | ... | |
4 | Tue 10/08/19 | ... | |
5 | Thu 10/10/19 | (canceled) | |
Fri 10/11/19 | HW#0 due | ||
6 | Tue 10/15/19 | Introduction to Haskell (slides) | |
7 | Thu 10/17/19 | Datatypes and Recursion (slides) | |
Fri 10/18/19 | HW#1 due | ||
8 | Tue 10/22/19 | ... | |
9 | Thu 10/24/19 | Higher-order functions (slides) | |
Fri 10/25/19 | HW#2 due | ||
10 | Tue 10/29/19 | Midterm (closed book, in class) (Spr19 Midterm | Spr19 solutions) (Midterm | solutions) |
|
11 | Thu 10/31/19 | ... (HOF continued) | |
12 | Tue 11/05/19 | Environments and closures (slides) | |
Wed 11/06/19 | HW#3 due | ||
13 | Thu 11/07/19 | ... / Theorems about programs (slides) | |
14 | Tue 11/12/19 | ... / Polymorphism and type inference (slides) | |
15 | Thu 11/14/19 | ... | |
Sun 11/17/19 | HW#4 due | ||
16 | Tue 11/19/19 | ... | |
17 | Thu 11/21/19 | ... | |
18 | Tue 11/26/19 | Typeclasses (slides) | |
19 | Tue 12/03/19 | ... | |
Wed 12/04/19 | HW#5 due | ||
20 | Thu 12/05/19 | Final review (slides) | |
Mon 12/09/19 | Final Exam (4pm - 7pm) | UCSD sample final (solutions) UCSC Spr19 final |