Another complementary course is "Paradigms of Computer Programming"
https://www.edx.org/course/louvainx/louvainx-louv1-01x-parad... which is being taught by Peter von Roy. The course covers the functional, declarative, and dataflow programming paradigms.
This is indeed a great course.
The videos are well done, and Peter Van Roy's explanations are very clear. Even seasoned programmers could learn a lot from this course.