Об этом курсе
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.

Только онлайн-курсы

Начните сейчас и учитесь по собственному графику.
Intermediate Level

Промежуточный уровень


Approx. 34 hours to complete

Предполагаемая нагрузка: 8-16 hours/week
Comment Dots


Субтитры: English

Только онлайн-курсы

Начните сейчас и учитесь по собственному графику.
Intermediate Level

Промежуточный уровень


Approx. 34 hours to complete

Предполагаемая нагрузка: 8-16 hours/week
Comment Dots


Субтитры: English

Syllabus - What you will learn from this course


2 hours to complete

Introduction and Course-Wide Information (Start Here)

Welcome! Start here! Learn about this course and how it's organized....
7 videos (Total 56 min), 5 readings
Video7 videos
Optional: Who I Am / Acknowledgments6m
What the Course is About / Initial Motivation8m
Recommended Background9m
Why Part A, Part B, Part C5m
Grading Policy9m
Optional: Very High-Level Outline7m
Reading5 readings
Start here!5m
About the Course10m
Some More Perspective on Recommended Background7m
Why are there 3 courses (Part A, Part B, Part C)?5m
Grading Policy Details10m
2 hours to complete

Software Installation and Homework 0

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....
4 videos (Total 9 min), 3 readings, 2 quizzes
Video4 videos
Emacs installation2m
SML installation1m
SML Mode installation3m
Reading3 readings
Part A Software Installation and Use: SML and Emacs0m
Why Emacs? (Optional)5m
Homework 0 Detailed Peer-Assessment Instructions0m


6 hours to complete

Section 1 and Homework 1

It's time to dive in! Start with a careful reading of the "Section 1 Welcome Message" and go from there....
17 videos (Total 150 min), 6 readings, 2 quizzes
Video17 videos
Rules for Expressions9m
The REPL and Errors12m
Functions Informally7m
Functions Formally8m
Pairs and Other Tuples9m
Introducing Lists10m
List Functions11m
Let Expressions7m
Nested Functions7m
Let and Efficiency10m
Booleans and Comparison Operations7m
Benefits of No Mutation7m
Optional: Java Mutation4m
Pieces of a Language6m
Reading6 readings
Section 1 Welcome Message7m
Section 1 Reading Notes0m
Code Files for All Section 1 Videos0m
Homework 1 Detailed Guidelines for Peer Assessment0m
Hints and Gotchas for Homework 15m
Extra Practice Problems0m


7 hours to complete

Section 2 and Homework 2

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....
22 videos (Total 178 min), 6 readings, 2 quizzes
Video22 videos
Tuples as Syntactic Sugar6m
Datatype Bindings8m
Case Expressions10m
Useful Datatypes11m
Pattern Matching So Far4m
Another Expression Example8m
Type Synonyms6m
Lists and Options are Datatypes9m
Polymorphic Datatypes8m
Each of Pattern Matching / Truth About Functions14m
A Little Type Inference6m
Polymorphic and Equality Types8m
Nested Patterns10m
More Nested Patterns10m
Nested Patterns Precisely6m
Optional: Function Patterns3m
Tail Recursion9m
Accumulators for Tail Recursion7m
Perspective on Tail Recursion5m
Reading6 readings
Section 2 Welcome Message5m
Section 2 Reading Notes0m
Code Files for All Section 2 Videos0m
Homework 2 Detailed Guidelines for Peer Assessment0m
Hints and Gotchas for Homework 27m
Extra Practice Problems0m


8 hours to complete

Section 3 and Homework 3 -- and Course Motivation

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. ...
28 videos (Total 247 min), 6 readings, 2 quizzes
Video28 videos
Functions as Arguments8m
Polymorphic Types and Functions as Arguments7m
Anonymous Functions9m
Unnecessary Function Wrapping5m
Map and Filter8m
Generalizing Prior Topics9m
Lexical Scope7m
Lexical Scope and Higher-Order Functions7m
Why Lexical Scope11m
Closures and Recomputation6m
Fold and More Closures11m
Closure Idiom: Combining Functions9m
Closure Idiom: Currying10m
Partial Application9m
Currying Wrapup6m
Mutable References8m
Closure Idiom: Callbacks8m
Standard-Library Documentation7m
Optional: Abstract Data Types With Closures11m
Optional: Closure Idioms Without Closures4m
Optional: Java Without Closures12m
Optional: C Without Closures10m
Course-Motivation Introduction5m
Why Study General PL Concepts?10m
Are All PLs the Same?6m
Why Functional Languages?11m
Why ML, Racket, and Ruby?12m
Reading6 readings
Section 3 Welcome Message5m
Section 3 Reading Notes0m
Code Files for All Section 3 Videos0m
Homework 3 Detailed Guidelines for Peer Assessment0m
Hints and Gotchas for Section 310m
Extra Practice Problems0m


5 hours to complete

Section 4 and Part-A Exam

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....
19 videos (Total 144 min), 5 readings, 2 quizzes
Video19 videos
What is Type Inference5m
ML Type Inference6m
Type Inference Examples10m
Polymorphic Examples10m
Optional: The Value Restriction and Other Type-Inference Challenges9m
Mutual Recursion9m
Modules for Namespace Management6m
Signatures and Hiding Things7m
A Module Example11m
Signatures for Our Example11m
Signature Matching4m
An Equivalent Structure6m
Another Equivalent Structure9m
Different Modules Define Different Types3m
Equivalent Functions8m
Standard Equivalences10m
Equivalence Versus Performance6m
Part A Wrap-Up & Parts B&C Preview6m
Reading5 readings
Section 4 Welcome Message7m
Section 4 Reading Notes0m
Code Files for All Section 4 Videos0m
Nothing (yet) (explanation)0m
Information About the Exam (Required Reading)10m
Quiz2 practice exercises
Practice Exam for Part A0m
Exam for Part A0m

Top Reviews

By DKMar 24th 2018

A very good introduction to functional programming. I especially liked how precisely (although not formally) lexical scoping, semantic, evaluation rules, types checking algorithm of SML were defined.

By YZDec 3rd 2016

I'm just a beginner for CS or SE classes, and find this course really concise and challenging. It opens a door for me to get deeper into programming language. No wonder it got so high average score.



Dan Grossman


About University of Washington

Founded in 1861, the University of Washington is one of the oldest state-supported institutions of higher education on the West Coast and is one of the preeminent research universities in the world....

Frequently Asked Questions

  • Once you enroll for a Certificate, you’ll have access to all videos, quizzes, and programming assignments (if applicable). Peer review assignments can only be submitted and reviewed once your session has begun. If you choose to explore the course without purchasing, you may not be able to access certain assignments.

  • If you pay for this course, you will have access to all of the features and content you need to earn a Course Certificate. If you complete the course successfully, your electronic Certificate will be added to your Accomplishments page - from there, you can print your Certificate or add it to your LinkedIn profile. Note that the Course Certificate does not represent official academic credit from the partner institution offering the course.

  • Yes! Coursera provides financial aid to learners who would like to complete a course but cannot afford the course fee. To apply for aid, select "Learn more and apply" in the Financial Aid section below the "Enroll" button. You'll be prompted to complete a simple application; no other paperwork is required.

More questions? Visit the Learner Help Center