Introduction to Functional Programming

Provided by:
8/10 stars
based on  17 reviews
Provided by:
Cost FREE
Start Date On demand

Course Details

Cost

FREE

Upcoming Schedule

  • On demand

Course Provider

edX online courses
Harvard University, the Massachusetts Institute of Technology, and the University of California, Berkeley, are just some of the schools that you have at your fingertips with edX. Through massive open online courses (MOOCs) from the world's best universities, you can develop your knowledge in literature, math, history, food and nutrition, and more. These online classes are taught by highly-regarded experts in the field. If you take a class on computer science through Harvard, you may be tau...
Harvard University, the Massachusetts Institute of Technology, and the University of California, Berkeley, are just some of the schools that you have at your fingertips with edX. Through massive open online courses (MOOCs) from the world's best universities, you can develop your knowledge in literature, math, history, food and nutrition, and more. These online classes are taught by highly-regarded experts in the field. If you take a class on computer science through Harvard, you may be taught by David J. Malan, a senior lecturer on computer science at Harvard University for the School of Engineering and Applied Sciences. But there's not just one professor - you have access to the entire teaching staff, allowing you to receive feedback on assignments straight from the experts. Pursue a Verified Certificate to document your achievements and use your coursework for job and school applications, promotions, and more. EdX also works with top universities to conduct research, allowing them to learn more about learning. Using their findings, edX is able to provide students with the best and most effective courses, constantly enhancing the student experience.

Provider Subject Specialization
Sciences & Technology
Business & Management
21570 reviews

Course Description

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, Haske...

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.

Reviews 8/10 stars
17 Reviews for Introduction to Functional Programming

Ratings details

  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars
  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars
  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars

Rankings are based on a provider's overall CourseTalk score, which takes into account both average rating and number of ratings. Stars round to the nearest half.

Sort By
Gabriel Candal profile image
Gabriel Candal profile image
8/10 starsCompleted
  • 18 reviews
  • 14 completed
