RA
Very relevant concepts, explained beautifully by a very experienced professor. The assignments were good, but they could involve more programming for more practice!

This course teaches learners (industry professionals and students) the fundamental concepts of parallel programming in the context of Java 8. Parallel programming enables developers to use multicore computers to make their applications run faster by using multiple processors at the same time. By the end of this course, you will learn how to use popular parallel Java frameworks (such as ForkJoin, Stream, and Phaser) to write parallel programs for a wide range of multicore platforms including servers, desktops, or mobile devices, while also learning about their theoretical foundations including computation graphs, ideal parallelism, parallel speedup, Amdahl's Law, data races, and determinism. Why take this course? • All computers are multicore computers, so it is important for you to learn how to extend your knowledge of sequential Java programming to multicore parallelism. • Java 7 and Java 8 have introduced new frameworks for parallelism (ForkJoin, Stream) that have significantly changed the paradigms for parallel programming since the early days of Java. • Each of the four modules in the course includes an assigned mini-project that will provide you with the necessary hands-on experience to use the concepts learned in the course on your own, after the course ends. • During the course, you will have online access to the instructor and the mentors to get individualized answers to your questions posted on forums. The desired learning outcomes of this course are as follows: • Theory of parallelism: computation graphs, work, span, ideal parallelism, parallel speedup, Amdahl's Law, data races, and determinism • Task parallelism using Java’s ForkJoin framework • Functional parallelism using Java’s Future and Stream frameworks • Loop-level parallelism with extensions for barriers and iteration grouping (chunking) • Dataflow parallelism using the Phaser framework and data-driven tasks Mastery of these concepts will enable you to immediately apply them in the context of multicore Java programs, and will also provide the foundation for mastering other parallel programming systems that you may encounter in the future (e.g., C++11, OpenMP, .Net Task Parallel Library).

