Functional Design for Java 8
Making Effective Use of Lambdas and More
Although functional programming isn’t remotely new, it has been something of a niche--perhaps even somewhat “academic”--skill for many years. More recently however, the topic has been getting more and more attention because it’s particularly well suited to making the most of modern parallel hardware. In addition, the advent of Java 8 brought syntax that supports and simplifies coding of many key functional programming concepts into what is surely one of the most-used languages of today. Java also gained API features that provide opportunities to use, and benefit from, this style.
While it’s fairly easy to copy and paste workable code into those APIs, and to learn functional syntax for any given language, much greater value comes from understanding the style and how designs flow from it. This course is presented using Java 8’s syntax and new features but is primarily focused on giving you a practical understanding of the deep power of functional programming. However, despite that goal, the course is heavy on understandability and practicality, and light on academic formality.
What you'll learn-and how you can apply it
- Benefits and uses of the function as a first class language citizen:
- Passing functions as parameters to other functions
- Returning functions from a function
- Functions that modify other functions
- Designing software using functions, rather than classes, as minimum units of code reuse
- Benefits and challenges of immutable data and pure functions
- Learn the syntax needed to implement all these ideas in Java 8, even in the face of checked exceptions!
This training course is for you because...
- You’re a Java programmer looking to make use of the features added in Java 8
- You just want to find out a bit about what the “functional fuss” is all about
- You should be comfortable reading code written in the Java programming language, in particular, with the use of interfaces in that language
- You should understand basic software design concepts such as the separation of concerns
OCA Java SE 8 Programmer (1Z0-808) Complete Video Course
Modern Java Collections LiveLesson
- Some practical exercises will be suggested during the course. You’re free to attempt these in any language you choose, but assistance and examples from the instructor (via the slack channel) will be in Java
- Source code repository on github.com will be used to distribute examples and other materials created during the course
About your instructor
Simon started out working as a software engineer, specializing in industrial control systems, and had a sideline teaching for a local University in his then-home-town of Cambridge, England.
In 1995 he joined Sun Microsystems, Inc. as a senior instructor and course developer. Simon spearheaded the introduction of Java training by Sun Microsystems in the U.K. in 1995. He developed the first Java certification exams for Sun before he moved to the U.S. in 1998.
Since leaving Sun in 2004, Simon has developed and delivered training for clients around the world.
Simon believes that training should have an immediate purpose and application, and that the most effective training is usually "on the job" mentoring, helping to remove the immediate roadblocks to productivity that so often plague workers in fast moving environments.
The timeframes are only estimates and may vary according to how the class is progressing
Segment 1 From an OO design pattern to a functional foundation (60mins)
- In this segment we’ll investigate a familiar problem that has a solution that is generally well understood in OO design. We’ll investigate that solution and discover that it’s actually a functional solution. From there we’ll build the foundations of perhaps the most central perspective of functional design.
Break 10 minutes
Segment 2 Building more functional concepts (95mins)
- In this segment we will expand our investigation of our core functional concept, looking at some more object oriented design considerations, and how they lead to functional solutions.
Break at midpoint, 15 minutes
Segment 3 Solidifying Java syntax (40mins)
- In this segment we will shift gears and look at the syntax mechanisms that are provided by Java that support functional approaches. Although the syntax is of course specific to Java 8, discussions of the intent of the syntax will not be.
Break 10 minutes
Segment 4 The power of combinations and modifications (60mins)
- In this segment we will investigate the enormous power that can arise from reusing functional code. As with other design styles, units of code in a functional design can be combined, and can be wrapped so their behavior is altered. And, perhaps more so than in other design styles, the effect of such combinations and modifications can be incredibly powerful. This segment also discovers how functional programming handles Java’s checked exception mechanism.
Break 10 minutes
Segment 5 Working with pure functions (60mins)
- This segment delves into another of functional programming’s core paradigms, one that’s often overlooked because it can seem inconvenient. That is the idea of a pure function. Programming with pure functions can seem a little mind-bending, particularly at first, but there are several benefits that can accrue from them, and even a limited application of the idea can provide many of those benefits in practical systems. During this investigation, we’ll also take a look at several key aspects of Java 8’s new APIs, including the Optional class, and the Streams API.