/FP101x-Content-2015

FP101x - Functional Programming MOOC 2015 Content Repository

Primary LanguageHaskell

FP101x - Functional Programming MOOC 2015 Content

This repository will host the content for the Functional Programming course on EdX.

About this course Broadly speaking, functional programming is a style of programming in which the primary method of computation is the application of functions to arguments. Among other features, functional languages offer a compact notation for writing programs, powerful abstraction methods for structuring programs, and a simple mathematical basis that supports reasoning about programs.

Functional languages represent the leading edge of programming language design, and the primary setting in which new programming concepts are introduced and studied. All contemporary programming languages such as Hack/PHP, C#, Visual Basic, F#, C++, JavaScript, Python, Ruby, Java, Scala, Clojure, Groovy, Racket, … support higher-order programming via the concept of closures or lambda expressions.

This course will use Haskell as the medium for understanding the basic principles of functional programming. While the specific language isn't all that important, Haskell is a pure functional language so it is entirely appropriate for learning the essential ingredients of programming using mathematical functions. It is also a relatively small language, and hence it should be easy for you to get up to speed with Haskell.

Once you understand the Why, What and How that underlies pure functional programming and learned to “think like a fundamentalist”, we will apply the concepts of functional programming to “code like a hacker” in mainstream programming languages, using Facebook’s novel Hack language as our main example. This course assumes no prior knowledge of functional programming, but assumes you have at least one year of programming experience in a regular programming language such as Java, .NET, Javascript or PHP.

LICENSE The course materials of this course are Copyright Delft University of Technology and are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike (CC-BY-NC-SA) 4.0 International License.

What you'll learn

  • Understand the Why, What and How that underlies pure functional programming, and learn to “think like a fundamentalist”
  • Apply the concepts of functional programming to “code like a hacker” in mainstream programming languages

As the course progresses we will put up more material here.

We encourage contributions from the community (e.g. translations, fixes, etc.).

Lectures

Title 360p 720p 1080p Slides (PDF) Slides (PPT)
Book presentation 360p 720p 1080p
0. Introduction Part 1 360p 720p 1080p 0 (pdf) 0 (ppt)
0. Introduction Part 2 360p 720p 1080p
1. First Steps Part 1 360p 720p 1080p 1 (pdf) 1 (ppt)
1. First Steps Part 2 360p 720p 1080p
2. Types and Classes Part 1 360p 720p 1080p 2 (pdf) 2 (ppt)
2. Types and Classes Part 2 360p 720p 1080p
2. Types and Classes Part 3 360p 720p 1080p
3. Defining Functions Part 1 360p 720p 1080p 3 (pdf) 3 (ppt)
3. Defining Functions Part 2 360p 720p 1080p
Jam Session - Functional Programming in Dart 360p 720p 1080p
4. List Comprehensions Part 1 360p 720p 1080p 4 (pdf) 4 (ppt)
4. List Comprehensions Part 2 360p 720p 1080p
5. Recursive Functions Part 1 360p 720p 1080p 5 (pdf) 5 (ppt)
5. Recursive Functions Part 2 360p 720p 1080p
Jam Session - Functional Programming in C# 360p 720p 1080p
Jam Session - Functional Programming in Hack 360p 720p 1080p
6. Higher Order Functions Part 1 360p 720p 1080p 6 (pdf) 6 (ppt)
6. Higher Order Functions Part 2 360p 720p 1080p
6. Higher Order Functions Part 3 360p 720p 1080p
Jam Session - Church Numerals 360p 720p 1080p
7. Functional Parsers and Monads Part 1 360p 720p 1080p 7 (pdf) 7 (ppt)
7. Functional Parsers and Monads Part 2 360p 720p 1080p
7. Functional Parsers and Monads Part 3 360p 720p 1080p
8. Interactive Programs Part 1 360p 720p 1080p 8 (pdf) 8 (ppt)
8. Interactive Programs Part 2 360p 720p 1080p
Jam Session - Functional Programming in Kotlin 360p 720p 1080p
9. Declaring Types and Classes Part 1 360p 720p 1080p 9 (pdf) 9 (ppt)
9. Declaring Types and Classes Part 2 360p 720p 1080p
9. Declaring Types and Classes Part 3 360p 720p 1080p
10. The Countdown Problem Part 1 360p 720p 1080p 10 (pdf) 10 (ppt)
10. The Countdown Problem Part 2 360p 720p 1080p
10. The Countdown Problem Part 3 360p 720p 1080p
Jam Session - Testing and Debugging with QuickCheck video
Jam Session - Functional Programming in Scala 360p 720p 1080p
11. Lazy Evaluation Part 1 360p 720p 1080p 11 (pdf) 11 (ppt)
11. Lazy Evaluation Part 2 360p 720p 1080p