CS *253: Parallel Functional Programming with Java, Android, and Spring WebFlux
Times and Location
- Classroom -- Monday and Wednesday from 8:40-9:55am in the Engineering Science Building room 48.
- Final exam time is 9am to noon, Saturday, December 16th via Brightspace.
Philosophy
Developing high quality Java parallel software is hard; developing
high quality reusable parallel software is even harder,
especially in a networked microservices environment. 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
object-oriented, functional, and reactive development practices,
patterns, and frameworks.
Prerequisites
- Proficiency in Java, i.e., as covered in CS 1101
- Proficiency in software patterns, i.e., as covered in CS 3251
- 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
Course Overview
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)
- Overview of Sequential Programming Concepts (MP4|PDF)
- Evaluating Pros and Cons of Sequential Programming (MP4|PDF)
- Overview of Concurrency Concepts (MP4|PDF)
- Week 2
- How Concurrent Programs are Developed in Java Part 1 (MP4|PDF)
- How Concurrent Programs are Developed in Java Part 2 (MP4|PDF)
- Overview of Java Concurrency Hazards (MP4|PDF)
- The History of Concurrency Support in Java (MP4|PDF)
- Overview of Parallel Programming Concepts (MP4|PDF)
- How Parallel Programs are Developed in Java Part 1 (MP4|PDF)
- How Parallel Programs are Developed in Java Part 2 (MP4|PDF)
- How Parallel Programs are Developed in Java Part 3 (MP4|PDF)
- When to Apply Parallelism in Practice (MP4|PDF)
- History of Java Parallelism Mechanisms (MP4|PDF)
- Evaluating Java Concurrency and Parallelism Mechanisms (MP4|PDF)
- Overview of Java Streams (MP4|PDF)
- Overview of Java Streams Phases (MP4|PDF)
- Understanding Java Streams Common Creation Operations (MP4|PDF)
- Understanding Java Streams Common Aggregate Operations (MP4|PDF)
- Week 3
- Visualizing Java Streams in Action (MP4|PDF)
- Comparing Java Sequential Streams with Parallel Streams (MP4|PDF)
- Common Programming Hazards with Java Parallel Streams (MP4|PDF)
- Recognizing Java Streams Benefits (MP4|PDF)
- Contrasting Java I/O Streams with Java Streams (MP4|PDF)
- Contrasting Java Collections with Java Streams (MP4|PDF)
- Contrasting Java Streams with Other Technologies (MP4|PDF)
- Overview of SimpleSearchStream Program (MP4|PDF)
- Visualizing the Word Searcher.findWords() Method (MP4|PDF)
- Common Java Streams Factory Methods (MP4|PDF)
- Other 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)
- Walkthrough of Frequently Made Mistakes for Assignment 1a (MP4)
- Week 4
- Java Streams Intermediate Operations filter() & flatMap() (MP4|PDF)
- Exploring the Limitations of flatMap() for Java Parallel Streams (MP4)
- Overview of Java Streams Terminal Operations (MP4|PDF)
- The Java Streams forEach() and forEachOrdered() Terminal Operations (MP4|PDF)
- The Java Streams collect() Terminal Operation Part 1 (MP4|PDF)
- The Java Streams collect() Terminal Operation Part 2 (MP4|PDF)
- The Java Streams reduce() Terminal Operation Part 1 (MP4|PDF)
- The Java Streams reduce() Terminal Operation Part 2 (MP4|PDF)
- Walkthrough of Assignment 1b (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)
- Week 5
- The Java Streams reduce() Terminal Operation Part 3 (MP4|PDF)
- The Java Streams reduce() Terminal Operation Part 4 (MP4)
- Java Stream Internals: Construction (MP4|PDF)
- Java Stream Internals: Execution (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 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: Overview (MP4|PDF)
- The PrimeCheck App Case Study: Server Structure & Functionality
(MP4|PDF)
- The PrimeCheck App Case Study: Implementing the Server Components
(MP4|PDF)
- The PrimeCheck App Case Study: Structure and Functionality of the Client
(MP4|PDF)
- The PrimeCheck App Case Study: Implementing the Client
(MP4|PDF)
- The PrimeCheck App Case Study: Test Driver Implementation and Performance
(MP4|PDF)
- Walkthrough of Assignment 2 Part 1: the Server (MP4)
- Walkthrough of Assignment 2 Part 2: the Client (MP4)
- Week 6
- 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 Part 1 (MP4|PDF)
- Java Parallel Streams Internals: Parallel Processing w/the Common Fork-Join Pool Part 2 (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)
- Common Problems with Using the reduce() Terminal Operations in Java Parallel Streams (MP4)
- 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)
- Week 7
- Concurrent vs. Non-Concurrent Set Collectors for Java Sequential and Parallel Streams Part 1 (MP4)
- Concurrent vs. Non-Concurrent Set Collectors for Java Sequential and Parallel Streams Part 2 (MP4)
- Java Parallel Streams Internals: Implementing a Concurrent Map Collector (MP4|PDF)
- Concurrent vs. Non-Concurrent Map Collectors for Java Sequential and Parallel Streams Part 1 (MP4)
- Concurrent vs. Non-Concurrent Map Collectors for Java Sequential and Parallel Streams Part 2 (MP4)
- When to Use Java Parallel Streams (MP4|PDF)
- When Not to Use Java Parallel Streams (MP4|PDF)
- Applying Java Sequential and Parallel Streams to Count Folders,
Documents, and Bytes in a Directory (MP4)
- Overview of the Java SearchWithParallelSpliterator Case Study (MP4|PDF)
- Java SearchWithParallelSpliterator PhraseMatchSpliterator & Fields (MP4|PDF)
- Java SearchWithParallelSpliterator PhraseMatchSpliterator Constructor & tryAdvance() Method (MP4|PDF)
- Java SearchWithParallelSpliterator PhraseMatchSpliterator trySplit() Method (MP4|PDF)
- Evaluating the Java SearchWithParallelSpliterator Case Study (MP4|PDF)
- Walkthrough of Frequently Made Mistakes for Assignment 2 (MP4)
- Week 8
- Overview of the Java Parallel ImageStreamGang Case Study (MP4|PDF)
- Patterns Applied in the Java Parallel ImageStreamGang Case Study (MP4|PDF)
- Understanding the Java Parallel ImageStreamGang Structure (MP4|PDF)
- Visualizing the Behaviors of the Java Parallel ImageStreamGang Case Study (MP4|PDF)
- Implementing Behaviors in the Java Parallel ImageStreamGang Case Study (MP4|PDF)
- Evaluating the Java Parallel ImageStreamGang Case Study (MP4|PDF)
- Walkthrough of Assignment 3 (MP4)
- End-to-End Java Exception Handling with Spring MVC Microservices and Android (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)
- Week 9
- 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)
- How Java CompletableFutures Overcome Limitations with Java Futures (MP4|PDF)
- Understanding Method Groupings in the Java Completable Futures API Part 1 (MP4|PDF)
- Understanding Method Groupings in the Java Completable Futures API Part 2 (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 Part 1 (MP4|PDF)
- Advanced Java CompletableFuture Features: Introducting Completion Stage Methods Part 2 (MP4|PDF)
- Advanced Java CompletableFuture Features: Grouping Completion Stage Methods (MP4|PDF)
- Week 10
- Advanced Java CompletableFuture Features: Single Stage Completion Methods Part 1 (MP4|PDF)
- Advanced Java CompletableFuture Features: Single Stage Completion Methods Part 1 (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)
- Advanced Java CompletableFuture Features: Applying Completion Stage Methods Part 1 (MP4|PDF)
- Advanced Java CompletableFuture Features: Applying Completion Stage Methods Part 2 (MP4|PDF)
- Advanced Java CompletableFuture Features: Handling Runtime Exceptions Part 1 (MP4|PDF)
- Advanced Java CompletableFuture Features: Handling Runtime Exceptions Part 2 (MP4|PDF)
- Walkthrough of Frequently Made Mistakes for Assignment 3 (MP4)
- Advanced Java CompletableFuture Features: Arbitrary-Arity Methods (MP4|PDF)
- Advanced Java CompletableFuture Features: Designing the FuturesCollector Class (MP4|PDF)
- Advanced Java CompletableFuture Features: Implementing the FuturesCollector Class (MP4|PDF)
- 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)
- Week 11
- The Java CompletableFuture ImageStreamGang Case Study: Applying Arbitrary-Arity Methods (MP4|PDF)
- The Java CompletableFuture ImageStreamGang Case Study: StreamOfFuturesCollector (MP4|PDF)
- Evaluating the Pros of the Java Completable Futures Framework (MP4|PDF)
- Evaluating the Cons of the Java Completable Futures Framework (MP4|PDF)
- Enhancements to the Java Completable Futures Framework (MP4|PDF)
- 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)
- Walkthrough of Assignment 4a (MP4)
- Week 12
- Understanding Key Classes in the RxJava API (MP4|PDF)
- Overview of the BigFraction Case Studies (MP4|PDF)
- Overview of the RxJava AsyncTaskBarrier Framework (MP4|PDF)
- Key Factory Method Operators in the Observable Class Part 1 (MP4|PDF)
- Key Transforming Operators in the Observable Class Part 1 (MP4|PDF)
- Key Action Operators in the Observable Class Part 1 (MP4|PDF)
- Key Combining Operators in the Observable Class Part 1 (MP4|PDF)
- Key Terminal Operators in the Observable Class Part 1 (MP4|PDF)
- Applying Key Operators in the Observable Class: Case Study ex2 Part 1 (MP4|PDF)
- Key Concurrency & Scheduler Operators in the Observable Class Part 1 (MP4|PDF)
- Key Factory Method Operators in the Observable Class Part 2 (MP4|PDF)
- Key Action Operators in the Observable Class Part 2 (MP4|PDF)
- Key Suppressing Operators in the Observable Class Part 1 (MP4|PDF)
- Key Terminal Operators in the Observable Class Part 2 (MP4|PDF)
- Applying Key Operators in the Observable Class: Case Study ex2 Part 1 (MP4|PDF)
- Applying Key Operators in the Observable Class: Case Study ex2 Part 2 (MP4|PDF)
- Week 13
- Initial Walkthrough of Frequently Made Mistakes for Assignment 4a (MP4)
- Key Factory Method Operators in the Observable Class Part 3 (MP4|PDF)
- Key Transforming Operators in the Observable Class Part 2 (MP4|PDF)
- Key Transforming Operators in the Observable Class Part 3 (MP4|PDF)
- Key Scheduler Operators in the Observable Class Part 2 (MP4|PDF)
- Key Error Handling Operators in the Observable Class (MP4|PDF)
- Key Combining Operators in the Observable Class Part 2 (MP4|PDF
- Key Combining Operators in the Observable Class Part 3 (MP4|PDF)
- Applying Key Operators in the Observable Class: Case Study ex3 Part 1 (MP4|PDF)
- Applying Key Operators in the Observable Class: Case Study ex3 Part 2 (MP4|PDF)
- Walkthrough of Assignment 4b (MP4)
- Walkthrough of Frequently Made Mistakes for Assignment 4a (MP4)
- Week 14
- Overview of the Flowable Class (MP4|PDF)
- Key Factory Method Operators in the Flowable Class Part 1 (MP4|PDF)
- Applying Key Operators in the Flowable Class: Case Study ex1 (MP4|PDF)
- Key Factory Method Operators in the Flowable Class Part 2 (MP4|PDF)
- Applying Key Operators in the Flowable Class: Case Study ex2 (MP4|PDF)
- Overview of the ParallelFlowable Class (MP4|PDF)
- Applying Key Operators in the Flowable Class: Case Study ex3 (MP4|PDF)
- Key Scheduler Operators for RxJava Reactive Types Part 3 (MP4|PDF)
- Applying Key Operators in the Flowable Class: Case Study ex4 (MP4|PDF)
- Applying Key Operators in the Observable Class: Case Study ex4 part 1 (MP4|PDF)
- Applying Key Operators in RxJava: Case Study ex4 part 2 (MP4|PDF)
- Week 15
- Java Platform Threads vs. Virtual Threads (MP4|PDF)
- Applying Java Platform Threads and Virtual Threads: Case Study ex1 (MP4|PDF)
- Overview of Java Structured Concurrency (MP4|PDF)
- Programming with Java Structured Concurrency (MP4|PDF)
- Applying Java Structured Concurrency: Case Study ex2 (MP4|PDF)
- Applying Java Structured Concurrency: Case Study ex3 (MP4|PDF)
- Applying Java Structured Concurrency: Case Study ex4 Part 1 (MP4|PDF)
- Applying Java Structured Concurrency: Case Study ex4 Part 2 (MP4|PDF)
- Applying Java Structured Concurrency: Case Study ex4 Part 3 (MP4|PDF)
- Walkthrough of Frequently Made Mistakes for Assignment 4b (MP4)
All assignments for this course will be available here
as they are created.
Back to CS Courses home page.