SlideShare a Scribd company logo
1 of 69
Download to read offline
By Sander Mak
Coding Your Way
@Sander_Mak
to Java 12
About Sander
Fellow, Software Architect
@ Luminis
Experience in modular
development stacks
Conference Speaker & Author
@Sander_Mak
Java
9
(Sept. 2017)
@Sander_Mak
Quick Java Module Overview
@Sander_Mak
module main {
}
module-info.java
Module Declarations
@Sander_Mak
module main {
}
module-info.java
Module Declarations
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module-info.java
module helper {
}
module-info.java
Explicit Dependencies
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module-info.java
module helper {
}
module-info.java
helper
Explicit Dependencies
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module helper {
exports helper.api;
}
module-info.java module-info.java
helper.api
helper
Well-defined Interfaces
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module helper {
exports helper.api;
}
module-info.java module-info.java
helper.api
helper.impl
helper
Strong Encapsulation
main.web
main.persistence
main.integration
main
@Sander_Mak
Demo: EasyText
easytext.cli
easytext.analysis
@Sander_Mak
Why?
@Sander_Mak
Why?
Modular JDK
@Sander_Mak
Why?
Modular JDK
Maintainability
Reliable composition
Flexibility
@Sander_Mak
quick refresher
why/advantages
(JDK: modularized, your app: architecture from whiteboard to code, explicit dependencies in language, strong encapsulation, jlink
Why?
Decrease the model-code gap
@Sander_Mak
jlink
@Sander_Mak
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb
@Sander_Mak
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb JVM
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
~25mb
@Sander_Mak
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb JVM
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
@Sander_Mak
IoT Device
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb JVM
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
@Sander_Mak
Impact on Java 8 codebases
@Sander_Mak
Impact on Java 8 codebases
Use of encapsulated JDK types:
Run-time warnings
Compile-time errors
@Sander_Mak
Impact on Java 8 codebases
Use of encapsulated JDK types:
Run-time warnings
Compile-time errors
Use of enterprise APIs in JDK:
Won't resolve by default
Gone in Java 11!
java.corba
java.xml.bind
java.xml.ws.*
java.activation
java.transaction
@Sander_Mak
R
jshell
E
P
L
@Sander_Mak
R
jshell
E
P
L
ead
@Sander_Mak
R
jshell
E
P
L
ead
val
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
Input code
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
Input code
Run code
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
Input code
Run code
See results
@Sander_Mak
R
jshell
E
P
L
ead
val
rint
oop
Input code
Run code
See results
Iteratively refine
@Sander_Mak
jshell
DEMO
@Sander_Mak
Collection Factory Methods
@Sander_Mak
List<String> books = new ArrayList<>();
books.add("Java 9 Modularity");
books.add("Designing Data-Intensive Applications");
books.add("Java 8 Lambdas");
Collection Factory Methods
@Sander_Mak
Collection Factory Methods
List<String> books = List.of("Java 9 Modularity",
"Designing Data-Intensive Applications",
"Java 8 Lambdas");
@Sander_Mak
Collection Factory Methods
List<String> books = List.of("Java 9 Modularity",
"Designing Data-Intensive Applications",
"Java 8 Lambdas");
Set.of Map.of
@Sander_Mak
Java
10
(March 2018)
@Sander_Mak
var
@Sander_Mak
var
String name = "Sander";
@Sander_Mak
var
String name = "Sander";
public void aMethod() {
String name = "Sander";
}
@Sander_Mak
var
String name = "Sander";
public void aMethod() {
String name = "Sander";
}
public void aMethod() {
var name = "Sander";
}
@Sander_Mak
var
URL url = new URL("https://javamodularity.com");
URLConnection connection = url.openConnection();
BufferedInputStream inputStream =
new BufferedInputStream(connection.getInputStream());
@Sander_Mak
var
URL url = new URL("https://javamodularity.com");
URLConnection connection = url.openConnection();
BufferedInputStream inputStream =
new BufferedInputStream(connection.getInputStream());
var bookurl = new URL("https://javamodularity.com");
var connection = bookurl.openConnection();
var bookStream = new BufferedInputStream(connection.getInputStream());
@Sander_Mak
var
URL url = new URL("https://javamodularity.com");
URLConnection connection = url.openConnection();
BufferedInputStream inputStream =
new BufferedInputStream(connection.getInputStream());
var bookurl = new URL("https://javamodularity.com");
var connection = bookurl.openConnection();
var bookStream = new BufferedInputStream(connection.getInputStream());
@Sander_Mak
var
URL url = new URL("https://javamodularity.com");
URLConnection connection = url.openConnection();
BufferedInputStream inputStream =
new BufferedInputStream(connection.getInputStream());
var bookurl = new URL("https://javamodularity.com");
var connection = bookurl.openConnection();
var bookStream = new BufferedInputStream(connection.getInputStream());
DEMO
@Sander_Mak
Java
11
(Sept. 2018)
@Sander_Mak
HttpClient
HttpURLConnection
HTTP/2 & WebSocket
Reactive Streams Support
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient.Builder
newBuilder
HttpClient
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient.Builder
HttpRequest
uri
headers
method
...newBuilder
HttpClient
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient.Builder
HttpRequest
uri
headers
method
...
HttpRequest.Builder
newBuilder
newBuilder
HttpClient
@Sander_Mak
HttpClient
send
sendAsync
...
HttpClient.Builder
HttpRequest
uri
headers
method
...
HttpRequest.Builder
HttpResponse
uri
statusCode
body
...newBuilder
newBuilder
HttpClient
@Sander_Mak
HttpClient
HttpClient httpClient = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder(URI.create("https://google.com"))
.GET()
.build();
HttpResponse<String> response = httpClient.send(req, BodyHandlers.ofString())
@Sander_Mak
Java
12
(March 2019)
@Sander_Mak
Preview Feature: Switch Expression
@Sander_Mak
Preview Feature: Switch Expression
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
@Sander_Mak
Let's Talk About Adoption
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
https://www.jetbrains.com/research/devecosystem-2018/java/
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
https://www.jetbrains.com/research/devecosystem-2018/java/
Java Magazine & Snyk
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
https://www.jetbrains.com/research/devecosystem-2018/java/
Java Magazine & Snyk
@Sander_Mak
Java 11
@Sander_Mak
Java 11
Java 9
Java 10
Java 12
Java 13
6 months
Java 11
@Sander_Mak
Java 11
Java 9
Java 10
Java 12
Java 13
6 months
Java 11
@Sander_Mak
Java 11
Long
Term
Support
Java 9
Java 10
Java 12
Java 13
6 months
Java 11 Java 11 LTS
minimum 3 years
@Sander_Mak
Which JDK?
JDK 11 changes the game
Thanks. Read More:
javamodularity.com
@Sander_Mak
bit.ly/ps-sander

More Related Content

What's hot

108 advancedjava
108 advancedjava108 advancedjava
108 advancedjava
Anil Kumar
 

What's hot (20)

Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
 
Node.js Development with Apache NetBeans
Node.js Development with Apache NetBeansNode.js Development with Apache NetBeans
Node.js Development with Apache NetBeans
 
Springboot introduction
Springboot introductionSpringboot introduction
Springboot introduction
 
Java 9, JShell, and Modularity
Java 9, JShell, and ModularityJava 9, JShell, and Modularity
Java 9, JShell, and Modularity
 
Modularization With Project Jigsaw in JDK 9
Modularization With Project Jigsaw in JDK 9Modularization With Project Jigsaw in JDK 9
Modularization With Project Jigsaw in JDK 9
 
Modular Java
Modular JavaModular Java
Modular Java
 
Advance java Online Training in Hyderabad
Advance java Online Training in HyderabadAdvance java Online Training in Hyderabad
Advance java Online Training in Hyderabad
 
Java EE and Spring Side-by-Side
Java EE and Spring Side-by-SideJava EE and Spring Side-by-Side
Java EE and Spring Side-by-Side
 
Java EE 8 Update
Java EE 8 UpdateJava EE 8 Update
Java EE 8 Update
 
Spring boot jpa
Spring boot jpaSpring boot jpa
Spring boot jpa
 
Reactjs Basics
Reactjs BasicsReactjs Basics
Reactjs Basics
 
An Introduction to Play 2 Framework
An Introduction to Play 2 FrameworkAn Introduction to Play 2 Framework
An Introduction to Play 2 Framework
 
108 advancedjava
108 advancedjava108 advancedjava
108 advancedjava
 
Next stop: Spring 4
Next stop: Spring 4Next stop: Spring 4
Next stop: Spring 4
 
Building web applications with Java & Spring
Building web applications with Java & SpringBuilding web applications with Java & Spring
Building web applications with Java & Spring
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)
 