4 years ago
Pros: -Complete introduction to functional programming -Some challenging quizzes -Multi-language (you don't have to use Haskell) -You can use Haskell :D -The instructor seems like a great guy -Formal exposure to the theme, which is properly assessed in the homework, like a decent MOOC should do. -There are several optional segments, called 'Jam Session' where you will be shown extra material (related to functional programming, but not funcprog stricu sensu). I'm sorry Erik, I admire you and your work, but I can't help myself but to share my honest opinion: Cons: \- Video lectures are, and I can't stress this enough, NOT enough if you want to fully understand the material. \- As a consequence of the previous point, some homework questions seem like as if they have fallen from the sky. \- Homework is divided into programming exercises (~10%) and quizzes. The programming exercises (except for the last lab) are WAY too ... Pros: -Complete introduction to functional programming -Some challenging quizzes -Multi-language (you don't have to use Haskell) -You can use Haskell :D -The instructor seems like a great guy -Formal exposure to the theme, which is properly assessed in the homework, like a decent MOOC should do. -There are several optional segments, called 'Jam Session' where you will be shown extra material (related to functional programming, but not funcprog stricu sensu). I'm sorry Erik, I admire you and your work, but I can't help myself but to share my honest opinion: Cons: \- Video lectures are, and I can't stress this enough, NOT enough if you want to fully understand the material. \- As a consequence of the previous point, some homework questions seem like as if they have fallen from the sky. \- Homework is divided into programming exercises (~10%) and quizzes. The programming exercises (except for the last lab) are WAY too easy compared to the quizzes, which is the real deal regarding pushing your knowledge on this to the limit. If you try to do the quizzes without trying out the answers in the interpreter first (like I did, at first), you WILL have problems. \- Some of the questions' difficulty is related to small details, which can be frustrating, especially since you only get 1 try. I just failed a question where we had to pick the right proof by induction for a given equality, and the difference between my answer and the right one was 1 + x vs x + 1 (missing usage of commutative property in the 1st one). It is said several times throughout the course that you will need to either read the book or google the subject by yourself and that is COMPLETELY true. I had a reasonable informal exposure to the topic but still struggled to make it trought the homework. If you plan to gain some knowledge, even if you don't get to 90%+ grade, this is a great course, but you won't be able to understand the material just by the MOOC itself, extra study will be needed.
Was this review helpful? Yes5
 Flag
Caspar Derksen profile image
Caspar Derksen profile image

Caspar Derksen

10/10 starsCompleted
2 years, 5 months ago
This course may be quite challenging for students without a prior background in computer science or mathematicus. It is adviseable to practice a lot, test every answer to a question in the Haskell REPL, study additional background material, and use the forum (as advertised). You will not get a certificate for free here... I definitely recommend taking this course using Haskell if you want to become a better programmer, before starting a study on another FP language, or using FP features in imperative languages. You will acquire a thorough understanding of FP concepts (as opposed to learning syntactic features), and an appreciation of the simplicity and power of FP.
Was this review helpful? Yes0
 Flag
student profile image
student profile image

student

5/10 starsCompleted
2 years, 11 months ago
The first half of the course was easy; the material was really detailed, sometimes even boring. But there were tiny signs in the tests that did not fit to this slow, easy but work-a-lot learning model. For example language elements not discussed in the lessons and questions which just tested how many indirections your mind can handle (or alternatively how good you are in copying and testing the code). But the possibility to check after each question really motivated me to continuously repeat and improve my knowledge. The second half of the course was terrible, they just came up with the monads and without describing it the boring, detailed way, suddenly everything was based on it. I had to search for additional materials and put a lot of extra work to understand the concepts. Maybe it would have been easier if I read the book, but heeeey, I managed to reach near 100% in the tests of first half of the course without any extra effort ... The first half of the course was easy; the material was really detailed, sometimes even boring. But there were tiny signs in the tests that did not fit to this slow, easy but work-a-lot learning model. For example language elements not discussed in the lessons and questions which just tested how many indirections your mind can handle (or alternatively how good you are in copying and testing the code). But the possibility to check after each question really motivated me to continuously repeat and improve my knowledge. The second half of the course was terrible, they just came up with the monads and without describing it the boring, detailed way, suddenly everything was based on it. I had to search for additional materials and put a lot of extra work to understand the concepts. Maybe it would have been easier if I read the book, but heeeey, I managed to reach near 100% in the tests of first half of the course without any extra effort or reading the book. I was so close to the overall 60% that I only needed to reach a few points in the second half. So the course was unbalanced, period. And if I read the book why would I need the course? This course is not an introduction, and not about functional programming. It is about Haskell, and possibilities of Haskell and creative use of Haskell, but not about understanding the functional paradigm and building a structured solid knowledge. There is hardly any real world application mentioned. If you want to build a compiler or a graphical engine in Haskell and you studied abstract algebra before (I did) then this course is maybe for you.
Was this review helpful? Yes0
 Flag
Alexey Galiullin profile image
Alexey Galiullin profile image

Alexey Galiullin

10/10 starsCompleted
2 years, 11 months ago
Great introduction course to functional programming. IMHO the best and most comprehensive course about the topic I have seen so far. Erik is amazing teacher with great sense of humour and incredible ability to explain complex things in a very simple way. This course clicks for me so I would really recommend it if you want to dive into FP.
Was this review helpful? Yes0
 Flag
Student profile image
Student profile image

Student

6/10 starsCompleted
2 years, 11 months ago
The course was mostly excellent but it has insufficient coverage of difficult topics (Monads) and does not even mention continuation passing style which is required for the capstone exercise. If these were properly covered (which would mean making a course a week or two longer) it would be a excellent course. As it is, its very good by flawed. If you decide to do this course, plan on spending a lot of time on the concurrency lab, because the course does not prepare you adequately for it, and also plan on some extra time understanding Monads.
Was this review helpful? Yes0
 Flag
student profile image
student profile image

student

1/10 starsDropped
3 years, 1 month ago
Homework questions do not help learn functional programming. More multiple choice guessing than actual programming. The creator of this course should take the Intro to Python Course offered by MIT to understand how to develop a useful course - because clearly this course is not.
Was this review helpful? Yes0
 Flag
Igor Marta profile image
Igor Marta profile image

Igor Marta

10/10 starsCompleted
3 years, 5 months ago
An awesome and challenging course for those that are eager to get a grasp over functional programming. My favorite part of the course was the language(Haskell), it is a true marvel. I highly recommend this course to everybody. And Erik(@headinthebox), I am still waiting for that Category Theory course you promised.
Was this review helpful? Yes0
 Flag
student profile image
student profile image

student

7/10 starsCompleted
3 years, 11 months ago
I did learn a lot, but I have a mixed feeling about the course. If you feel enthusiastic about learning Haskell and have some idea what is it like, you should take it. If you are curious what is it like, it's probably better to read some introductory tutorials before taking it. Lectures are good, but not sufficient for completing the labs and homework, you'll have to read additional material. Some homework questions have little connection to corresponding lecture content. Some lectures are supplemented with links to academic papers (if you get into functional programming, you'll end up reading research papers anyway, why not to start right now). Homework is quite extensive and really helps you check your understanding. However, lots of it is about reading bizzare code, and it gets annoying (fortunately, deadlines don't force you do the whole assignment in one day). Lab assignments vary from mindlessly pasting code into GHCi to very f... I did learn a lot, but I have a mixed feeling about the course. If you feel enthusiastic about learning Haskell and have some idea what is it like, you should take it. If you are curious what is it like, it's probably better to read some introductory tutorials before taking it. Lectures are good, but not sufficient for completing the labs and homework, you'll have to read additional material. Some homework questions have little connection to corresponding lecture content. Some lectures are supplemented with links to academic papers (if you get into functional programming, you'll end up reading research papers anyway, why not to start right now). Homework is quite extensive and really helps you check your understanding. However, lots of it is about reading bizzare code, and it gets annoying (fortunately, deadlines don't force you do the whole assignment in one day). Lab assignments vary from mindlessly pasting code into GHCi to very fun and engaging tasks like implementing a fancy datastructure to almost inhumane tasks like reverse engineering logic from type signatures. In any case, I did learn what I wanted to learn and I liked the course despite its problems.
Was this review helpful? Yes2
 Flag
student profile image
student profile image

student

10/10 starsCompleted
3 years, 12 months ago
This was an amazing course! Background: \- I have been programming for over 30 years, starting in BASIC as a child, wending my way through Pascal in school and then professionally in FORTRAN and C and C++ (before there was a standard, an ARM, or even a compiler: we used the Glockenspiel translator to convert our C++ code to C), eventually ending up spending a decade or so writing Java before experimenting recently with Groovy and Clojure. \- My degree is in engineering, not CS, so I lack a lot of the formal theory of many of my colleagues. \- I've completed about six MOOCs before, but this was my first EdX course. There were a number of aspects of this course that I thought were done particularly well. \- The lecture videos were short, 6 to 12 minutes on average. \- Each lesson provided multiple instructional formats, including lecture videos, references to external reading, standalone homework problems, cumulative labs. \- Nearly al... This was an amazing course! Background: \- I have been programming for over 30 years, starting in BASIC as a child, wending my way through Pascal in school and then professionally in FORTRAN and C and C++ (before there was a standard, an ARM, or even a compiler: we used the Glockenspiel translator to convert our C++ code to C), eventually ending up spending a decade or so writing Java before experimenting recently with Groovy and Clojure. \- My degree is in engineering, not CS, so I lack a lot of the formal theory of many of my colleagues. \- I've completed about six MOOCs before, but this was my first EdX course. There were a number of aspects of this course that I thought were done particularly well. \- The lecture videos were short, 6 to 12 minutes on average. \- Each lesson provided multiple instructional formats, including lecture videos, references to external reading, standalone homework problems, cumulative labs. \- Nearly all exercises could be solved by use of the interactive Haskell environment. I used GHCi. \- The discussion forum was active and on-topic. \- The instructor and staff were very active and visible in the discussion forum. \- Spoon-feeding was discouraged. Thinking was required. Some students complained about several features of the course: \- Most exercises allowed only a single submission. => Since most exercises could be solved using GHCi or equivalent environment, it was expected that the student would attempt to work through the exercises to arrive at the correct answer. \- Code in exercises was provided as an image and not as copy-paste- able text. => Copying and pasting allows the student to bypass examining the code. In typing the code, the student is forced to inspect the code in minute detail, paying attention to the subtleties of syntax. \- Not everything was presented in the videos. => Students were encouraged to consult auxiliary materials. Multiple references were provided in the wiki and in the discussion forums. Again, the onus is on the student to provide effort in learning. This commentary was linked in the discussions and sums up the teaching philosophy of this course: http://www.wired.com/2013/10/telling-you-the-answer-isnt-the- answer/
Was this review helpful? Yes3
 Flag
Student profile image
Student profile image

Student

1/10 starsCompleted
3 years, 11 months ago
I expected to learn about FP and Haskell. I did learn a lot but I spent 3 times as much time on this course than advertised. Clearly there is a lot to learn and I could follow in the first few weeks, but after week 7 I could not follow any more as the concepts were not being explained very well and I found it very demotivating. I searched online, I read books, to no avail. Here is a list of things I did not like and would encourage them to improve: \- They failed to teach the concepts. \- The lectures are too short; the topics are not covered in any sort of detail. \- We only get 1 shot at the questions. That's fine if we re told at least why we got it wrong. You could at least provide students with the answer so that they get a chance to learn from their mistake. Otherwise, what is the point of the course? \- The lectures did not cover what was suggested in the exercises. The disconnect between the lectures and the exercises ... I expected to learn about FP and Haskell. I did learn a lot but I spent 3 times as much time on this course than advertised. Clearly there is a lot to learn and I could follow in the first few weeks, but after week 7 I could not follow any more as the concepts were not being explained very well and I found it very demotivating. I searched online, I read books, to no avail. Here is a list of things I did not like and would encourage them to improve: \- They failed to teach the concepts. \- The lectures are too short; the topics are not covered in any sort of detail. \- We only get 1 shot at the questions. That's fine if we re told at least why we got it wrong. You could at least provide students with the answer so that they get a chance to learn from their mistake. Otherwise, what is the point of the course? \- The lectures did not cover what was suggested in the exercises. The disconnect between the lectures and the exercises was so great from the middle of the course onwards, you would have thought that it was someone completely different who wrote them. \- The exercise questions were so poorly written as to be incomprehensible at times. \- The organisers seem to have forgotten what it was like to learn Haskell. \- I did not get a copy of the recommended book and in retrospect I should have done. They state that it is recommended, not definitely needed. The lectures alone were not sufficient, though, to understand the material and to do the exercises.
Was this review helpful? Yes2
 Flag
student profile image
student profile image

student

10/10 starsCompleted
3 years, 11 months ago
This is a tough course, but it is well worth it if you want to learn functional programming via Haskell. Whatever amount of time you think you will spend on the course can be doubled or tripled. It takes time because it is a declarative model compared to a imperative one that most programmers are used to. If you've had calculus or recent algebra, it is a plus, but if you're willing to do the work, you can get by with little math, but be prepared to review, re-learn past math.
Was this review helpful? Yes1
 Flag
Student profile image
Student profile image

Student

10/10 starsCompleted
3 years, 11 months ago
Outstanding, I can't recommend this course enough. The labs force you to write Haskell code, and were a joy to complete. The community was active in the discussion boards. When I got really stuck on a question I could count on active discussions about the topics. Cons: \- I wish he introduced more types of Monads than just the IO monad. \- There can be multiple homework assignments for the same due date, so be aware of that. I missed two homework assignments that way. Anyway that's my fault.
Was this review helpful? Yes1
 Flag
student profile image
student profile image

student

10/10 starsCompleted
4 years ago
This was a great course! As a professional programmer I use Java every day. I'm also very interested in broadening my horizons. Recently I read a book about Haskell which sparked my interest. I took this course to get some practice using it as well as refreshing walk through FP fundamentals. From that point of view the course exceeded my expectations. Erik is very funny guy and I like his presentation style.
Was this review helpful? Yes0
 Flag
Student profile image
Student profile image

Student

8/10 starsTaking Now
4 years ago
I expect to learn functional programming concepts. This course introduces many Haskell constructs for functional programming, but I find it a little hard to link Haskell constructs to generic concepts that can apply to other functional languages. Overall, it is an interesting but a little difficult course. FP newbies should pay lots of effort to get familiar with FP mindset or they will be easily lost in later lectures.
Was this review helpful? Yes0
 Flag
student profile image
student profile image

student

10/10 starsCompleted
4 years, 1 month ago
hello, my name is Imane and i'm Phd student in informatics chemistry. My dream is to be able to create a program to serve chemistry. when i saw your introduction to this course, i sad this is the one this is what i'm searching. i'll be happy to rejoin this course. thank you
Was this review helpful? Yes0
 Flag
student profile image
student profile image

student

10/10 starsCompleted
4 years, 1 month ago
Hi,I am chase,this is my first login in the edx platform,I am a china student.my professional is computer science.
Was this review helpful? Yes0
 Flag
Student profile image
Student profile image

Student

10/10 starsCompleted
3 years, 9 months ago
Great course! Now I expect a follow-up on Category Theory. :-)
Was this review helpful? Yes0
 Flag

Rating Details


  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars
  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars
  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars

Rankings are based on a provider's overall CourseTalk score, which takes into account both average rating and number of ratings. Stars round to the nearest half.