Coursera

Catalog
  • Browse
  • Search
  • For Enterprise
  • Log In
  • Sign Up
  • Explore
  • For Enterprise
  • Sign Up
  • Log In
Coursera

Programming Languages, Part A

OverviewSyllabusFAQsCreatorsRatings and Reviews

HomeComputer ScienceSoftware Development

Programming Languages, Part A

University of Washington

About this course: 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.

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
University of Washington

  • Taught by:  Dan Grossman, Professor

    Computer Science & Engineering
LevelIntermediate
Commitment8-16 hours/week
Language
English
How To PassPass all graded assignments to complete the course.
User Ratings
4.9 stars
Average User Rating 4.9See what learners said
Syllabus
WEEK 1
Introduction and Course-Wide Information (Start Here)
Welcome! Start here! Learn about this course and how it's organized.
7 videos, 5 readings
  1. Материал для самостоятельного изучения: Start here!
  2. Video: Welcome! (And Some Course Mechanics)
  3. Video: Optional: Who I Am / Acknowledgments
  4. Video: What the Course is About / Initial Motivation
  5. Video: Recommended Background
  6. Video: Why Part A, Part B, Part C
  7. Video: Grading Policy
  8. Video: Optional: Very High-Level Outline
  9. Материал для самостоятельного изучения: About the Course
  10. Материал для самостоятельного изучения: Some More Perspective on Recommended Background
  11. Материал для самостоятельного изучения: Why are there 3 courses (Part A, Part B, Part C)?
  12. Материал для самостоятельного изучения: Grading Policy Details
  13. Вопрос для обсуждения: Discussion Forums: Why Are You Participating?
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, 3 readings
  1. Материал для самостоятельного изучения: Part A Software Installation and Use: SML and Emacs
  2. Материал для самостоятельного изучения: Why Emacs? (Optional)
  3. Video: Software Installation Introduction
  4. Video: Emacs installation
  5. Video: SML installation
  6. Video: SML Mode installation
  7. Неоцениваемое задание по программированию: Homework 0 (Auto-Grader)
  8. Материал для самостоятельного изучения: Homework 0 Detailed Peer-Assessment Instructions
  9. Взаимная оценка: Homework 0 (Peer Assessment)
WEEK 2
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, 6 readings
  1. Материал для самостоятельного изучения: Section 1 Welcome Message
  2. Материал для самостоятельного изучения: Section 1 Reading Notes
  3. Материал для самостоятельного изучения: Code Files for All Section 1 Videos
  4. Video: ML Variable Bindings and Expressions
  5. Video: Rules for Expressions
  6. Video: The REPL and Errors
  7. Video: Shadowing
  8. Video: Functions Informally
  9. Video: Functions Formally
  10. Video: Pairs and Other Tuples
  11. Video: Introducing Lists
  12. Video: List Functions
  13. Video: Let Expressions
  14. Video: Nested Functions
  15. Video: Let and Efficiency
  16. Video: Options
  17. Video: Booleans and Comparison Operations
  18. Video: Benefits of No Mutation
  19. Video: Optional: Java Mutation
  20. Video: Pieces of a Language
  21. Материал для самостоятельного изучения: Homework 1 Detailed Guidelines for Peer Assessment
  22. Материал для самостоятельного изучения: Hints and Gotchas for Homework 1
  23. Материал для самостоятельного изучения: Extra Practice Problems
Graded: Homework 1 (Auto-Grader)
Graded: Homework 1
WEEK 3
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, 6 readings
  1. Материал для самостоятельного изучения: Section 2 Welcome Message
  2. Материал для самостоятельного изучения: Section 2 Reading Notes
  3. Материал для самостоятельного изучения: Code Files for All Section 2 Videos
  4. Video: Building Compound Types
  5. Video: Records
  6. Video: Tuples as Syntactic Sugar
  7. Video: Datatype Bindings
  8. Video: Case Expressions
  9. Video: Useful Datatypes
  10. Video: Pattern Matching So Far
  11. Video: Another Expression Example
  12. Video: Type Synonyms
  13. Video: Lists and Options are Datatypes
  14. Video: Polymorphic Datatypes
  15. Video: Each of Pattern Matching / Truth About Functions
  16. Video: A Little Type Inference
  17. Video: Polymorphic and Equality Types
  18. Video: Nested Patterns
  19. Video: More Nested Patterns
  20. Video: Nested Patterns Precisely
  21. Video: Optional: Function Patterns
  22. Video: Exceptions
  23. Video: Tail Recursion
  24. Video: Accumulators for Tail Recursion
  25. Video: Perspective on Tail Recursion
  26. Материал для самостоятельного изучения: Homework 2 Detailed Guidelines for Peer Assessment
  27. Материал для самостоятельного изучения: Hints and Gotchas for Homework 2
  28. Материал для самостоятельного изучения: Extra Practice Problems