The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
Java EE 8: On the Horizon
Java EE 8:  On the HorizonJava EE 8:  On the Horizon
Java EE 8: On the Horizon
 

Similar to Coding Your Way to Java 12

Rapid Application Development with WSO2 Platform
Rapid Application Development with WSO2 PlatformRapid Application Development with WSO2 Platform
Rapid Application Development with WSO2 Platform
WSO2
 
Java Technology
Java TechnologyJava Technology
Java Technology
ifnu bima
 

Similar to Coding Your Way to Java 12 (20)

Sander Mak - Keeping Up With Java - Codemotion Rome 2019
Sander Mak - Keeping Up With Java - Codemotion Rome 2019Sander Mak - Keeping Up With Java - Codemotion Rome 2019
Sander Mak - Keeping Up With Java - Codemotion Rome 2019
 
Coding Your Way to Java 13
Coding Your Way to Java 13Coding Your Way to Java 13
Coding Your Way to Java 13
 
Getting Started with WebSocket and Server-Sent Events in Java
Getting Started with WebSocket and Server-Sent Events in JavaGetting Started with WebSocket and Server-Sent Events in Java
Getting Started with WebSocket and Server-Sent Events in Java
 
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting started with Websocket and Server-sent Events using Java - Arun Gupta Getting started with Websocket and Server-sent Events using Java - Arun Gupta
Getting started with Websocket and Server-sent Events using Java - Arun Gupta
 
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun GuptaGetting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
Getting Started with WebSocket and Server-Sent Events using Java by Arun Gupta
 
