Online Course – Certified Professional Internship in Parallel Programming in Java from Google and Rice University

Improve your programming expertise with parallelism. Learn the fundamentals of parallel, concurrent, and distributed programming.

Suggested by: Coursera (What is Coursera?)

Professional Certificate

Intermediate level

No prior knowledge required

Time to complete the course

7-day free trial

No unnecessary risks

Skills you will acquire in the course

  • Communication skills
  • Time management
  • Critical thinking
  • Teamwork
  • Troubleshooting
  • leadership
  • Presentation skills
  • Independent learning ability
  • project management
  • Technological skills

What you will learn in the course

Courses for which the course is suitable

  • Software Engineer
  • Software developer
  • Parallel systems developer
  • Distributed systems developer
  • Multi-threaded programming expert
  • Cloud Application Developer
  • Biomed Solutions Developer
  • Financial Services Developer

Internship – a series of 3-unit courses

  • Parallel programming, concurrent programming, and distributed programming form the basis of software in a variety of fields, from biomedical research to financial services.
  • This specialization is intended for anyone who has basic knowledge of serial programming in Java, and is interested in learning how to write parallel, concurrent, and distributed programs.
  • Through a collection of three courses (which can be taken in any order or separately), you will learn basic topics in the fields of concurrency, concurrency, and distribution.
  • These courses prepared you for multi-threaded and distributed programming on a wide range of computing platforms, from mobile devices to cloud computing servers.

To see a summary video about this internship, click here .

For an interview with two early-career software engineers about the relevance of parallel computing to their work, click here .

Gratitude

  • The instructor, Prof. Vivek Sarkar, would like to thank Dr. Max Grossman for his contributions to the mini-projects and course material.
  • To Dr. Zoran Budimlik for his contributions to the exam questions.
  • To Dr. Max Grossman and Dr. Shams Imam for their contributions to the PCDP pedagogical library which was used in several of the mini-projects.
  • And to all the members of the Rice Online team who contributed to the development of the course content (including Martin Kelby, Anthet Hawai, Seth Tiger, and Chong Zhu).

Hands-on Learning Project

  • Each course includes mini-projects that will allow learners to gain hands-on experience with popular Java APIs for parallel, concurrent, and distributed programming.
  • The mini-projects were taken from real-world problems in a variety of fields.

Details of the courses that make up the specialization

Parallel programming in Java

Course 1

  • 19 hours
  • 4.6 (1,205 ratings)

Course Details

What you’ll learn

This course teaches industry professionals and students the fundamental concepts of parallel programming in the context of Java 8. Parallel programming allows developers to take advantage of multi-core computers to speed up application performance by using multiple processors simultaneously. By the end of the course, you will know how to use popular parallel programming frameworks in Java (such as ForkJoin, Stream, and Phaser) to write parallel programs for a wide range of multi-core platforms, including servers, desktops, and mobile devices, and you will also learn about their theoretical foundations, including computational graphs, ideal parallelism, parallel speedup, Amadel’s law, information races, and determinism.

Why should you take this course?
  • All computers are multi-core computers, so it is important that you learn how to extend your knowledge of sequential programming to Java.
  • Java 7 and Java 8 introduced new parallel programming frameworks (ForkJoin, Stream) that significantly changed the paradigms of parallel programming since the early decades of Java.
  • Each of the four modules in the course has a designated miniature project, which will give you useful practical experience to apply the concepts learned after completing the course.
  • During the course, you will need online access to the instructor and mentors to receive personalized answers to your questions in the forums.
The desired learning outcomes of the course include:
  • Parallelism theory: computational graphs, work, range, ideal parallelism, parallel speedup, Amadel’s law, information races, and determinism
  • Task Concurrency Using Java’s ForkJoin Framework
  • Functional Concurrency Using Java’s Future and Stream Frameworks
  • Loop-level parallelism with extensions for checkpoints and iteration chunking
  • Datastream parallelism using the Phaser framework and data-driven tasks

