Who is this class for: The course assumes students are familiar with programming covered by most introductory courses, but it is explicitly designed not to be a particularly advanced course. Students should be comfortable with variables, conditionals, arrays, linked lists, stacks, and recursion (though recursion will be reviewed and expanded upon), and the difference between an interface and an implementation. Students should be eager to write programs in languages new to them. Part C of the course analyzes basic object-oriented concepts and contrast them with those of other languages, so familiarity with Java or a closely related language (e.g., C#) might be helpful for Part C, but it is not necessary for the assignments. This course is based on a course designed for second- and third-year undergraduates: not a first computer science course, but not an advanced course either. So it certainly will not cover everything in the beautiful world of programming languages, but it is a solid introduction. It is designed to be eye-opening and fascinating both for learners seeking a "third or fourth programming course" and for learners with more experience who are looking for a clear and precise foundation in programming languages. The assignments in the course are designed to be challenging, but with everything you need in the course content. An introductory video and another reading discuss assumed background in some more detail in Week 1 of the course.

Created by:  University of Washington

  • Dan  Grossman

    Taught by:  Dan Grossman, Professor

    Computer Science & Engineering
Commitment8-16 hours/week
How To PassPass all graded assignments to complete the course.
User Ratings
4.9 stars
Average User Rating 4.9See what learners said

How It Works

Each course is like an interactive textbook, featuring pre-recorded videos, quizzes and projects.

Help from Your Peers
Help from Your Peers

Connect with thousands of other learners and debate ideas, discuss course material, and get help mastering concepts.


Earn official recognition for your work, and share your success with friends, colleagues, and employers.

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.
Ratings and Reviews
Rated 4.9 out of 5 of 498 ratings

Great materials. Very helpful for understanding Recursion.

a good start for learning functional programming

Great course.

This course (and its subsequent parts) has long been on my MOOC bucket list. However, I have dropped out of previous sessions quite a few times when things got hectic with work and general life chaos.

I had excused myself with (false) statements such as "this course is too theoretical to be immediately useful" and "what's the point of spending time scratching the surface of a not-so-popular language". Looking back, I couldn't believe how wrong i was at the time, and couldn't be more glad that I finally started to pull through this series.

Sure this series is more theoretical and has little of the "cool" projects, but even this first course of the series has already shed new lights on my perspectives on programming languages, familiar or new. I used to see programming languages each in a class of their own (or only with similarities on the syntax-level), but this course has so far taught me, that there are governing principles true to all programming languages, and general rules that apply to types/families of languages.

Granted that I was writing ML the whole time for this course, but throughout the assignments and lectures, I couldn't help (though really not supposed to) but kept on seeing connections to languages that I'm familiar with (Options -> Java Optional, Signature -> header files, map/filter/reduce across the board). It was quite some exciting moments of (re)discovery, finding out about ideas that translate from one language to another.

I highly recommend this course to anyone who aspire to become better programmers. Thank you very much Dan, for sharing this course and your passion for programming languages with people around the world! I can't wait to find out what part B and C have to offer!