Patterns Are Good For Managers
Patterns Are Good For ManagersPatterns Are Good For Managers
Patterns Are Good For Managers
 
Rapid Application Development with WSO2 Platform
Rapid Application Development with WSO2 PlatformRapid Application Development with WSO2 Platform
Rapid Application Development with WSO2 Platform
 
Android networking-2
Android networking-2Android networking-2
Android networking-2
 
My way to clean android (EN) - Android day salamanca edition
My way to clean android (EN) - Android day salamanca editionMy way to clean android (EN) - Android day salamanca edition
My way to clean android (EN) - Android day salamanca edition
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJS
 
Old WP REST API, New Tricks
Old WP REST API, New TricksOld WP REST API, New Tricks
Old WP REST API, New Tricks
 
Introduction to CloudStack API
Introduction to CloudStack APIIntroduction to CloudStack API
Introduction to CloudStack API
 
Google Cloud Endpoints: Building Third-Party APIs on Google AppEngine
Google Cloud Endpoints: Building Third-Party APIs on Google AppEngineGoogle Cloud Endpoints: Building Third-Party APIs on Google AppEngine
Google Cloud Endpoints: Building Third-Party APIs on Google AppEngine
 
Spring Mvc Rest
Spring Mvc RestSpring Mvc Rest
Spring Mvc Rest
 
AtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and ServerAtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and Server
 
SPARQLing cocktails
SPARQLing cocktailsSPARQLing cocktails
SPARQLing cocktails
 