RA
Very relevant concepts, explained beautifully by a very experienced professor. The assignments were good, but they could involve more programming for more practice!
FJ
great course over here it has been great interacting with a simplified course where every complex thing has been narrowed down to easily understandable concepts
JC
Great introduction to parallel programming. Lectures were clear, summaries were helpful, quizzes were not trivial, discussion forum is good, but the assignments' grading system could be improved.
AB
Instructor is awesome. However instead of sharing ready libraries for parallelism (like forall loop) in section 3, native codes should be used for forall loops etc.
AM
Very well structured and presented course! Very useful material with good relevant examples! Thank you, Prof. Sarkar for this Parallel Programming in Java course!
SC
Excellent course, explained difficult topics very well! Would recommend to anyone that needs to understand how to improve complex workflows in Java
KK
Excellent Course.I always wanted a good course on java concurrency and parallel programming.And finish->async, isolated, forAsync constructs are awesome.I have learnt much from this course.
SV
Great course. Introduces Parallel Programming in Java in a gentle way.Kudos to Professor Vivek Sarkar for simplifying complex concepts and presenting them in an elegant manner.
SR
Introduction to theoretical concepts was good, but not very deep. The exercises didn't really contribute much to my understanding of the course material in general.
SP
I found this course very useful. I can see the utilisation of parallel computing in many fields of software development industry. So it's really useful for developers.
QL
The combination of quiz and programming assignment helps understanding the course in a quite nice way. I will finish up the other two courses for sure.
SB
I like the course very much. I am a working software engineer and I believe it will be helpful in my work. Prof Vivek is so clear in explanation and pretty to the point.
Showing: 20 of 264
Practical exercises are not challenging at all. Some require changing 1 or 2 lines of code. Also, exercises are hard to test locally. Sometimes they fail on the student's machine and pass when submitted.
I don't understand why we used PCPD library, lessons should focus on Java API.
I enrolled in this specific course (not in the whole specialization). Later It turned out that you are not allowed to submit code if you have an unpaid subscription. Fine, I decided to pay for it. After all, someone invested his time in creating the course. Then, for some reason, I have got a subscription for the whole program, not a single course. I did not realize that and got charged the second time after the first month past. But okay, probably I did not understand the whole procedure around it.
BUT...
The amount of information is very small. For 42 Euro you get few lectures and few quite basic exercises.
In most of the tasks you need o write only a couple of lines of code. The evaluation is not reliable. You can do your task right way, but it will not pass test from the first time and you are not sure if your are doing something wrong or what is the reason of the failure. Then you just resubmit the same code and after second, third or fourth time it suddenly works.
I can understand that in concurrent environment sometimes it is hard to achieve stable performance.
All together this leads to a bad experience. It is not the quality I've got used to when watching other courses here. Not worth its money. It is better to buy a book or the same amount.
Unfortunately course designed very poorly.
While lectures generally are good, there are not enough of materials. I'm sorry to say, but programming assignments are bad. Forum is full of posts like "Grader grades the same file for 100 and 50 points". Teaching stuff reacts on this like, quote:
"Hi Anton, I may have missed it but I don't see a question in your text? Is there something I can help with?"
Yes, dear teaching stuff, you can help not only Anton, but all of us. Take a look at Parallel Programming Using Scala, here, on Coursera. Their grader is stable, and apparently there is a well-known, common way of reaching the stable state of JVM using testing frameworks. They measure performance after stable state is reached.
Also, it is not clear what is actually the topic of this course? Parallel programming? No. There is almost nothing to do with common parallel programming. No info about hardware, schedulers, operating systems, JVM. Java? Also no, there is no information on language, its specific parts, its implementation for threads, no words are said about JVM, actually JVM event wasn't mentioned. So, then, what is this course about? I may say this course "A good introduction to parallel programming".
I hope the next course in this specialization will get much better.
Please make the course more difficult.
You will most likely learn something new about parallel programming in Java. You will also learn how to analyse and optimise your parallel execution tasks based on computational graphs, critical paths, amount of work, speedup and other essential parameters.
I have never known these things existed and changed my perspective how to take advantage of multiple processor. I have used numpy in python but now I know how these are fast.
I just want to suggest that , their should be a solution of each assignment as well , where the instructor will explain it , and it will be only unlocked when the student has submitted its assignment and passed it .
This is a very good course for anyone who has experience in java and wants to understand parallel programming. Course design is really good. Course brushed up some of concepts I have learnt in college years and added hands on experience with new java apis that I haven't used yet. Overall This course has improved my ability of thinking in parallel way of programming..!!
Dear Coursera and Rice University team, thank you for this course.
Being a PhD student at Nazarbayev University (Astana, Kazakhstan) at Department of Electrical and Computer Engineering I found answers for lots of my questions about parallel programming and also new direction that I should move on.
I like the course very much. I am a working software engineer and I believe it will be helpful in my work. Prof Vivek is so clear in explanation and pretty to the point.
It was actually quite fun. I particularly enjoyed the Two Sigma interviews, which gave me a better understanding about how the course concepts are applied in business.
The expected time for mini-projects is extremely overestimated. In weeks 3 and 4 it takes about 5 minutes to complete the mini-project if you watch the video lectures carefully. Consequently, it does not feel like I am learning a lot if I don't have to do much coding.
For me, it would be more interesting and challenging to implement some internal low-level functionality of the PCDP library instead of blindly using it. Let's be realistic, I am unlikely to use PCDP directly in my career, so it would make more sense to understand how things are built on the lower level.
A good place to start. Fundamental parallel programming concepts taught in a simple manner. Liked the quiz and demo projects.
While i've definitely learned something new, there are some frustration points:
> Material presentation and abuse of pseudo code. Some concepts presented at very high abstraction level without going into details of implementation. Part of course relay heavily on custom parallel programming library, writing in java while other parts are given in built-in Java framework. In lecture summary code is presented as pseudo code, so there are not way to run and see that it does.
> Length of the course. Most of weeks has about 30 minutes of videos in total.
> Issues with grader. Grader is not reliable, you can find that same code sent twice will result in fail and pass. Also, when running test locally, it may fail, while passing when send for real (in my case it was because test code from assignment incorrectly gave number of processes when hyper-threading is enabled)
> Easy exercises. Apart from grader issues, assignment itself do not gave any challenge. Assignment of one week can be passed by just changing signature of method to right one (literally just few characters change)
This course does teach a lot, gives a lot of breadth. It was really easy, one week barely took me 4-5 hours to complete. The exercises were too easy. I wish some theoretical knowloedge was shared and then java was used to build on those concepts. This course is also a little confusing, I think a person without any prior knowledge would be lost here. Especally, how RecursiveTask is introduced.
It is not medium level course. Seems beginner for me
The covered material is useful, but the presentation is... well, not so nice. The professor writes with a pen on a glass board, and his handwriting is a catastrophe (it's not about individual letters, but the way he clutters up space in a completely unorganized way), and on top of that it slows down the delivery. So I ended up just reading the summaries and watching the demonstration videos and only referring to the videos when needed.
The mini projects are way too easy in my opinion, though useful.
But my main criticism is that the course's title is "Parallel Programming in Java." However, the course doesn't teach you the Java API, which it definitely should. It recommends using RecursiveTask from the Fork/Join framework to implement a future, which is kinda stupid. It certainly works, but if you do it in real life, it immediately exposes you as ignorant of Java's API. No mentioning of Executors whatsoever. Doesn't teach you how you can distinguish the number of logical and physical cores, and indeed the provided unit tests are all such that you can get 100% from the Coursera grader, which uses 4 tasks, but will let you fail if you run it on an octacore AMD Ryzen 7 with 16 threads, because it unrealistically (for CPU-bound tasks) expects almost 16-fold speedup from your parallelized solutions. In the end, you're left wondering if it is better to construct a ForkJoinPool yourself or to use the commonPool(), or whether you should call submitAll() or fork(), or whether you should construct your Phaser with 0, 1 or the number of tasks, and what the difference between awaitAdvance and awaitPhase might be, instead of leading by example and showing you a clean use of the API. On top of that, it introduces you to Rice's HPDP (or something like that) library... That's cute (and to be fair, the libary seems quite useful and elegant), but it's not really what people come here for.
I can say that I learned something from this course, but I would not have wanted to pay for the course if it wasn't included in Coursera Plus.
Not sure it deserves the money, YouTube has more content, but I love the prof dress
Excellent introduction to parallel programming in Java. Professor Sarkar is very clear and detailed in his lectures. The quizzes are challenging but not overly difficult. The projects are very straightforward and the video demonstrations are very helpful. Professor Sarkar and the teaching assistants were very active in the forum, helping to answer questions, clarifying concepts, and resolving issues.
One area for improvement is the automated testing grader of the projects. The projects are graded on percentage speedup of your parallelized code, but sometimes they would pass locally while not pass on the testing server. Then I just had to keep submitting the same code over and over again until the tests finally all pass. It's nice the number of times you can submit is unlimited, but having to submit the same code just to pass a certain speedup threshold is not the best use of time.
Overall, I learned a great deal, and appreciate all of the hard work that went behind putting together a course like this. Highly recommended!
The course is very well organized and teaches up-to-date techniques for Java parallelization. The material that is covered in this course can be used immediately for Java programmers. The instructor organized the videos so that each video is short and covers one point. His examples show the value of what is being taught and how to apply what is being taught. Every video also comes with a summary of "this is what you should have learned from this video". If you missed any details or didn't understand it, the video summary was very helpful for me. I highly recommend this course for an introduction to parallel programming.