Java by Sigma

Introduction

It is usually a daunting task to know what to learn next, especially if you are beginning your journey. This guide aims to help you find relevant competence areas to focus on and suggest what to prioritize first to speed up the learning process.

Contribute

If you have any opinions or suggestions then feel free to create an issue and make sure to tag it with improvement for any new suggestions or invalid if any existing information is incorrect.

Levels

Feel free to learn whatever you want regardless of level. However be aware that a higher level suggests that you will have a harder time if you lack fundamental knowledge.

Lv.0 You might be familiar with some concepts but lack professional experience.
Lv.1 You should comprehend the basics of Java. You should also be aware of the essential tools and platforms and be able to use them assuming they are setup and configured beforehand.
Lv.2 You should know most features of the latest Java version and be accustomed to commonly used libraries and frameworks. You are aware of multiple programming paradigms, patterns and architectures. You should also be better versed with different tools and able to setup and configure some from scratch.
Lv.3 You should be proficient with advanced concepts and be able to combine the right technologies and tools from an architectural perspective.
Lv.4 You are a master in one or more areas and an active contributor to standards and the open source community.

Remarks

cold Is becoming obsolete, but is still commonly used. Should be avoided for new projects.
hot Is either very new with great potential or widely adopted with an active community.
recommended Is very usefull in most situations.
required Necessary for any successful development project.

Languages

Functional Programming

Reactive Programming

  • Akka

    Lv. 3

    Akka is a toolkit for building highly concurrent, distributed, and resilient message-driven applications for Java and Scala

    Read more: Akka

  • Kafka

    Lv. 3

    A distributed streaming platform.

    Read more: Kafka

  • Project Reactor

    Lv. 3

    Reactor is a fourth-generation Reactive library for building non-blocking applications on the JVM based on the Reactive Streams Specification.

    Read more: Project Reactor

  • ReactiveX

    Lv. 3

    An API for asynchronous programming with observable streams.

    Read more: ReactiveX

  • Spring Webflux

    Lv. 3

    Read more: Spring Webflux

Architecture

Frameworks

  • Guava

    Lv. 2
    cold

    Google Core Libraries for Java.

    Read more: Guava

  • Spring Boot

    Lv. 1
    hot recommended

    Takes an opinionated view of building production-ready Spring applications. Spring Boot favors convention over configuration and is designed to get you up and running as quickly as possible.

    Read more: Spring Boot

  • Spring Framework

    Lv. 1
    recommended

    Read more: Spring Framework

  • Spring Web MVC

    Lv. 2

    Read more: Spring Web MVC

  • OSGi

    Lv. 3
    cold

    Read more: OSGi

Application Servers

  • JBoss EAP

    Lv. 2
    recommended

    Read more: JBoss EAP

  • Tomcat

    Lv. 2
    recommended

    Read more: Tomcat

  • Weblogic

    Lv. 2

    Read more: Weblogic

  • WebSphere

    Lv. 2

    Read more: WebSphere

  • WildFly

    Lv. 2

    Read more: WildFly

Databases

  • SQL

    Lv. 1
    recommended

    Read more: SQL

  • MongoDB

    Lv. 3

    Read more: MongoDB

  • neo4j

    Lv. 3

    Read more: neo4j

  • Oracle Database

    Lv. 1
    recommended

    Read more: Oracle Database

  • PostgreSQL

    Lv. 1
    recommended

    Read more: PostgreSQL

Database Integration

  • JPA

    Lv. 2
    required

    Read more: JPA

  • Hibernate

    Lv. 2
    recommended

    Read more: Hibernate

  • Speedment

    Lv. 2
    hot

    Java Stream ORM

    Read more: Speedment

Database Migration

  • Flyway

    Lv. 2
    recommended

    Read more: Flyway

  • Liquibase

    Lv. 2
    recommended

    Read more: Liquibase

In Memory Data

  • hazelcast

    Lv. 2
    recommended

    Read more: hazelcast

  • redis

    Lv. 2
    recommended

    Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster

    Read more: redis

Big Data

  • Cassandra

    Lv. 3

    Manage massive amounts of data, fast, without losing sleep

    Read more: Cassandra

  • Hadoop

    Lv. 3

    Read more: Hadoop

