We may earn an affiliate commission when you visit our partners.
Course image
Dan Grossman

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.

Read more

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.

Enroll now

What's inside

Syllabus

Introduction and Course-Wide Information (Start Here)
Welcome! Start here! Learn about this course and how it's organized.
Software Installation and Homework 0
Read more
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.
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.
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.
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.
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.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Teaches fundamental concepts of programming languages with a strong emphasis on functional programming
Suitable for learners with prior programming experience
Uses multiple languages (ML, Racket, and Ruby) to teach concepts, enabling learners to understand the underlying principles of different programming paradigms
Focuses on teaching how to use language constructs effectively, emphasizing code elegance and correctness
Optional 'fake' homework assignment to familiarize learners with assignment submission mechanics
Examines the fundamental idea of equivalence in computing

Save this course

Save Programming Languages, Part A to your list so you can find it easily later:
Save

Reviews summary

Powerful principles of programming languages

Learners say this online course is largely positive and has engaging assignments. Taught by Dan Grossman, learners will discover the fundamental principles of programming languages using Standard ML, a functional programming language. There are difficult exams and challenging homework assignments, so students should plan for the full workload of 15-20 hours per week for 8 weeks.
Great course on fundamentals of ML. It seems equivalent to a standard undergrad university course.
"Amazing! The course really broadens your perspective towards programming language and I would highly recommend it."
"This course opened my mind to many of the different paradigms of programming and did so with comprehensive lectures, an incredible instructor, and useful/highly-illustrative assignments."
"A basic introduction to programming languages especially ML family. It's quite helpful to understand the theory behind the language design but not practical from a short-term perspective."
Excellent course! Great instructor and well-prepared material.
"Excellent course! I appreciate that the professor is very precise and intentional in his explanations and use of terminology."
"The course is actually very useful and well structured. Don't be scared by the use of a programming language (Standard ML) that might seem obscure."
"Dan Grossman is a wonderful instructor. He conveys the ideas in the course fluently."
"This course is definitely one of the best courses available on Coursera. Very challenging and time consuming (not for beginners), but it will without doubt make you a better programmer."
"This was one of the best courses I have taken. I am extremely happy with it. It gives both usage and formalisation of basic concepts of statically typed functional programming."
The initial software setup was a pain on MacOS.
"I am very pleased with this Course,I learned a lot, Dan is a great teacher."
"Amazing topics and teaching for start programming with a solid base since the beggining."
"The course was difficult for the idiom, i don´t speak english. Technical terms por example Binding is no more clear. this is my first programming course, the instructor i think is the best teacher."
"Fantastic course - it's real computer science."
"I love the way he lays it out, it's a great framework for understanding programming languages altogether, just like it says on the tin."
I got a review with 3 points for every task and comments like "cxatiu"
"The best course I have taken online, in fact not just online, I have not come across many such great teachers in real life as well."
"I learned a lot about functional programming through an esoteric programming language ML. It did knock on my brain on how i think about coding as coming from OOP point of view."
"Very good, polished course. Clearly many picky students have improved it in the eight years since it was posted."
"Great course for getting into the fundamentals of programming languages. Bit of a steep curve between Sections 1 and 2, but nothing impossible as long as you go over the material well."
"The course was quite time intensive (it took me about 54 hours), but it was absolutely worth it!"
The course is really demanding. I am quite experienced in object-oriented programming with Java, but I had no clue about functional programming.
"This course focus on programming thinking than just symple syntas of language. You can migrate it to the learning of all kinds of programming languge. It teaches you how to think and than what to do. Really useful course."
"Fun course at times and overall very intense. Some of the homework questions later in the course were extremely difficult and required a lot more time than designated."
"This course is a pain in the arse and really hard if you don't have the required background."
"I wanted a friendly introduction to the ML language family and got a lot out of this. This is the languages course I wish I had in undergrad."
"Emacs is the worst possible editor to deal with for someonw who wants to learn in this course."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Programming Languages, Part A with these activities:
Review basic programming concepts
Review basic programming concepts such as variables, data types, and control flow to strengthen your foundation before starting the course.
Browse courses on Programming Basics
Show steps
  • Re-read notes or textbooks on basic programming principles.
  • Work through simple programming exercises or tutorials.
  • Set up your development environment and practice writing basic programs.