Graded: Homework 2
Graded: Homework 2
WEEK 4
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, 6 readings
  1. Материал для самостоятельного изучения: Section 3 Welcome Message
  2. Материал для самостоятельного изучения: Section 3 Reading Notes
  3. Материал для самостоятельного изучения: Code Files for All Section 3 Videos
  4. Video: Introduction to First-Class Functions
  5. Video: Functions as Arguments
  6. Video: Polymorphic Types and Functions as Arguments
  7. Video: Anonymous Functions
  8. Video: Unnecessary Function Wrapping
  9. Video: Map and Filter
  10. Video: Generalizing Prior Topics
  11. Video: Lexical Scope
  12. Video: Lexical Scope and Higher-Order Functions
  13. Video: Why Lexical Scope
  14. Video: Closures and Recomputation
  15. Video: Fold and More Closures
  16. Video: Closure Idiom: Combining Functions
  17. Video: Closure Idiom: Currying
  18. Video: Partial Application
  19. Video: Currying Wrapup
  20. Video: Mutable References
  21. Video: Closure Idiom: Callbacks
  22. Video: Standard-Library Documentation
  23. Video: Optional: Abstract Data Types With Closures
  24. Video: Optional: Closure Idioms Without Closures
  25. Video: Optional: Java Without Closures
  26. Video: Optional: C Without Closures
  27. Video: Course-Motivation Introduction
  28. Video: Why Study General PL Concepts?
  29. Video: Are All PLs the Same?
  30. Video: Why Functional Languages?
  31. Video: Why ML, Racket, and Ruby?
  32. Материал для самостоятельного изучения: Homework 3 Detailed Guidelines for Peer Assessment
  33. Материал для самостоятельного изучения: Hints and Gotchas for Section 3
  34. Материал для самостоятельного изучения: Extra Practice Problems
Graded: Homework 3
Graded: Homework 3
WEEK 5
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, 5 readings, 1 practice quiz
  1. Материал для самостоятельного изучения: Section 4 Welcome Message
  2. Материал для самостоятельного изучения: Section 4 Reading Notes
  3. Материал для самостоятельного изучения: Code Files for All Section 4 Videos
  4. Video: Section Introduction
  5. Video: What is Type Inference
  6. Video: ML Type Inference
  7. Video: Type Inference Examples
  8. Video: Polymorphic Examples
  9. Video: Optional: The Value Restriction and Other Type-Inference Challenges
  10. Video: Mutual Recursion
  11. Video: Modules for Namespace Management
  12. Video: Signatures and Hiding Things
  13. Video: A Module Example
  14. Video: Signatures for Our Example
  15. Video: Signature Matching
  16. Video: An Equivalent Structure
  17. Video: Another Equivalent Structure
  18. Video: Different Modules Define Different Types
  19. Video: Equivalent Functions
  20. Video: Standard Equivalences
  21. Video: Equivalence Versus Performance
  22. Материал для самостоятельного изучения: Nothing (yet) (explanation)
  23. Материал для самостоятельного изучения: Information About the Exam (Required Reading)
  24. Тренировочный тест: Practice Exam for Part A
  25. Video: Part A Wrap-Up & Parts B&C Preview
Graded: Exam for Part A

FAQs
How It Works
Задания курса
Задания курса

Каждый курс — это интерактивный учебник, который содержит видеоматериалы, тесты и проекты.

Помощь сокурсников
Помощь сокурсников

Общайтесь с тысячами других учащихся: обсуждайте идеи, материалы курса и помогайте друг другу осваивать новые понятия.

Сертификаты
Сертификаты

Получите документы о прохождении курсов и поделитесь своим успехом с друзьями, коллегами и работодателями.

Creators
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 840 ratings

ZG

It was super fun and helpful to get to know the basic ideas of functional programming.

AT

learn real programming

KZ

amazing course and excellent lecture! Very impressive about explanation on SML.

nikofeyn

Take this course. Many modern languages are still slowly stealing features from Standard ML, even decades later. Dan Grossman is passionate about this material. This course is arranged in such a way that it slowly builds you up in skill and knowledge, and the pacing is quite good. The homework assignments are very useful in reiterating the material, and the peer-grading really works if you commit and put work into it.

Learning functional programming is a great way to expand your skills as a software developer and programmer. The thinking required is much more principled than in something like Python, and so you begin to understand how this approach could be useful in the real world.



You May Also Like
Princeton University
Algorithms, Part I
1 course
Princeton University
Algorithms, Part I
View course
Princeton University
Algorithms, Part II
1 course
Princeton University
Algorithms, Part II
View course
University of California San Diego, National Research University Higher School of Economics
Algorithmic Toolbox
1 course
University of California San Diego, National Research University Higher School of Economics
Algorithmic Toolbox
View course
Stanford University
Divide and Conquer, Sorting and Searching, and Randomized Algorithms
1 course
Stanford University
Divide and Conquer, Sorting and Searching, and Randomized Algorithms
View course
University of California San Diego, National Research University Higher School of Economics
Data Structures
1 course
University of California San Diego, National Research University Higher School of Economics
Data Structures
View course
Coursera
Coursera provides universal access to the world’s best education, partnering with top universities and organizations to offer courses online.
© 2018 Coursera Inc. All rights reserved.
Download on the App StoreGet it on Google Play
  • Coursera
  • About
  • Leadership
  • Careers
  • Catalog
  • Certificates
  • Degrees
  • For Business
  • For Government
  • Community
  • Partners
  • Mentors
  • Translators
  • Developers
  • Beta Testers
  • Connect
  • Blog
  • Facebook
  • LinkedIn
  • Twitter
  • Google+
  • Tech Blog
  • More
  • Terms
  • Privacy
  • Help
  • Accessibility
  • Press
  • Contact
  • Directory
  • Affiliates