CS *253: Parallel Functional Programming with Java and Android
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 in classS.
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
- Walkthrough of Assignment 1 (MP4)
- CS 253 Course Overview and Logistics Part 1 (MP4|PDF)
- CS 253 Course Overview and Logistics Part 2 (MP4|PDF)
- CS 253 Course Overview and Logistics Part 3 (MP4|PDF)
- CS 253 Course Overview and Logistics Part 4 (MP4|PDF)
- Overview of Sequential Programming Concepts (MP4|PDF)
- Evaluating Pros and Cons of Sequential Programming (MP4|PDF)
- Week 2
- Overview of Concurrency Concepts (MP4|PDF)
- 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)
- Week 3
- 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 the Java Fork-Join Framework (MP4|PDF)
- The Java ForkJoinPool Class (MP4|PDF)
- The Java ForkJoinTask Class (MP4|PDF)
- Subclasses of the Java ForkJoinTask Superclass (MP4|PDF)
- Preliminary Walkthrough of Frequently Made Mistakes for Assignment 1 (MP4)
- Subclasses of the Java ForkJoinTask Superclass (MP4|PDF)
- Key Methods in the Java ForkJoinPool Class (MP4|PDF)
- Key Methods in the Java ForkJoinTask Superclass (MP4|PDF)
- Key Methods in the Java RecursiveAction and RecursiveTask Subclasses (MP4|PDF)
- Java Fork-Join Framework Internals: Worker Threads (MP4|PDF)
- Java Fork-Join Framework Internals: Work Stealing (MP4|PDF)
- Maximizing Processor Core Utilization with the Java Common Fork-Join Pool (MP4|PDF)
- Walkthrough of Frequently Made Mistakes for Assignment 1 (MP4)
- Week 4
- Overview of the Java Fork-Join Framework ManagedBlocker Interface (MP4|PDF)
- Applying the Java Fork-Join Framework's ManagedBlocker Interface (MP4|PDF)
- Encapsulating the Java Fork-Join Framework's ManagedBlocker Interface (MP4|PDF)
- Summary of (Common) Fork-Join Pool Benefits (MP4|PDF)
- The FileCounter Case Study: Overview (MP4|PDF)
- The FileCounter Case Study: Main Driver Program (MP4|PDF)
- The FileCounter Case Study: FileCounterForkJoinTask (MP4|PDF)
- The FileCounter Case Study: FileCounterSequentialStreamTask (MP4|PDF)
- The FileCounter Case Study: FileCounterParallelStream (MP4|PDF)
- The FileCounter Case Study: Performance and Evaluation (MP4|PDF)
- Walkthrough of Assignment 2 (MP4)
- Overview of Generative Artificial Intelligence & Augmented
Intelligence (AI+) (MP4|PDF)
- Applying AI+ to Enhance Lecture Material and Quiz/Exam
Assessments in Vandy CS Courses (MP4|PDF)
- Applying AI+ to Review Programming Assignment Submissions in
Vandy CS Courses (MP4|PDF)
- Week 5
- Preliminary Walkthrough of Frequently Made Mistakes for Assignment 2 (MP4)
- 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)
- 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)
- The ex45 Case Study: Overview & Utility Classes (MP4|PDF)
- The ex45 Case Study: ex45 Driver Class & Runtime Behavior (MP4|PDF)
- Contrasting Java I/O Streams with Java Streams (MP4|PDF)
- Walkthrough of Frequently Made Mistakes for Assignment 2 (MP4)
- Week 6
- Contrasting Java Streams with Java Collections (MP4|PDF)
- Overview of the SimpleSearchStream Program (MP4|PDF)
- Visualizing the WorkSearcher.findWords() Method (MP4|PDF)
- Common Java Streams Factory Methods (MP4|PDF)
- Understanding Java Streams Overview of Aggregate Operations (MP4|PDF)
- Understanding Java Streams Short-circuit Aggregate Operations (MP4|PDF)
- Java Streams Intermediate Operations map() and mapToInt() (MP4|PDF)
- Java Streams Intermediate Operations filter() and flatMap() (MP4|PDF)
- Java Streams Intermediate Operations dropWhile() and takeWhile() (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 Part 1 (MP4|PDF)
- The Java Streams collect() Terminal Operation Part 2 (MP4|PDF)
- The Java Streams collect() Terminal Operation Part 3 (MP4|PDF)
- The Java Streams reduce() Terminal Operation Part 1 (MP4|PDF)
- The Java Streams reduce() Terminal Operation Part 2 (MP4|PDF)
- Week 7
- Walkthrough of Assignment 3a (MP4)
- Java Streams Intermediate Operation mapMulti() (MP4|PDF)
- Java Parallel Streams Internals: Overcoming Limitations with flatMap() in Parallel Streams (MP4|PDF)
- Optimizing Java Parallel Streams: Overcoming flatMap() Limitations (Part 1) (MP4)
- Optimizing Java Parallel Streams: Overcoming flatMap() Limitations (Part 2) (MP4)
- Optimizing Java Parallel Streams: Overcoming flatMap() Limitations (Part 3) (MP4)
- Contrasting the Java Streams reduce() and collect() Terminal Operations (MP4|PDF)
- Visualizing and Implementing WordSearcher.printResults() (MP4|PDF1|PDF2)
- Visualizing and Implementing WordSearcher.printSuffixSlice() (MP4|PDF1|PDF2)
- Java Streams Internals: Splitting and Combining (MP4|PDF)
- Java Stream Internals: Construction (MP4|PDF)
- Java Stream Internals: Execution (MP4|PDF)
- Understand Java Spliterators (MP4|PDF)
- Applying Java Spliterators (MP4|PDF)
- Understand Java Streams Non-Concurrent Collectors (MP4|PDF)
- Week 8
- Understanding the Java Streams Non-Concurrent Collectors API (MP4|PDF)
- How Pre-Defined Non-Concurrent Collectors are Implemented (MP4|PDF)
- How to Implement Custom Non-Concurrent Collectors (MP4|PDF)
- An Overview of Parallelism and Java Parallel Streams (MP4|PDF)
- How Java Parallel Streams Work "Under the Hood" (MP4|PDF)
- Avoiding Programming Hazards with Java Parallel Streams (MP4|PDF)
- Preliminary Walkthrough of Frequently Made Mistakes for Assignment 3A (MP4)
- Walkthrough of Assignment 3B (MP4)
- Walkthrough of Frequently Made Mistakes for Assignment 3A (MP4)
- 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)
- Applying ChatGPT to Analyze the Performance of Java Streams with
mapMulti() vs. map()/reduce() (MP4)
- Week 9
- 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)
- Assuring the Future of Software Engineering & AI Engineering (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)
- Automating Java Code Refactoring with ChatGPT: Decoupling Timing Logic from Business Logic (MP4)
- Week 10
- 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 Part 1 (MP4|PDF)
- Java Parallel Streams Internals: Demo'ing Collector Performance Part 2 (MP4)
- Java Parallel Streams Internals: Demo'ing Collector Performance Part 3 (MP4)
- Preliminary Walkthrough of Frequently Made Mistakes for Assignment 3A (MP4)
- When to Use Java Parallel Streams (MP4|PDF)
- When Not to Use Java Parallel Streams (MP4|PDF)
- Evaluating the Benefits of Java Parallel Streams (MP4|PDF)
- Evaluating the Limitations of Java Parallel Streams (MP4|PDF)
- 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)
- Walkthrough of Frequently Made Mistakes for Assignment 3B (MP4)
- Walkthrough of Assignment 4 (MP4)
- Week 11
- Understanding the Pros & Cons of Synchrony (MP4|PDF)
- Understanding the Pros & Cons of Asynchrony (MP4|PDF)
- Overview of Java Futures Parts 1 and 2 (MP4|PDF)
- Visualizing and Applying Java Futures (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)
- Week 12
- Advanced Java CompletableFuture Features: Introducting Completion Stage Methods Part 2 (MP4|PDF)
- Advanced Java CompletableFuture Features: Grouping Completion Stage Methods (MP4|PDF)
- 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)
- Preliminary Walkthrough of Frequently Made Mistakes for Assignment 4 Part 1 (MP4)
- Preliminary Walkthrough of Frequently Made Mistakes for Assignment 4 Part 2 (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)
- Evaluating the Pros of the Java Completable Futures Framework (MP4|PDF)
- Evaluating the Cons of the Java Completable Futures Framework (MP4|PDF)
- Week 13
- 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 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)
- Walkthrough of Assignment 5 for CS 253 in the Fall of 2023 (MP4)
- A Potpourri of RxJava Operators for the Observable, Flowable, ParallelFlowable, and Single Classes (MP4|PDF)
- Week 14
- Another Potpourri of RxJava Operators for the Observable Class (MP4|PDF)
- Applying Key Operators in the Observable Class: Case Study ex3 Part 1 (MP4|PDF)
- Preliminary Walkthrough of Frequently Made Mistakes for Assignment 5 (MP4)
- Implementing the AsyncTaskBarrier Framework Using RxJava Part 1 (MP4|PDF)
- Implementing the AsyncTaskBarrier Framework Using RxJava Part 2 (MP4|PDF)
- 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)
- Walkthrough of Frequently Made Mistakes for Assignment 5 (MP4)
- Week 15
- Applying Key Operators in the Flowable Class: Case Study ex2 (MP4|PDF)
- Overview of the Java Parallel ImageStreamGang Case Study (MP4|PDF)
- Walkthrough of the ImageStreamGang Case Study Part 1: Test Driver Program and Performance Comparison (MP4)
- Walkthrough of the ImageStreamGang Case Study Part 2: the Sequential and Parallel Streams Strategies (MP4)
- Walkthrough of the ImageStreamGang Case Study Part 3: the Completable Futures Strategy (MP4)
- Walkthrough of the ImageStreamGang Case Study Part 4: the RxJava Strategy (MP4)
All assignments for this course will be available here
as they are created.
Back to CS Courses home page.