Functional Programming (FP) is a particular approach to programming that has gained increased popularity in recent years, even though its origins date back to the early days of programming.
In FP functions take center stage. We move programs along by feeding input into functions and processing their output, often by feeding it into yet other functions. While this is to a large extent true in other programming styles, it becomes a dominant feature in FP. As an example, in most languages a sorting procedure will be given an array as input and rearrange its entries in place to produce a sorted array. By contrast, a sorting function in an FP language would instead return a new array with the values sorted, and keep the initial array intact.
In this course we will learn about the FP programming style, and its strengths and weaknesses. We will do so in the context of the Haskell programming language, which apart from being a quintessential FP language offers many other interesting features like type classes and lazy evaluation and a complete lack of mutation.
In this course you will learn the essential characteristics of functional/effect-free programming, namely:
You will also delve more into a number of concepts relating to type systems:
On the website you will find a schedule with links to documents for each class day. In those documents you will find notes for the day’s lesson, and reading assignments.
You are expected to attend every class meeting. You are only allowed to miss 3 classes without excuse. From that point on, every unexcused absence will result in a reduction of your final score by one percentage point, up to a total of 5 points. Excused absences should be arranged in advance, and backed by appropriate documentation. Emergencies will be dealt with on an individual basis. There are very few reasons that would qualify as an excuse for an absence.
There will be regular programming assignments. The assignments are there to help you practice your understanding of new concepts, as well as to prepare you for the major project. Programming assignments are 35% of your final grade.
There will be one midterm, tentatively scheduled for Friday, February 14th and a final during finals week. You have to be here for the exams. If you have conflicts with these days, let me know as soon as possible. Do not plan your vacation before you are aware of the finals schedule.
There will also be a larger programming project, that we will discuss in more detail later in the term. It will require that you work together with your classmates, especially towards the end of the semester. It will count for 30% of your final grade.
Your final grade depends on class attendance, homework, project, quizzes, midterms and the final, as follows:
Component | Percent |
---|---|
Attendance | 5% |
Assignments | 35% |
Project | 30% |
Midterm | 15% |
Final | 15% |
This gives a number up to 100, which is then converted to a letter grade based roughly on the following correspondence:
Letter grade | Percentage Range |
---|---|
A, A- | 90%-100% |
B+, B, B- | 80%-90% |
C+, C, C- | 70%-80% |
D+, D, D- | 60%-70% |
F | 0%-60% |