CMS

Integration

Java in the Cloud

Quality & Test

  • AssertJ

    Lv. 2
    recommended

    Fluent assertions for Java.

    Read more: AssertJ

  • Cucumber

    Lv. 2

    Read more: Cucumber

  • Hoverfly

    Lv. 2

    Hoverfly is a lightweight service virtualisation tool which allows you to stub / simulate HTTP(S) services. It is a proxy written in Go which responds to HTTP(S) requests with stored responses, pretending to be it’s real counterpart.

    Read more: Hoverfly

  • JML (Java Modeling Language)

    Lv. 2

    The Java Modeling Language (JML) is a behavioral interface specification language that can be used to specify the behavior of Java modules. It combines the design by contract approach of Eiffel and the model-based specification approach of the Larch family of interface specification languages, with some elements of the refinement calculus.

    Read more: JML (Java Modeling Language)

  • jUnit

    Lv. 1
    required

    JUnit 5 is the next generation of JUnit. The goal is to create an up-to-date foundation for developer-side testing on the JVM. This includes focusing on Java 8 and above, as well as enabling many different styles of testing.

    Read more: jUnit

  • Mockito

    Lv. 1
    recommended

    Mocking framework for unit tests in Java.

    Read more: Mockito

  • Pact

    Lv. 2
    recommended

    Pact is a contract testing tool. Contract testing is a way to ensure that services (such as an API provider and a client) can communicate with each other. Without contract testing, the only way to know that services can communicate is by using expensive and brittle integration tests.

    Read more: Pact

  • PIT Mutation Testing

    Lv. 1
    recommended

    PIT is a state of the art mutation testing system, providing gold standard test coverage for Java and the jvm. It's fast, scalable and integrates with modern test and build tooling.

    Read more: PIT Mutation Testing

  • REST-assured

    Lv. 1

    Read more: REST-assured

  • Spock

    Lv. 1
    hot

    Spock is a testing and specification framework for Java and Groovy applications. What makes it stand out from the crowd is its beautiful and highly expressive specification language. Thanks to its JUnit runner, Spock is compatible with most IDEs, build tools, and continuous integration servers. Spock is inspired from JUnit, RSpec, jMock, Mockito, Groovy, Scala, Vulcans, and other fascinating life forms.

    Read more: Spock

  • Spotbugs

    Lv. 1
    required

    SpotBugs is a program which uses static analysis to look for bugs in Java code.

    Read more: Spotbugs

  • TestNG

    Lv. 1

    Read more: TestNG

  • TLA+

    Lv. 2

    TLA+ is a high-level language for modeling programs and systems--especially concurrent and distributed ones. It's based on the idea that the best way to describe things precisely is with simple mathematics. TLA+ and its tools are useful for eliminating fundamental design errors, which are hard to find and expensive to correct in code.

    Read more: TLA+

  • vavr - Property Based Testing

    Lv. 2
    recommended
  • Wiremock

    Lv. 2

    WireMock is a simulator for HTTP-based APIs. Some might consider it a service virtualization tool or a mock server.

    Read more: Wiremock

Threading, Concurrency

Containers & Instrumentation

  • Docker

    Lv. 2
    recommended

    Package Software into Standardized Units for Development, Shipment and Deployment.

    Read more: Docker

  • Jib

    Lv. 2
    recommended

    Jib builds optimized Docker and OCI images for your Java applications without a Docker daemon - and without deep mastery of Docker best-practices. It is available as plugins for Maven and Gradle and as a Java library.

    Read more: Jib

  • Kubernetes

    Lv. 2
    recommended

    Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.

    Read more: Kubernetes

  • Quarkus

    Lv. 2
    recommended

    A Kubernetes Native Java stack tailored for GraalVM & OpenJDK HotSpot, crafted from the best of breed Java libraries and standards.

    Read more: Quarkus

  • Testcontainers

    Lv. 2
    recommended

    Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.

    Read more: Testcontainers

Tooling

Operating Systems

Books

Patterns

Modelling

  • UML

    Lv. 2

    Read more: UML

Mobile

Contributors