Chevron Left
Back to Programming Languages, Part C

Learner Reviews & Feedback for Programming Languages, Part C by University of Washington

4.9
stars
458 ratings

About the Course

[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 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 of Part A. Part B assumes successful completion of Part A. 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. 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....

Top reviews

SS

Jan 7, 2019

Great course, nicely rounded off the discussions from previous parts. Really puts OOP style programming in context and nicely contrasts it from the functional programming concepts. Highly recommended!

KA

Jun 28, 2023

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 ;)

Filter by:

76 - 98 of 98 Reviews for Programming Languages, Part C

By Hector L

Aug 13, 2017

concise comparison between FP and OOP

By dynasty919

Mar 3, 2018

that last assignment is pretty neat.

By daniel 1

May 20, 2018

very good programming language in c

By Zack W

Aug 26, 2019

definitely a rewarding course

By Wang Y

Aug 1, 2017

The best course on coursera!

By Aydin S

Dec 17, 2020

Fantastic end to the series

By Gerhard K

Jan 12, 2017

Absolutely Brilliant Course

By Guilherme B

Oct 23, 2016

Best course of my life!

By Atsushi

Jan 30, 2019

great course material

By pffy233

Nov 20, 2016

excellence experience

By Kevin X

Dec 19, 2016

Really impressive!

By 郑

Jan 10, 2018

very good course!

By Hussein K

Nov 15, 2022

Great Adventure.

By Sam R

Jan 11, 2019

Fantastic course

By Morton L

Apr 4, 2020

Great course.

By Alejandro M

Dec 17, 2016

Excellent!

By Xinzhuang X

Nov 13, 2022

fruitful

By jani k

Mar 28, 2018

exellent

By Abdifatah A

Dec 19, 2017

great!!

By Melwyn S

Aug 5, 2023

Fab!!!

By UmbraSeven

Sep 28, 2017

Great!

By Евгений Ш

Sep 3, 2024

The last course in "Programming Languages" series. It introduces OOP and contrasts it with functional programming. Pros: - Good introduction to Ruby. Fast yet descriptive. - Good introduction to OOP with key ideas. - Very good comparison of OOP/Functional paradigm as ways to organize the same functionality differently (in opposite ways). - Good explanation of subtyping/generics. Cons: - Ruby may seem a bit too extreme choice for me here. The goal is clear: separate classes and types. However, from practical applications this confusion is often convenient (as was said in the course itself). - Bad examples and representation (a classic old way of teaching something: poor IDE and bad naming). The course illustrate concepts in silly examples (that's how the instructor calls them) with bad/arbitrary naming. As a result, the concept is clear, but it is hard to connect it to the real-world problem. I like examples with Point/Point3D/ColorPoint the most: the problem of multiple inheritance is the inferior since the bad "is-a" modelling is in the first place. This is just not how it is done in OOP. And exactly this bad modelling creates the diamond problem. Overall thoughts about the whole series of "Programming Languages": - the courses do their thing right: they illustrate core concepts of programming languages in different settings and teach you to see programming languages as sets of features and design decisions. The courses compare them and analyze how they work out in different situations. - the courses may not be as useful for practical development as for scientific R&D. However, it is good to know about learned concepts and to be able to see/use them in real development. - the course illustrates that in general functional paradigm is better and OOP is mostly suited for specific domains. However, for me the course implicitly illustrates that extremes are bad: 1. OOP has bad support of binary operations (by double dispatch). However, how often do the one face with such problems in real development? Usually, the domain is defined by business and is not so abstract (and don't forget about KISS). 2. Functional paradigm supports immutability. But this affects performance. And how often do the one care about performance? =) These focuses about specific problems favouring functional approach create a biased picture because we definitely care more about performance (but, of course, not all performance problems come from immutability). To sum up, there is a reason, why OOP is so popular. And there is a reason, why most programming languages supports both approaches in some way or another: just because one approach works better in one cases and other - in other cases. I think, this course lacks this message in a more explicit way.

By Brandon I

Mar 7, 2020

Again, great course - I was a little bit shaky on the Ruby, but to be honest this was my first real dive into what OOP is "really like" (as far as I can tell). I was also impressed by how certain important concepts from Part B were also tested towards the end (e.g., streams). I also enjoyed the material on subtyping towards the end; it makes you actually want to be interested in implementing a small language like that someday. The only caveat I must mention (and what the missing star is due to) is that, I had a little trouble on my Linux machine getting a version of Tcl/Tk to work with my installation of Ruby, since Ruby doesn't accept the latest (packaged) version of Tcl/Tk. I also had trouble with Jruby, and in the end opted to manually install older versions of Tcl and Tk. But I think the Tetris experience was worth it :) That whole little sidetrack actually also turned me on to the possibility of how PLs use graphics libraries in general, so let's see where that leads...