This course is an introduction to the basic concepts of programming languages, with a strong emphasis on functional programming. The course uses the languages ML, Racket, and Ruby as vehicles for teaching the concepts, but the real intent is to teach enough about how any language “fits together” to make you more effective programming in any language -- and in learning new ones.
This course is neither particularly theoretical nor just about programming specifics -- it will give you a framework for understanding how to use language constructs effectively and how to design correct and elegant programs. By using different languages, you will learn to think more deeply than in terms of the particular syntax of one language. The emphasis on functional programming is essential for learning how to write robust, reusable, composable, and elegant programs. Indeed, many of the most important ideas in modern languages have their roots in functional programming. Get ready to learn a fresh and beautiful way to look at software and how to have fun building it.
The course assumes some prior experience with programming, as described in more detail in the first module.
The course is divided into three Coursera courses: Part A, Part B, and Part C. As explained in more detail in the first module of Part A, the overall course is a substantial amount of challenging material, so the three-part format provides two intermediate milestones and opportunities for a pause before continuing. The three parts are designed to be completed in order and set up to motivate you to continue through to the end of Part C. The three parts are not quite equal in length: Part A is almost as substantial as Part B and Part C combined.
Week 1 of Part A has a more detailed list of topics for all three parts of the course, but it is expected that most course participants will not (yet!) know what all these topics mean.
Welcome! Start here! Learn about this course and how it's organized.
What's included
7 videos5 readings1 discussion prompt
Show info about module content
7 videos•Total 56 minutes
Welcome! (And Some Course Mechanics)•10 minutes
Optional: Who I Am / Acknowledgments•7 minutes
What the Course is About / Initial Motivation•9 minutes
Recommended Background•9 minutes
Why Part A, Part B, Part C•5 minutes
Grading Policy•9 minutes
Optional: Very High-Level Outline•8 minutes
5 readings•Total 37 minutes
Start here!•5 minutes
About the Course•10 minutes
Some More Perspective on Recommended Background•7 minutes
Why are there 3 courses (Part A, Part B, Part C)?•5 minutes
Grading Policy Details•10 minutes
1 discussion prompt•Total 5 minutes
Discussion Forums: Why Are You Participating?•5 minutes
Software Installation and Homework 0
Module 2•2 hours to complete
Module details
This module contains two things: (1) The information for the [unusual] software you need to install for Programming Languages Part A. (2) An optional "fake" homework that you can turn in for auto-grading and peer assessment to get used to the mechanics of assignment turn-in that we will use throughout the course. You can do this module either before or after watching the first few "actual course content" videos in the next module, but you will want to get the software installed soon so you can learn by actively trying out variations on the code in the videos. You will need to install the software to do the homework.
Homework 1 Detailed Guidelines for Peer Assessment•0 minutes
Hints and Gotchas for Homework 1•5 minutes
Extra Practice Problems•0 minutes
1 programming assignment•Total 180 minutes
Homework 1 (Auto-Grader)•180 minutes
1 peer review•Total 45 minutes
Homework 1•45 minutes
Section 2 and Homework 2
Module 4•7 hours to complete
Module details
This section is a particularly rewarding one where a lot of ideas come together to reveal a surprisingly elegant underlying structure in ML. As usual, start with the welcome reading, dive into the material, and leave plenty of time to approach the programming assignment methodically.
Each of Pattern Matching / Truth About Functions•15 minutes
A Little Type Inference•6 minutes
Polymorphic and Equality Types•8 minutes
Nested Patterns•11 minutes
More Nested Patterns•11 minutes
Nested Patterns Precisely•7 minutes
Optional: Function Patterns•4 minutes
Exceptions•8 minutes
Tail Recursion•10 minutes
Accumulators for Tail Recursion•8 minutes
Perspective on Tail Recursion•6 minutes
6 readings•Total 12 minutes
Section 2 Welcome Message•5 minutes
Section 2 Reading Notes•0 minutes
Code Files for All Section 2 Videos•0 minutes
Homework 2 Detailed Guidelines for Peer Assessment•0 minutes
Hints and Gotchas for Homework 2•7 minutes
Extra Practice Problems•0 minutes
1 programming assignment•Total 180 minutes
Homework 2•180 minutes
1 peer review•Total 45 minutes
Homework 2•45 minutes
Section 3 and Homework 3 -- and Course Motivation
Module 5•8 hours to complete
Module details
This section is all about higher-order functions -- the feature that gives functional programming much of its expressiveness and elegance -- and its name! As usual, the first reading below introduces you to the section, but it will make more sense once you dive in to the lectures.
Also be sure not to miss the material on course motivation that we have put in a "lesson" between the other videos for this week and the homework assignment. The material is "optional" in the sense that it is not needed for the homeworks or next week's exam, but it is still very highly encouraged to better understand why the course (including Parts B and C) covers what it does and, hopefully, will change the way you look at software forever.
Polymorphic Types and Functions as Arguments•8 minutes
Anonymous Functions•9 minutes
Unnecessary Function Wrapping•5 minutes
Map and Filter•9 minutes
Generalizing Prior Topics•9 minutes
Lexical Scope•7 minutes
Lexical Scope and Higher-Order Functions•8 minutes
Why Lexical Scope•12 minutes
Closures and Recomputation•7 minutes
Fold and More Closures•11 minutes
Closure Idiom: Combining Functions•9 minutes
Closure Idiom: Currying•11 minutes
Partial Application•10 minutes
Currying Wrapup•7 minutes
Mutable References•8 minutes
Closure Idiom: Callbacks•8 minutes
Standard-Library Documentation•7 minutes
Optional: Abstract Data Types With Closures•11 minutes
Optional: Closure Idioms Without Closures•5 minutes
Optional: Java Without Closures•12 minutes
Optional: C Without Closures•11 minutes
Course-Motivation Introduction•6 minutes
Why Study General PL Concepts?•11 minutes
Are All PLs the Same?•7 minutes
Why Functional Languages?•11 minutes
Why ML, Racket, and Ruby?•13 minutes
6 readings•Total 15 minutes
Section 3 Welcome Message•5 minutes
Section 3 Reading Notes•0 minutes
Code Files for All Section 3 Videos•0 minutes
Homework 3 Detailed Guidelines for Peer Assessment•0 minutes
Hints and Gotchas for Section 3•10 minutes
Extra Practice Problems•0 minutes
1 programming assignment•Total 180 minutes
Homework 3•180 minutes
1 peer review•Total 45 minutes
Homework 3•45 minutes
Section 4 and Part-A Exam
Module 6•5 hours to complete
Module details
We finish Part A of the course with this module. As explained in more detail in the welcome message, we discuss type inference, ML's module system, and the fundamental idea in computing of two computations being equivalent. There is no programming assignment -- instead there is an exam covering all of Part A. Finally, there is a brief wrap-up video for the end of Part A that also looks ahead to Part B and Part C -- we have put it after the exam, so don't overlook it.
What's included
19 videos5 readings2 assignments
Show info about module content
19 videos•Total 144 minutes
Section Introduction•2 minutes
What is Type Inference•6 minutes
ML Type Inference•6 minutes
Type Inference Examples•10 minutes
Polymorphic Examples•11 minutes
Optional: The Value Restriction and Other Type-Inference Challenges•10 minutes
Mutual Recursion•10 minutes
Modules for Namespace Management•6 minutes
Signatures and Hiding Things•7 minutes
A Module Example•11 minutes
Signatures for Our Example•11 minutes
Signature Matching•4 minutes
An Equivalent Structure•7 minutes
Another Equivalent Structure•9 minutes
Different Modules Define Different Types•4 minutes
Equivalent Functions•9 minutes
Standard Equivalences•10 minutes
Equivalence Versus Performance•6 minutes
Part A Wrap-Up & Parts B&C Preview•6 minutes
5 readings•Total 17 minutes
Section 4 Welcome Message•7 minutes
Section 4 Reading Notes•0 minutes
Code Files for All Section 4 Videos•0 minutes
Nothing (yet) (explanation)•0 minutes
Information About the Exam (Required Reading)•10 minutes
2 assignments•Total 120 minutes
Practice Exam for Part A•60 minutes
Exam for Part A•60 minutes
Instructor
Instructor ratings
Instructor ratings
We asked all learners to give feedback on our instructors based on the quality of their teaching style.
Since our founding in 1861, the University of Washington has been a hub for learning, innovation, problem solving and community building. Driven by a mission to serve the greater good, our students, faculty and staff tackle today’s most pressing challenges with courage and creativity, making a difference across Washington state — and around the world.
"To be able to take courses at my own pace and rhythm has been an amazing experience. I can learn whenever it fits my schedule and mood."
Jennifer J.
Learner since 2020
"I directly applied the concepts and skills I learned from my courses to an exciting new project at work."
Larry W.
Learner since 2021
"When I need courses on topics that my university doesn't offer, Coursera is one of the best places to go."
Chaitanya A.
"Learning isn't just about being better at your job: it's so much more than that. Coursera allows me to learn without limits."
Learner reviews
4.9
1,910 reviews
5 stars
93.19%
4 stars
5.44%
3 stars
0.15%
2 stars
0.31%
1 star
0.89%
Showing 3 of 1910
S
SS
5·
Reviewed on Jan 3, 2017
Instant favourite programming course. Great instructor and material, fun assignments, mind-bendy recursion, cool concepts you didn't know you wanted to know about. Learned a lot.
J
JB
5·
Reviewed on Oct 9, 2016
Fantastic course providing not only a great introduction to Functional Programming fundamentals, but also leading on to how languages relate to one another. Highly recommended.
A
AP
5·
Reviewed on Nov 22, 2023
This is one of the best courses I've taken - not only in terms of structure and content but also in terms of quizzes, programming assignments and exams (practice and final).
When will I have access to the lectures and assignments?
To access the course materials, assignments and to earn a Certificate, you will need to purchase the Certificate experience when you enroll in a course. You can try a Free Trial instead, or apply for Financial Aid. The course may offer 'Full Course, No Certificate' instead. This option lets you see all course materials, submit required assessments, and get a final grade. This also means that you will not be able to purchase a Certificate experience.
What will I get if I purchase the Certificate?
When you purchase a Certificate you get access to all course materials, including graded assignments. Upon completing the course, your electronic Certificate will be added to your Accomplishments page - from there, you can print your Certificate or add it to your LinkedIn profile.
Is financial aid available?
Yes. In select learning programs, you can apply for financial aid or a scholarship if you can’t afford the enrollment fee. If fin aid or scholarship is available for your learning program selection, you’ll find a link to apply on the description page.