Mastering these concepts will allow you to immediately apply them in the context of multi-core Java programs, and will also provide the foundation for mastering other parallel programming frameworks that you will benefit from in the future (such as C++11, OpenMP, .Net Task Parallel Library).

Skills you will acquire
  • Category: Data stream
  • Category: Parallel Programming
  • Category: Java Methodology

Synchronous programming in Java

Course 2

  • 18 hours
  • 4.5 (655 ratings)

Course Details

What you’ll learn

This course teaches industry professionals and students the fundamental concepts of synchronized programming in the context of Java 8. Synchronized programming allows developers to effectively and correctly manage the use of shared resources in concurrent programs. By the end of the course, you will know how to use basic synchronization constructs in Java such as processes (threads), locks, critical sections, atomic variables, isolation, actor models, optimistic synchronization, and synchronized collections, as well as their theoretical foundations (such as progress guarantees, deadlocks, livelocks, starvation, and linearizability).

Why should you take this course?
  • It is important to be aware of the theoretical foundations of synchronization to avoid common but subtle programming mistakes.
  • Java 8 has updated most of the synchronization constructs since the early days of processes and locks.
  • During the course, you will need online access to the instructor and mentors to receive personalized answers to your questions in the forums.
  • Each of the four modules in the course has a designated miniature project, which will give you useful practical experience to apply the concepts learned after completing the course.
The desired learning outcomes of the course include:
  • Synchronization Theory: Progress Guarantees, Deadlock, Livelock, Starvation, Linearizability
  • Using processes and locks in an ordered/unordered configuration in Java
  • Atomic variables and isolation
  • Optimistic synchronization and synchronized collections in Java (such as synchronized queues, synchronized hashmaps)
  • Player model in Java

Mastering these concepts will allow you to immediately apply them in the context of synchronized Java programs, and will help you master other synchronized programming systems that you will benefit from in the future (such as POSIX threads, .NET threads).

Skills you will acquire
  • Category: Synchronization (Computer Science)
  • Category: Actor Model
  • Category: Optimistic synchronization control
  • Category: Synchronous Programming

Distributed programming in Java

Course 3

  • 17 hours
  • 4.5 (489 ratings)

Course Details

What you’ll learn

This course teaches industry professionals and students the fundamental concepts of distributed programming in the context of Java 8. Distributed programming allows developers to use multiple nodes in a data center to increase throughput and reduce latency for selected applications. By the end of the course, you will know how to use popular distributed programming frameworks for Java programs, including Hadoop, Spark, Sockets, Remote Method Invocation (RMI), Multicast Sockets, Kafka, Message Passing Interface (MPI), as well as various approaches to combining distributed work with multithreaded programming.

Why should you take this course?
  • All servers in data centers are organized as collections of distributed servers, and it is also important to learn how to use multiple servers to increase bandwidth and reduce latency.
  • In addition to learning specific frameworks for distributed programming, the course will teach you how to combine multi-core parallelism and distributed programming in a unified approach.
  • Each of the four modules in the course has a designated miniature project, which will give you useful practical experience to apply the concepts learned after completing the course.
  • During the course, you will need online access to the instructor and mentors to receive personalized answers to your questions in the forums.
The desired learning outcomes of the course include:
  • Distributed Map-Reduce programming in Java using Hadoop and Spark frameworks
  • Client-server programming using Java Socket and Remote Method Invocation (RMI) interfaces
  • Message Passing Programming Using Message Passing Interface (MPI) in Java
  • Approaches to integrate work distribution with multi-process programming, including processes and processes, distributed actors, and reactive programming

Mastering these concepts will allow you to immediately apply them in the context of distributed Java programs, and will also provide the foundation for mastering other distributed programming systems you will encounter in the future (such as Scala or C++).

Skills you will acquire
  • Category: Distributed Programming
  • Category: Actor Model
  • Category: Parallel Programming
  • Category: Reactive Programming