AEM Sightly Deep Dive
AEM Sightly Deep DiveAEM Sightly Deep Dive
AEM Sightly Deep Dive
 
Java Technology
Java TechnologyJava Technology
Java Technology
 
How Bitbucket Pipelines Loads Connect UI Assets Super-fast
How Bitbucket Pipelines Loads Connect UI Assets Super-fastHow Bitbucket Pipelines Loads Connect UI Assets Super-fast
How Bitbucket Pipelines Loads Connect UI Assets Super-fast
 
Multilingualism makes better programmers
Multilingualism makes better programmersMultilingualism makes better programmers
Multilingualism makes better programmers
 

More from Sander Mak (@Sander_Mak)

Modules or microservices?
Modules or microservices?Modules or microservices?
Modules or microservices?
Sander Mak (@Sander_Mak)
 

More from Sander Mak (@Sander_Mak) (20)

Scalable Application Development @ Picnic
Scalable Application Development @ PicnicScalable Application Development @ Picnic
Scalable Application Development @ Picnic
 
Modules or microservices?
Modules or microservices?Modules or microservices?
Modules or microservices?
 
Java 9 Modularity in Action
Java 9 Modularity in ActionJava 9 Modularity in Action
Java 9 Modularity in Action
 
Java modularity: life after Java 9
Java modularity: life after Java 9Java modularity: life after Java 9
Java modularity: life after Java 9
 
Provisioning the IoT
Provisioning the IoTProvisioning the IoT
Provisioning the IoT
 
Event-sourced architectures with Akka
Event-sourced architectures with AkkaEvent-sourced architectures with Akka
Event-sourced architectures with Akka
 
TypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painTypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the pain
 
The Ultimate Dependency Manager Shootout (QCon NY 2014)
The Ultimate Dependency Manager Shootout (QCon NY 2014)The Ultimate Dependency Manager Shootout (QCon NY 2014)
The Ultimate Dependency Manager Shootout (QCon NY 2014)
 
Modular JavaScript
Modular JavaScriptModular JavaScript
Modular JavaScript
 
Modularity in the Cloud
Modularity in the CloudModularity in the Cloud
Modularity in the Cloud
 
Cross-Build Injection attacks: how safe is your Java build?
Cross-Build Injection attacks: how safe is your Java build?Cross-Build Injection attacks: how safe is your Java build?
Cross-Build Injection attacks: how safe is your Java build?
 
Scala & Lift (JEEConf 2012)
Scala & Lift (JEEConf 2012)Scala & Lift (JEEConf 2012)
Scala & Lift (JEEConf 2012)
 
Hibernate Performance Tuning (JEEConf 2012)
Hibernate Performance Tuning (JEEConf 2012)Hibernate Performance Tuning (JEEConf 2012)
Hibernate Performance Tuning (JEEConf 2012)
 
Akka (BeJUG)
Akka (BeJUG)Akka (BeJUG)
Akka (BeJUG)
 
Fork Join (BeJUG 2012)
Fork Join (BeJUG 2012)Fork Join (BeJUG 2012)
Fork Join (BeJUG 2012)
 
Fork/Join for Fun and Profit!
Fork/Join for Fun and Profit!Fork/Join for Fun and Profit!
Fork/Join for Fun and Profit!
 
Kscope11 recap
Kscope11 recapKscope11 recap
Kscope11 recap
 
Java 7: Fork/Join, Invokedynamic and the future
Java 7: Fork/Join, Invokedynamic and the futureJava 7: Fork/Join, Invokedynamic and the future
Java 7: Fork/Join, Invokedynamic and the future
 
Scala and Lift
Scala and LiftScala and Lift
Scala and Lift
 
Elevate your webapps with Scala and Lift
Elevate your webapps with Scala and LiftElevate your webapps with Scala and Lift
Elevate your webapps with Scala and Lift
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 

Coding Your Way to Java 12