Programming Languages, Part C

University of Washington via Coursera

Go to Course: https://www.coursera.org/learn/programming-languages-part-c

Introduction

### Course Review: Programming Languages, Part C on Coursera **Overview** If you're looking to deepen your understanding of programming languages, particularly functional programming, then "Programming Languages, Part C" on Coursera is a course worth your time. This course is designed to follow its predecessors, Parts A and B, and is intended for those who have already navigated through the foundational concepts taught in those sections. Part C builds upon the knowledge you've acquired, with a focus on practical implementations using ML, Racket, and Ruby. ### Course Structure and Content Upon entering the course, you'll find a structured and user-friendly layout. The first module serves as an introductory guide, providing essential information about software installations and navigating the course material effectively. This "Start Here" section sets a welcoming tone and prepares learners for the journey ahead. #### Module Highlights: - **Module with Ruby (Sections 8 and 9)**: The course kicks off with the first use of Ruby, introducing vital concepts like function closures and the principles of object-oriented programming, specifically focusing on inheritance and method overriding. Through engaging lessons, learners encounter a mix of theoretical concepts and hands-on practical assignments that encourage deep engagement with the material. - **Comparison of Paradigms**: One of the most intriguing aspects of this course is its ability to juxtapose functional and object-oriented programming. In the second week, students explore how these distinct paradigms paradoxically offer similar opportunities for problem decomposition. This synthesis hones critical thinking and encourages learners to see programming languages from an analytical perspective. - **Challenging Projects**: The assignments, particularly the final project involving the porting of an interpreter from ML to Ruby, offer a rewarding challenge that tests your understanding and application of concepts learned throughout the course. These practical assignments are crafted to push your limits and inspire creativity. - **Final Exam and Wrap-Up**: The concluding module focuses on subtyping and its connection to static types and generics, culminating in a final exam that assesses your comprehensive knowledge from both Part B and Part C. This summative assessment is crucial for ensuring that you've grasped the different facets of programming languages discussed throughout the course. ### Recommendations "Programming Languages, Part C" is highly recommended for anyone who wishes to advance their programming expertise, especially in functional programming contexts. Here are some reasons why you should consider enrolling: 1. **Engagement with Important Concepts**: The course delves deep into subjects like closures, inheritance, and subtyping that are foundational for modern programming languages. 2. **Hands-On Learning**: The practical assignments are not only relevant but also engaging, giving students a chance to apply their knowledge in meaningful ways. 3. **Encourages Critical Thinking**: By contrasting different programming paradigms, learners develop a more nuanced understanding of how different languages can be utilized effectively. 4. **Structured Pathway**: Since Part C is contingent upon lessons from Parts A and B, it propels students who have completed those courses into a more advanced, rewarding programming experience. 5. **Exceptional Instruction**: Coursera typically hosts top-tier educators, ensuring that learners receive high-quality teaching and support throughout the course. ### Conclusion In summary, "Programming Languages, Part C" serves as an excellent platform for learners aiming to deepen their understanding of programming languages through practical application and theoretical analysis. If you’ve completed Parts A and B, jumping into Part C will only enhance your programming arsenal and refine your skills in functional programming paradigms. This course is not merely an academic endeavor; it's a meaningful step towards becoming a more proficient and adaptable programmer in a constantly evolving tech landscape. Make sure to take advantage of this course and dive into the captivating world of programming languages!

Syllabus

Introduction, Course-Wide Information, and Software Installation (Start Here)

Welcome! Start here! Learn about this course and how it's organized.

Section 8 and Homework 6 (First Module with Ruby)

Let's get started programming with Ruby, including learning about Ruby's variant of (almost) function closures and the "inheritance and overriding" that is the essence of object-oriented programming. The welcome message has a few additional comments about "what makes Ruby different" and how to approach the (rather different) homework assignment, so let's get started...

Section 8 and Homework 6 (First Module with Ruby): Lesson Choices

Section 9 and Homework 7 (Second Module With Ruby)

Welcome to the second week of Part C where we will focus on how functional programming and object-oriented programming encourage such "exactly opposite" decompositions of problems that they are "more alike than you might realize". This is a key opportunity to synthesize much of what we have learned so far. As the welcome message discusses in more detail, we will go a bit beyond this to touch on some related advanced topics and then dive into the last -- and challenging -- programming assignment, which involves porting an interpreter from ML to Ruby.

Section 9 and Homework 7 (Second Module With Ruby): Lesson Choices

Section 10, Final Exam, and Course Wrap-Up

We have reached the last module of Programming Languages! We first study subtyping, how it relates to static types for object-oriented programming, and how it relates to generics. There is no assignment or quiz devoted only to this last "new material", but there is a "final exam" covering Part B and Part C of the course. Enjoy studying for the exam, and don't miss the final "wrap-up" lesson when you're all done!

Overview

[As described below, this is Part C of a 3-part course. Participants should complete Parts A and B first -- Part C "dives right in" and refers often to material from Part A and Part B.] 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 mor

Skills

Ruby (Programming Language) Programming Language Object-Oriented Programming (OOP) Subtyping

Reviews

It is such a great experience for me to learn this course! I want to say a big thank you to Dan and people behind this course!

The course series covered a broad range of knowledge. And the material are presented with great details.

This course covers many concepts in detail and provides the opportunity to practice them through challenging homework. It is highly recommended. Also, the teacher's enthusiasm helps a lot ;)

After watching this course, now I truly understand Objects Oriented programming, and its relation with Functional Programming. Strongly recommend!

It is a very challenging but rewarding course. Dan is a great teacher, he engages you in learning and makes it much more fun. I enjoyed a lot.