Organize and review course resources
Keep your course materials organized and accessible for future reference and reinforcement of key concepts.
Show steps
  • Create a system for organizing notes, assignments, and other materials.
  • Review materials regularly to refresh your understanding.
  • Summarize and consolidate key concepts for easier recall.
Review course material before exams
Enhance your understanding and retention of course material by reviewing key concepts before exams to maximize your performance.
Show steps
  • Go over lecture notes, textbooks, and other course materials.
  • Complete practice questions or assignments.
  • Attend review sessions or consult with instructors or peers.
Five other activities
Expand to see all activities and additional details
Show all eight activities
Join a study group
Collaborate with peers to review course material, work on assignments, and discuss concepts in a supportive and interactive environment.
Show steps
  • Find or create a study group with compatible peers.
  • Establish regular meeting times and set goals for each session.
  • Take turns presenting and discussing course topics.
  • Work together on assignments and projects.
Solve coding challenges
Regularly practice solving coding challenges to improve your problem-solving skills and reinforce the concepts covered in the course.
Browse courses on Coding Challenges
Show steps
  • Join online coding challenge platforms.
  • Participate in weekly or daily coding challenges.
  • Review solutions and discuss strategies with peers or mentors.
Explore advanced functional programming topics
Dive deeper into advanced functional programming topics, such as higher-order functions, currying, and monads, to expand your knowledge beyond the scope of the course.
Browse courses on Functional Programming
Show steps
  • Identify gaps in your understanding of functional programming concepts.
  • Find tutorials or online courses on specific advanced topics.
  • Implement and experiment with the techniques you learn.
Build a personal programming project
Apply the concepts learned in the course by building a personal programming project that demonstrates your skills and deepens your understanding.
Show steps
  • Brainstorm project ideas and select a challenging one.
  • Design and plan the project architecture.
  • Implement and test the project.
  • Document the project and share it with others.
Attend industry events and meetups
Engage with professionals in the field, learn about industry trends, and build connections that can further your career and understanding of programming.
Show steps
  • Identify relevant industry events and meetups.
  • Register and attend the events.
  • Network with attendees, speakers, and potential mentors.
  • Follow up with connections made at the events.

Career center

Learners who complete Programming Languages, Part A will develop knowledge and skills that may be useful to these careers:
Software Engineer
Software Engineers apply engineering principles to the design, development, and maintenance of software products. This course may help someone in this role by developing their programming skills and problem-solving abilities. The course's emphasis on functional programming will be particularly relevant to those working with functional programming languages.
Data Scientist
Data Scientists use scientific methods and programming to extract knowledge and insights from data. This course may be useful for those in this role by providing a foundation in programming languages and data analysis techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or data science tools.
Database Administrator
Database Administrators design, implement, and maintain database systems. This course may be useful for those in this role by providing a foundation in programming languages and database management techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or database systems.
Mobile App Developer
Mobile App Developers design, develop, and maintain mobile applications. This course may be useful for those in this role by providing a foundation in programming languages and mobile development techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or mobile development tools.
IT Consultant
IT Consultants provide advice and support to organizations on their IT systems. This course may be useful for those in this role by providing a foundation in programming languages and IT consulting techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or IT consulting tools.
Web Developer
Web Developers design, develop, and maintain websites and web applications. This course may be useful for those in this role by providing a foundation in programming languages and web development techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or web development tools.
Product Manager
Product Managers manage the development and launch of new products. This course may be useful for those in this role by providing a foundation in programming languages and product management techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or product management tools.
UX Designer
UX Designers design and evaluate user interfaces. This course may be useful for those in this role by providing a foundation in programming languages and UX design techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or UX design tools.
Systems Analyst
Systems Analysts analyze and design computer systems. This course may be useful for those in this role by providing a foundation in programming languages and systems analysis techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or systems analysis tools.
Project Manager
Project Managers plan and manage projects. This course may be useful for those in this role by providing a foundation in programming languages and project management techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or project management tools.
Business Analyst
Business Analysts analyze business processes and make recommendations for improvements. This course may be useful for those in this role by providing a foundation in programming languages and business analysis techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or business analysis tools.
Technical Writer
Technical Writers create documentation for software and other technical products. This course may be useful for those in this role by providing a foundation in programming languages and technical writing techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or technical writing tools.
Quality Assurance Analyst
Quality Assurance Analysts test and evaluate software products. This course may be useful for those in this role by providing a foundation in programming languages and quality assurance techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or quality assurance tools.
Information Security Analyst
Information Security Analysts protect computer systems and networks from unauthorized access. This course may be useful for those in this role by providing a foundation in programming languages and information security techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or information security tools.
Data Analyst
Data Analysts collect, analyze, and interpret data. This course may be useful for those in this role by providing a foundation in programming languages and data analysis techniques. The course's focus on functional programming will be particularly relevant to those working with functional programming languages or data analysis tools.

