MK
Very good. Only things I wish were better is more comments in some assignments and more prepared tests. Also I miss not having "Statement of Accomplishment" like some other Scala courses :-(.
With every smartphone and computer now boasting multiple processors, the use of functional ideas to facilitate parallel programming is becoming increasingly widespread. In this course, you'll learn the fundamentals of parallel programming, from task parallelism to data parallelism. In particular, you'll see how many familiar ideas from functional programming map perfectly to to the data parallel paradigm. We'll start the nuts and bolts how to effectively parallelize familiar collections operations, and we'll build up to parallel collections, a production-ready data parallel collections library available in the Scala standard library. Throughout, we'll apply these concepts through several hands-on examples that analyze real-world data, such as popular algorithms like k-means clustering.
Learning Outcomes. By the end of this course you will be able to: - reason about task and data parallel programs, - express common algorithms in a functional style and solve them in parallel, - competently microbenchmark parallel code, - write programs that effectively use parallel collections to achieve performance Recommended background: You should have at least one year programming experience. Proficiency with Java or C# is ideal, but experience with other languages such as C/C++, Python, Javascript or Ruby is also sufficient. You should have some familiarity using the command line. This course is intended to be taken after Functional Program Design in Scala: https://www.coursera.org/learn/progfun2.
MK
Very good. Only things I wish were better is more comments in some assignments and more prepared tests. Also I miss not having "Statement of Accomplishment" like some other Scala courses :-(.
YS
The assignment could be optimized and avoid to be more academic since it may make student lost focus and spend too much time on the question itself rather than the parallel programming
RD
Its a very good course! perhaps the in the practice code, before jumping into the problems they can provide a couple of simple examples/questions such that the main ideas are learnt.
RW
Good course but scala understanding is required for this course. So please register for prior course in the certification task to easily complete this course.
AL
The course is fairly advanced and you would need to review the materials many times to understand the concept. The assignments are definitely fun and not as straightforward as other courses.
SG
Good explanations, relevant assignments. But too small, too little graded assignments as for subject. Be better if the assignments has less starter code.
RC
Superb study material. Learnt a lot during this course. I am not much into mathematical stuff, but got a hang of how to break problems and improve efficiency through parallelism.
TG
Really good course covering some of the fundamentals of parallel programming, though for me I was hoping it would go into some of the Scala specifics a little more
DL
Very challenging course, the assignments are more about practising using parallel programming, would be better to design an assignment to implement the parallel programming.
BP
Very good course overall on the basics of parallel programming in scala. Would have been nice to talk a bit more on the low level setup (parallel and task construct code).
EL
A worthwhile course. I enjoyed the lectures a lot. Really good grounding on principles which can be applied in other languages/platforms in addition to Scala.
VO
excellent course, a good way to showcase how scala is well suited to patallel programming.The course itself is very practical and the instructors are very knowledgeable
Showing: 20 of 276
Although the course is taught well and covers a lot of ground, it is my opinion that the course content is not relevant to what I and majority of other Scala developers were looking for in terms of parallel programming. The instructor has been upfront in differentiating parallel programming (the objective of this course) from concurrency programming. However, I was more interested in learning about concurrency, especially about Akka actors, etc. I wish there was a course of Akka, which is what most Scala developers use for concurrent applications.
First 3 weeks were cool, but the last week was somehow rushed and the assignment did not involve any parallel programming.
General idea of the course is very good. There are a few things to improve though:
Focus more on intuition behind algorithms rather than formal math
Build a solid foundation that would allow students to develop parallel algorithms themselves.
Practical assignments should focus exactly on this, rather than filling in missing pieces of code that are only tangentially related to the algorithm itself.
It would be helpful if the course provided minimal but solid basics and intuition behind parallel computations. The basics that would allow students to learn more advanced concepts themselves.
In any case, the course has a lot of value and the instructors are awesome.
This course was okay, but I feel it could use some work. For starters:
-I feel some of the longer assignments should be split up into several weeks (the Barnes-Hut one for example, since there's a lot to implement and it took a while to understand conceptually).
-I feel that some parts of the assignment specs could be more clear. For example, in the K-means assignment, it was mentioned to use the "square distance" between the means to determine if the algorithm had converged or not and I feel it would be useful to provide a mathematical formula here (or at least give the name of the formula i.e., Pythagorean).
-I wish there was more focus on making the assignments practical instead of something that's more sophisticated. For example, it would've been nice to have an assignment for week 4 that allowed us to practice implementing a variety of parallelizable data structures and focus on making them as efficient as possible.
Some of the practical examples are a bit tedious, because the bigger issues you sometimes need to solve seem to be implementing a random algorithm, instead of implementing its parallelization per se. That is, the support classes for parallelizing the algorithms are pre-coded for you, while you at times spend more time figuring out how the algorithm itself needs to be implemented with that rather than coming up with these parallelization semaphores (which I would have considered more interesting, at least). But the content covered is highly relevant and first class (the authors being world-leading experts on the topic), so if you are interested in parallel programming, this is course is a great choice.
This was a truly fascinating course! I'm so glad I decided to check out this course immediately after completing Professor Odersky's first 2 courses in the Scala Specialization track. I am an experienced Software developer with quite a bit of experience working with parallelism using imperative languages like Java. However, I must confess that after I've completed this course, I have learnt more than I ever imagined I could in the past 4 weeks. A whole new world has opened up before my very eyes. I have fallen in love with Parallelism in the Functional Programming world, and I feel like rewriting all the imperative code I've ever written using the FP paradigm. The lectures were really informative and there was never a boring moment, but what really stood out were the incredible assignments, which contributed immensely to all these ideas getting etched in my brain. This course definitely has something for newbies as well as experienced developers.
This is not a normal parallel programming about some API codes. In this course details of parallel algorithms and the mathematical part of it is covered like what kind of operation can be used in map reduce. All in all I enjoyed this course very much and learned a great deal from it. I strongly recommend this to everyone who wants to learn the details of parallel programming beyond scala or any other programming language.
Basically the lecture is more focused on the theoretical side of parallel programming, while the programming assignment on the more hands-on problem solving aspects.
I like that. Lectures shouldn't be too lengthy, the research and thinking are best left to the students themselves.
Some complain the programming assignments (especially the Barnes-Hut simulation) are too much trouble, I think it's OK.
Actually I wouldn't mind if it become even harder.
One suggestion, though. I think it would be helpful if the course can provide a summary of programming tips for Scala.
After all, many people come here with a mindset in imperative or OO programming. The conversion to FP can be a bit uneasy.
Parallel Programming course in Scala will help you to program at a higher level, reason about task and data parallel programs, express common algorithms in a functional style and solve them in parallel, competently microbenchmark parallel code, and write programs that effectively use parallel collections to achieve performance. The course content was well organized and it had in - depth assignments which were relatively difficult for me to complete. I would recommend this course to everyone, and one should take it only after taking the 'Fundamental Programming Principles in Scala' and 'Functional Program Design in Scala' courses.
Good course. The only thing I would suggest to improve is in the Assignments, the error messages are not always sufficient information to recreate the bug that caused the error, so it is hard to correct the bug (since if you don't recreate the bug, you don't find the root cause). On the other hand it's understandable, that giving away too much info from the grader makes it easier to "workaround" the failed test without necessarily providing a good solution. Tricky trade-off.
Anyway, both the lecturers do a very good job of explaining fairly complex stuff in ways that non-computer-science students can understand.
Force students to develop the assignment code by TDD, which is very good. All the assignments are not just toy problems, which is excellent as well. If you want to learn some parallel programming algorithms, you do choose this course. The drawbacks may be that some of the concepts or expression in the lectures are obscured. Although the assignments cover almost all the important algorithms and data structures, like UpSweep, DownSweep, reducing tree and combiners, the exercises on these things are not enough.
This is not a course about concurrency with Scala; it has very basic coverage of threads and synchronization towards the beginning, and that's it.
This is about parallelism, specifically about approaches to program design with the goal of leveraging parallelism. Yes, the assignments require immersing oneself in problems that have little to do with parallelism per se. But they are interesting, fun, and of course they nicely illustrate the concepts that are being imparted.
Another excellent course by EPFL.
This course introduces an elegant and practical alternative to purely lock based parallelism by exploiting data & task parallelism intrinsic to many problems. It also emphasizes the mathematical requirements to use such tooling. The course slides/videos provide an good theoretical introduction with short code examples. The (fun ;-) )ctional exercises greatly echo the theoretical course with problems which appear almost effortless to parallelize.
This course analyse the parallel programming from both practical and theoretical point of view. It gives the instruments both to understand the Scala library in its completeness and expressiveness in parallel computing, and the theoretical knowledge to understand what's "under the hood", to allow the student to understand whether the parallelism could be effective or not.
I greatly suggest this course to anyone interested in parallel computing.
This was a great course about parallel programming. I learned a lot and most importantly I learned how to write algorithms that are executed parallel. The topic is not easy and I scratch just the surface, but I have now basic understanding why we use parallel programs, how and when to use them. Thank you to both instructors. Their lectures were very well paced and cover some topic more theoretically in depth. Looking forward to learn more.
Great introduction to parallel programming, excercises help to understand topics covered in the lectures. However, if you want to be an expert and understand every detail, you'll need to go further and look for implementations details of several constructs used in these lectures but I think adding all of the details for this short course would make it much less understandable and bad in overall effect.
Quite advanced for someone with little background in parallel processing. The learning curve is not too steep, though, and the concepts sink in at a steady pace. The assignments are quite interesting as well; they manage to keep them enough real-life to make them interesting while simplifying them enough so learning the concept is not obscured by too much clutter.
All but the last assignment are interesting. A fair amount of the lectures are also good, even though some of them are too theoretical - the bad lectures are the ones that focus too much into proving mathematical properties, but thankfully there is just a few of those.
The last assignment is considerably larger than the other ones and requires a physics background (or interest to do research on your own). I think they could improve it by approaching the material independently with smaller exercises before applying them again into the larger application that is built as part of the assignment today.
Plus: Very in-depth lectures, challenging assignments. Minus: The actual parallel code somewhat remains a black-box, assignments sometimes focus more on figuring out the algorithm logic which may not have anything to do with the course. Still I enjoyed it and learned a great deal.
The tasks are not well designed for online education