5 days Advanced Training in Java
The objective of this course is to help developers hone in very strong Object-Oriented and Functional Programming Skills using modern Java, to be able to apply automated testing techniques, and overall become better developers on the Java platform. The topics covered include design principles, design patterns, functional programming, and automated testing.
The course has a good balance of interactive lectures and hands-on exercises. The attendees are expected to pair-up and work on the lab exercises. The instructor will assist the attendees as they work in the labs. The objective of the course is for the attendees to gain an in-depth practical knowledge of the concepts so they can put them to immediate use on their real projects.
Code using the functional style in Java and apply style to other languages
Apply new Java 8 concepts
Know when to use imperative vs. functional style
Prudently mix OO and functional concepts
Discover and make good use of the new functional APIs
Good Practices, Principles, and Design Patterns
* SOLID Principles
* Honoring Encapsulation
* Keeping the code DRY
* Following SRP
* Powerful Design Patterns
* Exercises
Programming with Generics
* Using Generics
* Creating Generic Methods
* Creating Generic Classes
* Specifying Parameterized Types
* Generics, covariants, and contravariants
* Generics—things to avoid
* Limitations of Generics
* Exercises
The Next Big Thing in Java
* The evolution of Java
* Major changes in the language
* What’s in it for you?
* Exercises
Starting with Lambda Expressions
* What are Lambda Expressions?
* Why change the way we think and code?
* The paradigm shift
* Benefits of the paradigm shift
* Adapting the functional style of programming
* Exercises
Thinking in Functional Style
* From imperative to functional style
* Change to everyday tasks
* Reading files and listing directories
* Iterating Strings
* Discovering declarative style
* Programming with immutability
* Evolving code in functional style
* Exercises
Using Method References
* Making the code concise and expressive
* When and how to use method references
* Dealing with ambiguity
* Exploring the Comparators
* Using fluent comparisons
* Exercises
Working with Collections
* Iterating lists
* Transforming lists
* Finding elements in a list
* Map and reduce operations on list
* Joining values
* Exercises
Design Patterns in Functional Style
* Change to common OO patterns when adapting functional style
* Patterns native to functional style
* Designing with lambda expressions
Agile Developer, Inc. http://www.agiledeveloper.com
* Using default methods
* Creating fluent interfaces
* Exercises
Function Composition
* Composing with functions
* Expressing problems using function composition
* Performance concerns
* Lazy evaluation
* Intermediate and terminal operations
* Programming with lazy collections
* Exercises
Exploiting Concurrency
* Concurrency as a master switch
* Turning operations into concurrent operations
* Words of caution
* Designing to exploit concurrency
* Exercises
Java 8 Idiomatic Style
* Idioms of
* Declarative Style as First Step
* Function pipeline pattern
* Vertically align dots
* Using Range to iterate
* Treat Lambdas as Glue Code
* Use method references where possible
* Prefer type inference over type specification
* Get used to cascading lambda
* Avoid shared mutability
* Keep lambdas pure
* Exercises
Refactoring to Functional Style
* Transitioning from Imperative Style
* How to approach
* Using range
* Using streams
* Using flatMap
* Using infinite streams
* Exercises
Automated Testing of Functional Style Code
* Functional Programming and Testing Benefits
* Challenges that lambdas and lazy evaluations introduce
* Testing approaches and methods
* Writing Automated Tests
* Type of tests to write
* Checking for exceptions
* Reducing tests without compromising quality
* Dynamic tests
* Exercises
Programmers who are already familiar with Java but are keenly interested in learning about better software development practices, to learn about applying some design patterns, and to get deep understanding of functional programming using Java 8.
Dr. Venkat Subramaniam is an award-winning author, founder of Agile Developer, Inc., creator of agilelearner.com, and an instructional professor at the University of Houston.
He has trained and mentored thousands of software developers in the US, Canada, Europe, and Asia, and is a regularly-invited speaker at several international conferences. Venkat helps his clients effectively apply and succeed with sustainable agile practices on their software projects.
Venkat is a (co)author of multiple technical books, including the 2007 Jolt Productivity