Reading list

We've selected 24 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Programming Languages, Part A.
It comprehensive textbook on programming languages that covers a wide range of topics, from the basics of programming language design to advanced topics such as type systems and concurrency.
It textbook on programming languages that focuses on the theoretical foundations of programming languages. It is written in a clear and concise style, and it provides a deep understanding of the fundamental concepts of programming languages.
It textbook on programming languages that focuses on the theory of types. It is written in a clear and concise style, and it provides a deep understanding of the fundamental concepts of programming languages.
Provides a formal and mathematical approach to programming language design and implementation. It classic work in the field and is suitable for readers with a strong background in computer science.
It textbook on programming languages that focuses on the design of programming languages. It is written in a clear and concise style, and it provides a deep understanding of the fundamental concepts of programming languages.
Provides an in-depth exploration of advanced functional programming techniques, such as monads, applicative functors, and lazy evaluation. It is suitable for readers with a strong background in functional programming.
Provides a comprehensive introduction to Standard ML, which is one of the languages used in the course. It valuable resource for those interested in learning more about the language.
Provides a gentle introduction to type theory, which formal system for describing the types of expressions in a programming language. It is suitable for readers with little or no prior knowledge of type theory.
Provides a comprehensive introduction to programming language theory and good reference for those interested in the mathematical foundations of programming languages.
It textbook on compiler implementation in ML. It is written in a clear and concise style, and it provides a deep understanding of the fundamental concepts of compiler implementation.
Provides a practical introduction to Haskell, a functional programming language. It can be a valuable reference for those interested in learning more about functional programming in a real-world context.
Introduces functional programming in Scala. Since the course uses Racket and Ruby, this book can provide additional context for functional programming concepts.
Introduces category theory, a mathematical concept that is used in programming language theory. It can provide additional depth for those interested in the theoretical foundations of programming languages.
Provides a comparative survey of different approaches to compiler and interpreter construction. It covers a wide range of topics, from traditional compilation techniques to more modern approaches such as just-in-time compilation.
It textbook on programming languages that focuses on the practical aspects of programming languages. It is written in a clear and concise style, and it good introduction to the fundamental concepts of programming languages.
Provides a practical and accessible introduction to programming language design and implementation. It covers all aspects of language design, from syntax to semantics to implementation. It is suitable for readers with a strong background in computer science.
It textbook on programming languages that focuses on the paradigms of programming languages. It is written in a clear and concise style, and it good introduction to the fundamental concepts of programming languages.
Introduces programming concepts using the Scheme programming language. It can provide a gentle introduction to functional programming for those with limited programming experience.
Classic work on computer science and programming. It covers a wide range of topics, from algorithms to data structures to programming languages. It is suitable for readers with a strong background in computer science.
Provides a comprehensive and practical introduction to computer systems, from the hardware to the software. It covers all aspects of computer systems, from the basic components to the operating system to the applications. It is suitable for readers with a strong background in computer science.
Provides a comprehensive and practical introduction to operating systems. It covers all aspects of operating systems, from the basic concepts to the design and implementation of real-world systems. It is suitable for readers with a strong background in computer science.
It textbook on programming languages that provides a broad overview of the field. It is written in a clear and concise style, and it good introduction to the fundamental concepts of programming languages.
Provides a comprehensive and practical introduction to computer architecture. It covers all aspects of computer architecture, from the basic components to the design and implementation of real-world systems. It is suitable for readers with a strong background in computer science.

Share

Help others find this course page by sharing it with your friends and followers:
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser