CS *253: Parallel Functional Programming with Java and Android CS *253: Parallel Functional Programming with Java and Android Douglas C. Schmidt d.schmidt@vanderbilt.edu Professor of Computer Science School of Engineering Vanderbilt University Times and Location Classroom -- Monday and Wednesday from 8:45-10am in the Engineering Science Building room 44. Final exam time is 7 to 9pm, Saturday, December 18th via Brightspace. Philosophy Developing high quality Java parallel software is hard; developing high quality reusable parallel software is even harder. The principles, methods, and skills required to develop reusable software cannot be learned by generalities. This course therefore teaches students how reusable parallel programs can be designed, implemented, optimized, validated, maintained, and enhanced by applying effective functional and object-oriented development practices, patterns, and frameworks. Prerequisites Proficiency in Java, i.e., as covered in CS 101 Proficiency in software patterns, i.e., as covered in CS 251 Knowledge of email, the Web, and online discussion forums Awareness of--and adherence to--the Vanderbilt University Honor Code that governs all work in this course (e.g. tests, quizzes, homework assignments, etc.), which must be done individually and in a "closed-book" manner (i.e., no outside help, no Internet, etc.) Course Logistics Office Hours and Locations Assignment Deadlines Course FAQ Programming Assignment Process and Submission Guidelines Course Overview Patterns of Learning Synopsis of Course Contents Summary of Course Work Textbook and Recommended Reading Course Videos and Slides By Week All lecture videos for this course will be available on my CS *253 YouTube playlist as they are created. I will also post links to the individual videos and PDF versions of the slides below. Please see this playlist for videos covering foundational Java functional programming features and classes, including lambda expressions, method references, and functional interfaces. Week 1 CS 253 Course Overview and Logistics (Part 1) (MP4|PDF) CS 253 Course Overview and Logistics (Part 2) (MP4|PDF) Overview of Concurrent Programming Concepts (MP4|PDF) Overview of How Concurrent Programs are Developed in Java (MP4|PDF) Walkthrough of Assignment 1a (MP4) Configuring Git for Your Assignments (MP4) Week 2 Overview of Parallel Programming Concepts (MP4|PDF) Overview of How Parallel Programs are Developed in Java (MP4|PDF) History of Java Concurrency and Parallelism Mechanisms (MP4|PDF) Evaluating Java Concurrency and Parallelism Mechanisms (MP4|PDF) Overview of Java Streams (MP4|PDF) Understanding Java Streams Components (MP4|PDF) Visualizaing Java Streams in Action (MP4|PDF) Comparing Java Sequential Streams with Parallel Streams (MP4|PDF) Recognizing Java Streams Benefits (MP4|PDF) Week 3 Overview of SimpleSearchStream Program (MP4|PDF) Visualizing the Word Searcher.findWords() Method (MP4|PDF) Common Java Streams Factory Methods (MP4|PDF) Understanding Java Streams Aggregate Operations (MP4|PDF) Understanding Java Streams Short-Circuit Aggregate Operations (MP4|PDF) Java Streams Intermediate Operations map() & mapToInt() (MP4|PDF) Java Streams Intermediate Operations filter() & flatMap() (MP4|PDF) Overview of Java Streams Terminal Operations (MP4|PDF) The Java Streams forEach() and forEachOrdered() Terminal Operations (MP4|PDF) The Java Streams collect() Terminal Operation (MP4|PDF) The Java Streams reduce() Terminal Operation (MP4|PDF) Contrasting the Java Streams reduce() & collect() Terminal Operations (MP4|PDF) Java Streams Internals: Splitting & Combining (MP4|PDF) Java Stream Internals: Construction (MP4|PDF) Java Stream Internals: Execution (MP4|PDF) Week 4 Walkthrough of Frequently Made Mistakes for Assignment 1a (MP4) Transitioning to Parallelism and Parallel Streams (MP4|PDF) How Java Parallel Streams Work "Under the Hood" (MP4|PDF) Avoiding Programming Hazards with Java Parallel Streams (MP4|PDF) Overview of the Java SearchWithParallelStreams Case Study (MP4|PDF) Visualizing the Java SearchWithParallelStreams Hook Methods (MP4|PDF) Implementing the Java SearchWithParallelStreams Hook Methods (MP4|PDF) Evaluating the Java SearchWithParallelStreams Case Study (MP4|PDF) Java Parallel Streams Internals: Introduction (MP4|PDF) Java Parallel Streams Internals: Splitting, Combining, and Pooling (MP4|PDF) Java Parallel Streams Internals: Order of Processing Overview (MP4|PDF) Java Parallel Streams Internals: Order of Results Overview (MP4|PDF) Java Parallel Streams Internals: Order of Results for Collections (MP4|PDF) Java Parallel Streams Internals: Order of Results for Operations (MP4|PDF) Walkthrough of Assignment 1b (MP4) Week 5 Java Parallel Streams Internals: Partitioning (MP4|PDF) Java Parallel Streams Internals: Demo'ing Spliterator Performance (MP4|PDF) Java Parallel Streams Internals: Parallel Processing w/the Common Fork-Join Pool (MP4|PDF) Java Parallel Streams Internals: Mapping Onto the Common Fork-Join Pool (MP4|PDF) Java Parallel Streams Internals: Configuring the Common Fork-Join Pool (MP4|PDF) Java Parallel Streams Internals: Demo'ing How to Configure the Common Fork-Join Pool (MP4|PDF) Java Parallel Streams Internals: Combining Results Part 1 (MP4|PDF) Java Parallel Streams Internals: Combining Results Part 2 (MP4|PDF) Java Parallel Streams Internals: Non-Concurrent and Concurrent Collectors Part 1 (MP4|PDF) Java Parallel Streams Internals: Non-Concurrent and Concurrent Collectors Part 2 (MP4|PDF) Java Parallel Streams Internals: Demo'ing Collector Performance (MP4|PDF) When to Use Java Parallel Streams (MP4|PDF) When Not to Use Java Parallel Streams (MP4|PDF) Week 6 Walkthrough of Frequently Made Mistakes for Assignment 1B (MP4) Overview of Spring and Spring Boot (MP4|PDF) Overview of Spring Boot Design Patterns (MP4|PDF) Overview of Spring Boot's Internal Architecture (MP4|PDF) Overview of Spring WebMVC (MP4|PDF) The PrimeCheck App Case Study Part 1 (MP4|PDF) The PrimeCheck App Case Study Part 2 (MP4) The PrimeCheck App Case Study Part 3 (MP4) The PrimeCheck App Case Study Part 4 (MP4) Walkthrough of Assignment 2 Part 1 (MP4) Walkthrough of Assignment 2 Part 2 (MP4) Walkthrough of Frequently Made Mistakes for Assignment 2a (MP4) Week 7 Overcoming Limitations with flatMap() for Java Parallel Streams (MP4) Overview of the Java Parallel ImageStreamGang Case Study (MP4|PDF) Understand the Java Parallel ImageStreamGang Structure & Functionality (MP4|PDF) Visualizing the Behaviors of the Java Parallel ImageStreamGang Case Study (MP4|PDF) Learn How to Implement Behaviors in the Java Parallel ImageStreamGang Case Study (MP4|PDF) Walkthrough of the ImageStreamGang Case Study (Part 1) (MP4) Walkthrough of the ImageStreamGang Case Study (Part 2) (MP4) The Flight Listing App (FLApp) Case Study (MP4|PDF) Implementing a Monolithic Flight Listing App using Spring Boot (MP4) Implementing a Mobile Client for the Monolithic Flight Listing App Using Android (MP4) Week 8 Walkthrough of the Frequently Made Mistakes for Assignment 2 (MP4) Overview of Reactive Programming Principles (MP4|PDF) The Structure & Functionality of the Java Completable Futures Framework (MP4|PDF) Mapping Java Completable Future Features Onto Reactive Programming Principles (MP4|PDF) Understanding the Pros & Cons of Synchrony (MP4|PDF) Understanding the Pros & Cons of Asynchrony (MP4|PDF) Overview of Java Futures (MP4|PDF) Visualizing Java Futures in Action (MP4|PDF) Applying Java Futures in Practice (MP4|PDF) Evaluating the Pros and Cons of Java Futures (MP4|PDF) Week 9 How Java CompletableFutures Overcome Limitations with Java Futures (MP4|PDF) Understanding Method Groupings in the Java Completable Futures API (MP4|PDF) Overview of Basic Java CompletableFuture Features (MP4|PDF) Applying Basic Java CompletableFuture Features (MP4|PDF) Advanced Java CompletableFuture Features: Introducing Factory Methods (MP4|PDF) Advanced Java CompletableFuture Features: Applying Factory Methods (MP4|PDF) Advanced Java CompletableFuture Features: Factory Method Internals (MP4|PDF) Advanced Java CompletableFuture Features: Introducting Completion Stage Methods (MP4|PDF) Advanced Java CompletableFuture Features: Grouping Completion Stage Methods (MP4|PDF) Advanced Java CompletableFuture Features: Single Stage Completion Methods (MP4|PDF) Advanced Java CompletableFuture Features: Two Stage Completion Methods (Part 1) (MP4|PDF) Advanced Java CompletableFuture Features: Two Stage Completion Methods (Part 2) (MP4|PDF) Week 10 Walkthrough of Assignment 3 (MP4) Advanced Java CompletableFuture Features: Applying Completion Stage Methods (MP4|PDF) Advanced Java CompletableFuture Features: Handling Runtime Exceptions (Part 1) (MP4|PDF) Advanced Java CompletableFuture Features: Handling Runtime Exceptions (Part 2) (MP4|PDF) Advanced Java CompletableFuture Features: Arbitrary-Arity Methods (MP4|PDF) Advanced Java CompletableFuture Features: Implementing FuturesCollector (MP4|PDF) Walkthrough of the FuturesCollectorIntStream (MP4) Overview of the Java CompletableFuture ImageStreamGang Case Study (MP4|PDF) The Java Completable Future ImageStreamGang Case Study: Applying Completable Futures (MP4|PDF) The Java CompletableFuture ImageStreamGang Case Study: Applying Factory Methods (MP4|PDF) The Java CompletableFuture ImageStreamGang Case Study: Applying Completion Stage Methods (Part 1) (MP4|PDF) The Java CompletableFuture ImageStreamGang Case Study: Applying Completion Stage Methods (Part 2) (MP4|PDF) The Java CompletableFuture ImageStreamGang Case Study: Applying Arbitrary-Arity Methods (MP4|PDF) The Java CompletableFuture ImageStreamGang Case Study: StreamOfFuturesCollector (MP4|PDF) Walkthrough of the ImageStreamCompletableFuture2 Class Implementation (MP4) Week 11 Overview of Reactive Programming Principles (MP4|PDF) Overview of the Java Reactive Streams API (MP4|PDF) Overview of Popular Implementations of the Java Reactive Streams API (MP4|PDF) Mapping Java Reactive Streams onto Reactive Programming Principles (MP4|PDF) Evaluating Java Programming Paradigms (MP4|PDF) Understanding Key Classes in the Project Reactor API (MP4|PDF) Overview of the BigFraction Case Studies (MP4|PDF) Overview of the Project Reactor AsyncTaskBarrier Framework (MP4|PDF) Key Factory Method Operators in the Mono Class (MP4|PDF) Key Transforming Operators in the Mono Class (Part 1) (MP4|PDF) Key Action Operators in the Mono Class (MP4|PDF) Key Suppressing Operators in the Mono Class (Part 1) (MP4|PDF) Applying Key Methods in the Mono Class: Case Study ex1 (MP4|PDF) Key Concurrency & Scheduler Operators in the Mono Class (Part 1) (MP4|PDF) Key Blocking Operators in the Mono Class (MP4|PDF) Key Error Handling Operators in the Mono Class (MP4|PDF) Applying Key Operators in the Mono Class: Case Study ex2 (Part 1) (MP4|PDF) Applying Key Operators in the Mono Class: Case Study ex2 (Part 2) (MP4|PDF) Week 12 Walkthrough of the Frequently Made Mistakes for Assignment 3 (MP4) Key Concurrency & Scheduler Operators in the Mono Class (Part 2) (MP4|PDF) Key Transforming Operators in the Mono Class (Part 2) (MP4|PDF) Key Combining Operators in the Mono Class (MP4|PDF) Key Suppressing Operators in the Mono Class (Part 2) (MP4|PDF) Applying Key Operators in the Mono Class: Case Study ex3 (MP4|PDF) Key Factory Method Operators in the Flux Class (Part 1) (MP4|PDF) Key Transforming Operators in the Flux Class (Part 1) (MP4|PDF) Key Action Operators in the Flux Class (Part 1) (MP4|PDF) Key Combining Operators in the Flux Class (Part 1) (MP4|PDF) Key Terminal Operators in the Flux Class (MP4|PDF) Applying Key Operators in the Flux Class:Case Study ex1 (MP4|PDF) Key Concurrency & Scheduler Operators in the Flux Class (Part 1) (MP4|PDF) Walkthrough of Assignment 4a (MP4) Week 13 Key Factory Method Operators in the Flux Class (Part 2) (MP4|PDF) Key Action Operators in the Flux Class (Part 2) (MP4|PDF) Key Suppressing Operators in the Flux Class (MP4|PDF) Applying Key Operators in the Flux Class: Case Study ex2 (Part 1) (MP4|PDF) Applying Key Operators in the Flux Class: Case Study ex2 (Part 2) (MP4|PDF) Key Factory Method Operators in the Flux Class (Part 3) (MP4|PDF) Key Transforming Operators in the Flux Class (Part 2) (MP4|PDF) Key Concurrency & Scheduler Operators in the Flux Class (Part 2) (MP4|PDF) Key Error Handling Operators in the Flux Class (MP4|PDF) Key Combining Operators in the Flux Class (Part 2) (MP4|PDF) Applying Key Operators in the Flux Class: Case Study ex3 (Part 1) (MP4|PDF) Applying Key Operators in the Flux Class: Case Study ex3 (Part 2) (MP4|PDF) Implementing the AsyncTaskBarrier Framework Using Project Reactor (Part 1) (MP4|PDF) Implementing the AsyncTaskBarrier Framework Using Project Reactor (Part 2) (MP4|PDF) Week 14 Walkthrough of Frequently Made Mistakes for Assignment 4a (MP4) Walkthrough of Assignment 4b (Part 1) (MP4) Walkthrough of Assignment 4b (Part 2) (MP4) Applying Key Operators in Project Reactor: Case Study ex4 (Part 1) (MP4|PDF) Applying Key Operators in Project Reactor: Case Study ex4 (Part 2) (MP4|PDF) Overview of Spring WebFlux (MP4|PDF) Comparing & Contrasting Spring WebMVC & WebFlux (MP4|PDF) Non-Concurrent and Concurrent Collector Performance in Java Sequential and Parallel Streams (Part 1) (MP4) Non-Concurrent and Concurrent Collector Performance in Java Sequential and Parallel Streams (Part 2) (MP4) Walkthrough of Frequently Made Mistakes for Assignment 4b (MP4) Programming Assignments All assignments for this course will be available here as they are created. Back to CS Courses home page.