<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Hyperskill</title>
    <description>The latest articles on Forem by Hyperskill (@hyperskill_academy).</description>
    <link>https://forem.com/hyperskill_academy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F11694%2F568dc624-955a-4fa8-ad2d-a6c576b5d17d.png</url>
      <title>Forem: Hyperskill</title>
      <link>https://forem.com/hyperskill_academy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hyperskill_academy"/>
    <language>en</language>
    <item>
      <title>5 Java Courses That Help You Build Portfolio-Worthy Projects</title>
      <dc:creator>Lada Petrushenko</dc:creator>
      <pubDate>Wed, 28 Jan 2026 14:51:20 +0000</pubDate>
      <link>https://forem.com/hyperskill_academy/5-java-courses-that-help-you-build-portfolio-worthy-projects-9cp</link>
      <guid>https://forem.com/hyperskill_academy/5-java-courses-that-help-you-build-portfolio-worthy-projects-9cp</guid>
      <description>&lt;p&gt;Hi, I’m Lada — Content Project Manager at &lt;a href="https://hyperskill.org/" rel="noopener noreferrer"&gt;Hyperskill&lt;/a&gt;.&lt;br&gt;
We’ve already covered how our &lt;a href="https://dev.to/hyperskill_academy/5-python-courses-that-help-you-build-portfolio-worthy-projects-4anh"&gt;Python&lt;/a&gt; and &lt;a href="https://dev.to/hyperskill_academy/5-kotlin-courses-that-help-you-build-portfolio-worthy-projects-3kfc"&gt;Kotlin&lt;/a&gt; courses are structured. Next up is Java.&lt;/p&gt;

&lt;p&gt;Java is often chosen by learners who want a strong foundation for backend, enterprise, or full-stack development. It’s also a language where understanding architecture, concurrency, and long-term maintainability really matters. That’s why our Java courses are organized around different development paths — from learning the language fundamentals to building full-scale applications.&lt;/p&gt;

&lt;p&gt;As with our other tracks, some topics overlap across Java courses. This is intentional. When you complete a concept in one course, it carries over to others, so your progress is always preserved and you don’t repeat the same material.&lt;/p&gt;

&lt;p&gt;Here’s a quick overview to help you choose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Course&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Project Examples&lt;/th&gt;
&lt;th&gt;What You’ll Learn&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/8-introduction-to-java" rel="noopener noreferrer"&gt;Introduction to Java&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complete beginners&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/133" rel="noopener noreferrer"&gt;Cinema Room Manager&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/184" rel="noopener noreferrer"&gt;Amazing Numbers&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Java syntax, OOP basics, loops, conditionals, arrays and strings, error handling, algorithmic thinking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/17-java-developer" rel="noopener noreferrer"&gt;Java Developer&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Learners with basic Java ready to grow into developers&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/197" rel="noopener noreferrer"&gt;Learning Progress Tracker&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/65" rel="noopener noreferrer"&gt;JSON Database with Java&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;OOP, functional programming, collections, multithreading, design patterns, databases, HTTP requests, JSON/XML, server-side basics, build tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/12-java-backend-developer-spring-boot" rel="noopener noreferrer"&gt;Java Backend Developer (Spring Boot)&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aspiring backend developers&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/91" rel="noopener noreferrer"&gt;Web Quiz Engine&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/189" rel="noopener noreferrer"&gt;Cinema Room REST Service&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Spring Boot, REST APIs, relational databases, concurrency and thread safety, JSON handling, unit and integration testing, web security basics, backend architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/39-java-full-stack-developer" rel="noopener noreferrer"&gt;Java Full Stack Developer&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aspiring full-stack developers&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/130" rel="noopener noreferrer"&gt;Code-sharing Platform&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/313" rel="noopener noreferrer"&gt;Real-time Chat&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Java and JavaScript development, Spring Boot, frontend essentials (HTML, CSS, JS), WebSockets, STOMP protocol, databases, deployment, real-time web applications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/9-java-desktop-application-developer" rel="noopener noreferrer"&gt;Java Desktop Application Developer&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aspiring desktop app developers&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/174" rel="noopener noreferrer"&gt;Desktop Tic-Tac-Toe&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/207" rel="noopener noreferrer"&gt;Graph-Algorithms Visualizer&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Java core, Swing GUI framework, multithreading, event handling, algorithm visualization, desktop application design&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Note: Each course includes more projects than shown here — these are just some highlights.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Courses
&lt;/h2&gt;




&lt;h3&gt;
  
  
  Introduction to Java
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills&lt;/strong&gt;: Java, IntelliJ IDEA basics, functions, data types, control structures, debugging, error handling, OOP basics.&lt;/p&gt;

&lt;p&gt;This course is the perfect &lt;strong&gt;starting point&lt;/strong&gt; if you're taking your first steps toward a tech career. You'll learn the core concepts behind Java, one of the most widely used programming languages in the world, and gain confidence working with code from the very beginning. You'll practice using variables, loops, conditionals, functions, strings, arrays, and user input while recognizing foundational object-oriented principles.&lt;/p&gt;

&lt;p&gt;By the end of the course, you'll be able to design, implement, and explain your own small application from start to finish. For example, in Cinema Room Manager, you create a program that helps manage a cinema theatre: selling tickets, tracking available seats, and displaying statistics. In Amazing Numbers, you develop a program that analyzes the properties of numbers and identifies patterns, such as whether a number is palindromic or gapful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if&lt;/strong&gt;: You’ve never programmed before or want a clear and structured introduction to Java.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java Developer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills&lt;/strong&gt;: OOP and functional programming, collections, multithreading, design patterns, databases, HTTP requests, server-side development basics, build tools.&lt;/p&gt;

&lt;p&gt;This course is designed for learners who already understand the basics and want to &lt;strong&gt;move toward professional-level&lt;/strong&gt; development. You'll begin by strengthening your foundation in Java — learning how to write clean and readable code that follows the conventions used in real-world projects. From there, you'll explore object-oriented programming in depth and learn how to apply these concepts to structure larger applications. The course gradually introduces more advanced language features, including functional programming and multithreading, so you can build software that is not only correct but also efficient and scalable.&lt;/p&gt;

&lt;p&gt;This course teaches the core skills that allow developers to pick up any framework later. You'll work with collections, design patterns, databases, HTTP requests, and JSON/XML, and use essential build tools. These are the skills that make you adaptable and able to grow into roles like backend developer, full-stack engineer, or platform engineer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if&lt;/strong&gt;: You know basic Java and are ready to move towards professional-level development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java Backend Developer (Spring Boot)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills&lt;/strong&gt;: Spring Boot, REST APIs, relational databases, concurrency and thread safety, JSON handling, Gradle, Git, IntelliJ IDEA, unit and integration testing, basic web security, backend application architecture.&lt;/p&gt;

&lt;p&gt;This course is for learners aiming to build practical web development skills and become backend developers. You'll deepen your understanding of core Java concepts such as object-oriented design, data structures, algorithms, and concurrency, then learn how to apply these fundamentals to backend systems using Spring Boot. You'll learn how to structure, design, and deploy real web applications.&lt;/p&gt;

&lt;p&gt;You'll work with RESTful APIs, relational databases, JSON data, and unit/integration testing, while following web security practices and using Gradle and Git for professional workflows. Projects include Web Quiz Engine, building a web service for creating and managing quizzes, and Cinema Room REST Service, a ticketing service handling HTTP requests and JSON responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if&lt;/strong&gt;: You're aiming for backend developer roles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java Full Stack Developer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills&lt;/strong&gt;: Full-stack development with Java and JavaScript, Spring Boot, frontend essentials (HTML, CSS, JavaScript), WebSockets, STOMP protocol, databases, deployment, real-time web applications.&lt;/p&gt;

&lt;p&gt;This course is ideal for learners aiming to become versatile full-stack developers who can build both backend and frontend components. You'll strengthen your Java skills while adding knowledge of frontend technologies and how they interact with backend services. The focus is on creating real-life web applications that you can deploy and showcase in your portfolio.&lt;/p&gt;

&lt;p&gt;Throughout the course, you'll combine backend and frontend development using Java and JavaScript, working with Spring Boot for server-side logic and databases, and implementing dynamic user interfaces with HTML, CSS, and JavaScript. You'll also learn real-time communication using WebSockets and the STOMP protocol, preparing you for full-stack development challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if&lt;/strong&gt;: You're aiming for full-stack developer roles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java Desktop Application Developer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills&lt;/strong&gt;: Java core, Swing GUI framework, multithreading, event handling, desktop application design.&lt;/p&gt;

&lt;p&gt;This course is perfect for learners who want to specialize in desktop application development using Java. You'll deepen your Java knowledge while learning to design interactive graphical user interfaces with the Swing framework. The focus is on creating real, functional desktop applications that combine programming logic and visual interaction.&lt;/p&gt;

&lt;p&gt;You'll explore GUI components, structure responsive applications with multithreading, handle user input effectively, and use regular expressions to process HTML. The projects are designed to strengthen both programming and interface design skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if&lt;/strong&gt;: You want to specialize in desktop application development and build GUI-based portfolio projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which One Should You Pick?
&lt;/h3&gt;

&lt;p&gt;Start with &lt;a href="https://hyperskill.org/courses/8-introduction-to-java" rel="noopener noreferrer"&gt;Introduction to Java&lt;/a&gt; if you’re completely new to programming or new to Java as a language.&lt;/p&gt;

&lt;p&gt;Choose &lt;a href="https://hyperskill.org/courses/17-java-developer" rel="noopener noreferrer"&gt;Java Developer&lt;/a&gt; if you already know the basics and want to grow into a professional developer, learning how real Java applications are structured and maintained.&lt;/p&gt;

&lt;p&gt;Go with &lt;a href="https://hyperskill.org/courses/12-java-backend-developer-spring-boot" rel="noopener noreferrer"&gt;Java Backend Developer (Spring Boot)&lt;/a&gt; if you want to focus on building server-side applications, REST APIs, and scalable backend systems.&lt;/p&gt;

&lt;p&gt;Pick &lt;a href="https://hyperskill.org/courses/39-java-full-stack-developer" rel="noopener noreferrer"&gt;Java Full Stack Developer&lt;/a&gt; if you’re interested in working across both backend and frontend, building end-to-end web applications and real-time features.&lt;/p&gt;

&lt;p&gt;Select &lt;a href="https://hyperskill.org/courses/9-java-desktop-application-developer" rel="noopener noreferrer"&gt;Java Desktop Application Developer&lt;/a&gt; if you want to create desktop applications and explore GUI development with Java.&lt;/p&gt;

&lt;p&gt;As with our other learning paths, these courses are connected. Topics overlap, and your progress carries over — so you never have to relearn the same concepts twice.&lt;/p&gt;

&lt;p&gt;Along the way, you’ll build real projects you can add to your GitHub and show to potential employers.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>java</category>
      <category>backend</category>
      <category>learning</category>
    </item>
    <item>
      <title>5 Kotlin Courses That Help You Build Portfolio-Worthy Projects</title>
      <dc:creator>Lada Petrushenko</dc:creator>
      <pubDate>Wed, 28 Jan 2026 14:20:54 +0000</pubDate>
      <link>https://forem.com/hyperskill_academy/5-kotlin-courses-that-help-you-build-portfolio-worthy-projects-3kfc</link>
      <guid>https://forem.com/hyperskill_academy/5-kotlin-courses-that-help-you-build-portfolio-worthy-projects-3kfc</guid>
      <description>&lt;p&gt;Hi, I’m Lada — Content Project Manager at &lt;strong&gt;&lt;a href="https://hyperskill.org/" rel="noopener noreferrer"&gt;Hyperskill&lt;/a&gt;.&lt;/strong&gt;&lt;br&gt;
In the &lt;a href="https://dev.to/hyperskill_academy/5-python-courses-that-help-you-build-portfolio-worthy-projects-4anh"&gt;previous article&lt;/a&gt;, we looked at our Python courses. This time, we’re doing the same for Kotlin.&lt;/p&gt;

&lt;p&gt;Kotlin attracts a different kind of learner — future Android developers, backend engineers, or anyone looking for a modern, strongly typed language. That’s why our Kotlin courses are built around different end goals, from learning the basics to building real applications.&lt;/p&gt;

&lt;p&gt;Some topics overlap between courses. If you’ve already completed a concept in one course, it carries over to the others — so you never repeat the same work.&lt;/p&gt;

&lt;p&gt;Here’s a quick overview to help you choose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Course&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Project Examples&lt;/th&gt;
&lt;th&gt;What You’ll Learn&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/69-introduction-to-kotlin" rel="noopener noreferrer"&gt;Introduction to Kotlin&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complete beginners&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/138" rel="noopener noreferrer"&gt;Cinema Room Manager&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/8" rel="noopener noreferrer"&gt;Minesweeper&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Kotlin syntax, variables, loops, functions, simple OOP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/18-kotlin-core" rel="noopener noreferrer"&gt;Kotlin Core&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Learners ready to go deeper&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/75" rel="noopener noreferrer"&gt;Parking Lot&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/237" rel="noopener noreferrer"&gt;Tasklist&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Code structure, collections, OOP principles, file I/O, debugging, basic algorithms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/3-kotlin-developer" rel="noopener noreferrer"&gt;Kotlin Developer&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Career switchers or multi-platform learners&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/308" rel="noopener noreferrer"&gt;Maze Runner&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/8" rel="noopener noreferrer"&gt;Minesweeper&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Advanced Kotlin, functional programming, coroutines, flows, algorithms, design patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/16-android-developer-with-kotlin" rel="noopener noreferrer"&gt;Android Developer with Kotlin&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aspiring mobile app developers&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/333" rel="noopener noreferrer"&gt;Simple Bank Manager&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/547" rel="noopener noreferrer"&gt;Secret Diary (IDEA)&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/276" rel="noopener noreferrer"&gt;Secret Diary (Android Studio)&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Dynamic UIs and navigation graphs with Fragments, data storage, Android Studio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/37-kotlin-backend-developer-spring-boot" rel="noopener noreferrer"&gt;Kotlin Backend Developer (Spring Boot)&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aspiring backend developers&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/263" rel="noopener noreferrer"&gt;Cinema Room REST Service&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/316" rel="noopener noreferrer"&gt;Web Quiz Engine&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;REST APIs, Spring Boot, security, basics of HTML, CSS, and JavaScript, deployment tools&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Note: Each course includes more projects than shown here — these are just some highlights.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Courses
&lt;/h2&gt;




&lt;h3&gt;
  
  
  Introduction to Kotlin
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills&lt;/strong&gt;: Kotlin syntax, variables and data types, functions, conditionals and loops, lists and collections, basic OOP concepts, project structure, coding best practices.&lt;/p&gt;

&lt;p&gt;This is the course to start with if you're completely new to programming or &lt;strong&gt;new to Kotlin specifically&lt;/strong&gt;. You'll learn the fundamentals step by step: how to write and run simple programs, store and process data, control execution flow, and use functions to organize your code. You'll also get an introduction to object-oriented programming, which is essential for building larger applications later on.&lt;/p&gt;

&lt;p&gt;Along the way, you'll learn &lt;em&gt;why&lt;/em&gt; Kotlin is popular among developers today — especially in Android development — and how its modern features make coding cleaner and more efficient than in many older languages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if&lt;/strong&gt;: You've never written code before or are new to Kotlin specifically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kotlin Core
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills:&lt;/strong&gt; Object-oriented programming, functional decomposition, data structures, text processing, file system operations, debugging, working with Kotlin libraries.&lt;/p&gt;

&lt;p&gt;Once you're comfortable with Kotlin basics, Kotlin Core takes you deeper into &lt;strong&gt;how real applications are designed&lt;/strong&gt; and structured. You'll move beyond simple syntax and start writing cleaner, scalable code that's easier to maintain and extend. The course focuses on building problem-solving skills.&lt;/p&gt;

&lt;p&gt;You'll practice decomposing programs into meaningful functions and classes, work with Kotlin's standard libraries, and learn to process text, store data, handle files, and debug your code effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if:&lt;/strong&gt; You know basic Kotlin and want to understand how things work under the hood.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kotlin Developer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills:&lt;/strong&gt; Advanced Kotlin features, functional programming, coroutines, flows, algorithms, data structures, design patterns, testing.&lt;/p&gt;

&lt;p&gt;In Kotlin Developer, you'll explore &lt;strong&gt;advanced language constructs&lt;/strong&gt;, functional programming techniques, and concurrency with coroutines and flows. You'll also deepen your understanding of algorithms, data structures, and testing while working with professional development tools such as Git. By the end, you'll be ready to take on Android, backend, or multiplatform projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if:&lt;/strong&gt; You already know the core of Kotlin and want to build production-level problem-solving skills — or prepare for Android, backend, or multiplatform development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Android Developer with Kotlin
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills:&lt;/strong&gt; Android Studio, UI layout and navigation, Fragments, data storage (local and remote), user input handling, app lifecycle, modern Android development practices.&lt;/p&gt;

&lt;p&gt;If your goal is to &lt;strong&gt;build mobile apps&lt;/strong&gt;, this is the course that takes you there. Android Developer with Kotlin focuses on creating interactive applications. You'll learn how Android apps are structured, how screens are displayed and connected, how data is stored, and how to design UIs that are functional and easy to use.&lt;/p&gt;

&lt;p&gt;The course guides you through Android Studio step-by-step, from simple interface controls to multi-screen navigation and secure data storage. By the end, you'll be comfortable designing and implementing your own Android applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if:&lt;/strong&gt; You want to start a career in mobile development or build apps that run on Android devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kotlin Backend Developer (Spring Boot)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CV-ready skills:&lt;/strong&gt; Spring Boot, REST APIs, JSON handling, authentication and authorization, data persistence, Gradle, Git, testing, deployment tools.&lt;/p&gt;

&lt;p&gt;This course teaches you how to build server-side applications that handle real-world tasks, like managing data, securing access, and responding to user requests. You'll learn how to structure a web application using Spring Boot, connect it to a database for persistent storage, and implement RESTful APIs to allow clients to interact with your service. Along the way, you'll practice debugging, testing, and deploying your applications. You'll also gain foundational skills in HTML, CSS, and JavaScript to better understand the client side of web apps. By completing this course, you'll be able to design and develop scalable backend systems ready for production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if:&lt;/strong&gt; You're aiming for backend developer roles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which One Should You Pick?
&lt;/h3&gt;

&lt;p&gt;Start with &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/69-introduction-to-kotlin" rel="noopener noreferrer"&gt;Introduction to Kotlin&lt;/a&gt;&lt;/strong&gt; if you’re completely new to programming or new to Kotlin as a language.&lt;/p&gt;

&lt;p&gt;Move to &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/18-kotlin-core" rel="noopener noreferrer"&gt;Kotlin Core&lt;/a&gt;&lt;/strong&gt; if you already know the basics and want to understand how real applications are structured and how developers approach problem-solving.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/3-kotlin-developer" rel="noopener noreferrer"&gt;Kotlin Developer&lt;/a&gt;&lt;/strong&gt; if you’re switching careers or want a deeper, more comprehensive view of Kotlin for professional development across different platforms.&lt;/p&gt;

&lt;p&gt;Go with &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/16-android-developer-with-kotlin" rel="noopener noreferrer"&gt;Android Developer with Kotlin&lt;/a&gt;&lt;/strong&gt; if your main goal is to build Android apps and work with modern mobile development tools and workflows.&lt;/p&gt;

&lt;p&gt;Pick &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/37-kotlin-backend-developer-spring-boot" rel="noopener noreferrer"&gt;Kotlin Backend Developer with Spring Boot&lt;/a&gt;&lt;/strong&gt; if you want to focus on server-side development, APIs, and building scalable backend systems.&lt;/p&gt;

&lt;p&gt;The nice thing about our approach is that all these courses are connected. Topics overlap, and your progress carries over — so you don’t have to relearn the same concepts from scratch.&lt;/p&gt;

&lt;p&gt;No single course can teach you everything. But our Kotlin courses give you solid practical experience and portfolio-ready projects to help you grow as a developer and build skills that last.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>kotlin</category>
      <category>mobile</category>
      <category>backend</category>
    </item>
    <item>
      <title>Modern Java Features: Part 2 - From Java 22 to 25</title>
      <dc:creator>Vahram Papazyan</dc:creator>
      <pubDate>Tue, 23 Dec 2025 16:57:58 +0000</pubDate>
      <link>https://forem.com/hyperskill_academy/modern-java-features-part-2-from-java-22-to-25-20gk</link>
      <guid>https://forem.com/hyperskill_academy/modern-java-features-part-2-from-java-22-to-25-20gk</guid>
      <description>&lt;p&gt;Welcome back to our series exploring the latest innovations in Java! In &lt;a href="https://dev.to/hyperskill_academy/modern-java-evolution-part-1-from-java-22-to-25-37j7"&gt;Part 1&lt;/a&gt;, we covered foundational features like pattern matching and records. Now we turn our attention to features that dramatically improve &lt;strong&gt;developer experience&lt;/strong&gt; and &lt;strong&gt;application performance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This installment covers five game-changing additions to modern Java:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compact Source Files &amp;amp; Instance Main Methods&lt;/strong&gt; — Write Java programs without boilerplate, making the language more accessible to beginners and perfect for scripting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Primitive Types in Patterns&lt;/strong&gt; — Extend Java's pattern matching capabilities to work seamlessly with primitive types&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoped Values&lt;/strong&gt; — A modern, efficient alternative to &lt;code&gt;ThreadLocal&lt;/code&gt; for passing context in concurrent applications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ZGC&lt;/strong&gt; — A production-ready garbage collector that keeps pause times under 1ms, even with massive heaps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AOT Class Loading&lt;/strong&gt; — Dramatically reduce startup times by caching class loading work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're building microservices that need instant startup, teaching Java to newcomers, or running latency-sensitive applications, these features offer practical solutions to real-world challenges.&lt;/p&gt;

&lt;p&gt;Let's dive in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compact Source Files &amp;amp; Instance Main Methods
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/445" rel="noopener noreferrer"&gt;JEP 445: Unnamed Classes and Instance Main Methods &lt;/a&gt; (Preview, Java 21)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/463" rel="noopener noreferrer"&gt;JEP 463: Implicitly Declared Classes and Instance Main Methods&lt;/a&gt; (Second Preview, Java 22)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/477" rel="noopener noreferrer"&gt;JEP 477: Implicitly Declared Classes and Instance Main Methods&lt;/a&gt; (Third Preview, Java 23)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/495" rel="noopener noreferrer"&gt;JEP 495: Simple Source Files and Instance Main Methods&lt;/a&gt; (Fourth Preview, Java 24)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/512" rel="noopener noreferrer"&gt;JEP 512: Compact Source Files and Instance Main Methods&lt;/a&gt; (Final, Java 25)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 What’s New
&lt;/h3&gt;

&lt;p&gt;JEP 512 finalizes features that simplify writing small Java programs by removing boilerplate and allowing more natural entry points. It combines two ideas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Compact source files&lt;/strong&gt; — Java files that omit explicit class declarations.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Methods and fields can appear directly at the top level.&lt;/li&gt;
&lt;li&gt;The compiler implicitly wraps them in a generated class.&lt;/li&gt;
&lt;li&gt;All public types from the &lt;code&gt;java.base&lt;/code&gt; module are automatically imported.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Instance main methods&lt;/strong&gt; — Java can now start programs from instance methods (like &lt;code&gt;void main()&lt;/code&gt; or &lt;code&gt;void main(String[] args)&lt;/code&gt;), not only from &lt;code&gt;public static void main(...)&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The launcher instantiates the implicit class and calls the method automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A new helper class, &lt;code&gt;java.lang.IO&lt;/code&gt;, provides simple console I/O utilities such as &lt;code&gt;IO.println()&lt;/code&gt; and &lt;code&gt;IO.readln()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="no"&gt;IO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, world!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code compiles and runs directly — no &lt;code&gt;class&lt;/code&gt;, no &lt;code&gt;static&lt;/code&gt;, no &lt;code&gt;public&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Why It matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Makes Java friendlier for beginners and small scripts.&lt;/li&gt;
&lt;li&gt;Reduces boilerplate for quick demos, exercises, or tools.&lt;/li&gt;
&lt;li&gt;Preserves full compatibility: compact source files are still standard &lt;code&gt;.java&lt;/code&gt; files.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Compact files can’t define package statements or named classes.&lt;/li&gt;
&lt;li&gt;These files must have exactly one top-level declared class.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;IO&lt;/code&gt; methods are &lt;strong&gt;not&lt;/strong&gt; implicitly imported; you must qualify them as &lt;code&gt;IO.println()&lt;/code&gt; or use &lt;code&gt;import static IO.*&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;IDE and build tool support may vary during early adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Primitive types in patterns, &lt;code&gt;instanceof&lt;/code&gt;, and &lt;code&gt;switch&lt;/code&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/455" rel="noopener noreferrer"&gt;JEP 455: Primitive Types in Patterns, instanceof, and switch&lt;/a&gt; (Preview, Java 23)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/488" rel="noopener noreferrer"&gt;JEP 488: Primitive Types in Patterns, instanceof, and switch&lt;/a&gt; (Second Preview, Java 24)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/507" rel="noopener noreferrer"&gt;JEP 507: Primitive Types in Patterns, &lt;code&gt;instanceof&lt;/code&gt;, and &lt;code&gt;switch&lt;/code&gt;&lt;/a&gt; (Third Preview, Java 25)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 What’s new
&lt;/h3&gt;

&lt;p&gt;This JEP expands the pattern-matching, &lt;code&gt;instanceof&lt;/code&gt;, and &lt;code&gt;switch&lt;/code&gt; capabilities of Java to &lt;strong&gt;primitive types&lt;/strong&gt; (such as &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;long&lt;/code&gt;, &lt;code&gt;double&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;) — not only reference types. Key changes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allowing &lt;strong&gt;primitive type patterns&lt;/strong&gt; in both nested and top-level pattern contexts, e.g., &lt;code&gt;x instanceof int i&lt;/code&gt; or &lt;code&gt;case int i&lt;/code&gt; in &lt;code&gt;switch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Extending &lt;code&gt;instanceof&lt;/code&gt; so that it can test a value for conversion to a primitive type safely: e.g., &lt;code&gt;if (i instanceof byte b) { … }&lt;/code&gt; means “if &lt;code&gt;i&lt;/code&gt; can safely convert to &lt;code&gt;byte&lt;/code&gt; without loss”.&lt;/li&gt;
&lt;li&gt;Extending &lt;code&gt;switch&lt;/code&gt; so that the selector and case labels may be any primitive type, and &lt;code&gt;case&lt;/code&gt; patterns can bind primitives: e.g.,
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"int value: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"double value: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Aligning pattern matching uniformly across types: whether reference or primitive, you can decompose and test with patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💡 Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Improves &lt;strong&gt;uniformity and expressiveness&lt;/strong&gt;: Previously Java’s pattern matching, &lt;code&gt;instanceof&lt;/code&gt;, and &lt;code&gt;switch&lt;/code&gt; were limited or uneven when it came to primitives versus reference types. Now primitives join the party.&lt;/li&gt;
&lt;li&gt;Reduces boilerplate and error-prone code for primitive conversions and range checking: For example, the old pattern:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nc"&gt;Byte&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MIN_VALUE&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nc"&gt;Byte&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MAX_VALUE&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;…&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can now become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;…&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Enhances &lt;code&gt;switch&lt;/code&gt; flexibility: You can switch on long, float, double, boolean, etc., and use pattern guards and binding for primitives, making certain control-flow clearer and more powerful.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preview feature&lt;/strong&gt;: This capability is still under preview in Java 25, meaning the specification is finalized for now but may still change and requires &lt;code&gt;--enable-preview&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety &amp;amp; conversions&lt;/strong&gt;: The feature does &lt;em&gt;not&lt;/em&gt; introduce new implicit conversions that lose information. Patterns only match when the conversion is safe (i.e., no information loss). Developers still need to understand when a primitive value can fit into a target type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tooling / backwards compatibility&lt;/strong&gt;: Because this is preview, IDE support, build tool integration, and migration for large codebases may lag or require extra configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readability for teams&lt;/strong&gt;: While this adds expressive power, over-use in contexts not suited to pattern matching (especially primitives) might reduce clarity for developers used to more explicit code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This feature brings Java's type system and pattern matching into better alignment, making primitive types first-class citizens in modern control flow constructs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scoped Values (Preview)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/446" rel="noopener noreferrer"&gt;JEP 446: Scoped Values&lt;/a&gt; (Preview, Java 21)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/464" rel="noopener noreferrer"&gt;JEP 464: Scoped Values&lt;/a&gt; (Second Preview, Java 22)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/481" rel="noopener noreferrer"&gt;JEP 481: Scoped Values&lt;/a&gt; (Third Preview, Java 23)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/487" rel="noopener noreferrer"&gt;JEP 487: Scoped Values&lt;/a&gt; (Fourth Preview, Java 24)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/506" rel="noopener noreferrer"&gt;JEP 506: Scoped Values&lt;/a&gt; (Final, Java 25)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 What’s new
&lt;/h3&gt;

&lt;p&gt;The JEP introduces the concept of &lt;strong&gt;scoped values&lt;/strong&gt; — immutable values that can be bound to a thread (and its descendant tasks) for a well-defined lifetime, allowing code deep in a call chain to access context without explicitly passing parameters.&lt;br&gt;
Key characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A scoped value is created via &lt;code&gt;ScopedValue.newInstance()&lt;/code&gt; and bound for execution via something like &lt;code&gt;ScopedValue.where(USER, value).run(…)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inside that dynamic scope, any method — even far down the stack or running in a child thread (via structured concurrency) — can call &lt;code&gt;V.get()&lt;/code&gt; and retrieve the bound value.&lt;/li&gt;
&lt;li&gt;The binding has a &lt;strong&gt;bounded lifetime&lt;/strong&gt;: once &lt;code&gt;run(...)&lt;/code&gt; completes, the binding ends and &lt;code&gt;V.get()&lt;/code&gt; becomes invalid (or must be checked).&lt;/li&gt;
&lt;li&gt;Scoped values are preferred over &lt;code&gt;ThreadLocal&lt;/code&gt; for many use-cases: they require immutable data, allow sharing across virtual threads efficiently, and trace the lifetime of the binding in the code structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code sample&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;ScopedValue&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;USER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ScopedValue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newInstance&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;handleRequest&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Request&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="cm"&gt;/* extract user id from req */&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;ScopedValue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;USER&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
               &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="o"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;processRequest&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;processRequest&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Request&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Current user: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="no"&gt;USER&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="c1"&gt;// deeper calls can also see USER.get() without passing userId explicitly&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cleaner argument passing&lt;/strong&gt;: Instead of threading contextual data (like user IDs, request-context, tracing IDs) through many method parameters, scoped values let you bind once and let nested methods access when needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better suitability for many threads (including virtual threads)&lt;/strong&gt;: Because the data is immutable and the lifetime is bounded, there’s far less memory overhead versus thread-locals in large-scale concurrent systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved reasoning&lt;/strong&gt;: The dynamic scope is explicit in the code (via the &lt;code&gt;where().run()&lt;/code&gt; structure), so it’s easier to understand when the data is valid, and when it is not. This contrasts with thread-locals that may leak or remain bound beyond desired lifetimes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;As a &lt;strong&gt;preview&lt;/strong&gt; feature, the API or semantics may change in future releases.&lt;/li&gt;
&lt;li&gt;Scoped values are &lt;strong&gt;immutable&lt;/strong&gt; once bound; they are not a replacement for thread-locals in cases where you need mutable per-thread state or long-lived caching.&lt;/li&gt;
&lt;li&gt;Code needs to ensure that &lt;code&gt;get()&lt;/code&gt; is only called within a valid bound scope; outside that, an exception may be thrown (or &lt;code&gt;isBound()&lt;/code&gt; should be checked).&lt;/li&gt;
&lt;li&gt;Tooling, frameworks, and IDE support may lag since this is in preview; plus, migrating from existing thread-local heavy code will need careful design.&lt;/li&gt;
&lt;li&gt;Scopes propagate to child threads only when using compatible concurrency constructs (such as via the preview structured concurrency features) — simple new Threads might not inherit the binding automatically unless explicitly supported.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ZGC: Low-latency garbage collector
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/333" rel="noopener noreferrer"&gt;JEP 333: ZGC: A Scalable Low-Latency Garbage Collector&lt;/a&gt; (Experimental, Java 11)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/351" rel="noopener noreferrer"&gt;JEP 351: ZGC: Uncommit Unused Memory&lt;/a&gt; (Experimental, Java 13)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/377" rel="noopener noreferrer"&gt;JEP 377: ZGC: A Scalable Low-Latency Garbage Collector&lt;/a&gt; (Production, Java 15)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/439" rel="noopener noreferrer"&gt;JEP 439: Generational ZGC&lt;/a&gt; (Final, Java 21)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/474" rel="noopener noreferrer"&gt;JEP 474: ZGC: Generational Mode by Default&lt;/a&gt; (Java 23)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/490" rel="noopener noreferrer"&gt;JEP 490: ZGC: Remove the Non-Generational Mode&lt;/a&gt; (Java 24)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ZGC (Z Garbage Collector) is a &lt;strong&gt;low-latency, concurrent GC&lt;/strong&gt; designed to keep pause times below &lt;strong&gt;1 ms&lt;/strong&gt;, regardless of heap size. It supports heaps from MBs to &lt;strong&gt;multi-terabyte&lt;/strong&gt; ranges and is fully production-ready since &lt;strong&gt;JDK 15&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 What it does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Performs &lt;strong&gt;most GC work concurrently&lt;/strong&gt; with the application.&lt;/li&gt;
&lt;li&gt;Uses &lt;strong&gt;colored pointers&lt;/strong&gt; and &lt;strong&gt;load barriers&lt;/strong&gt; to relocate objects without long stop-the-world pauses.&lt;/li&gt;
&lt;li&gt;From &lt;strong&gt;JDK 21&lt;/strong&gt;, supports &lt;strong&gt;Generational ZGC (JEP 439)&lt;/strong&gt; for better throughput in allocation-heavy workloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enable it via:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-XX&lt;/span&gt;:+UseZGC &lt;span class="nt"&gt;-Xmx8g&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ideal for &lt;strong&gt;latency-sensitive&lt;/strong&gt; systems (finance, real-time analytics).&lt;/li&gt;
&lt;li&gt;Scales efficiently to &lt;strong&gt;very large heaps&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Requires &lt;strong&gt;minimal tuning&lt;/strong&gt; compared to older collectors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Slightly higher memory overhead due to concurrent design.&lt;/li&gt;
&lt;li&gt;Throughput may be a bit lower than G1 in CPU-bound tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ahead-of-time class loading &amp;amp; linking
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key Jeps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/483" rel="noopener noreferrer"&gt;JEP 483: Ahead-of-Time Class Loading &amp;amp; Linking&lt;/a&gt; (Final, Java 24)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 What the JEP does
&lt;/h3&gt;

&lt;p&gt;JEP 483 introduces a JVM feature that allows Java applications to &lt;strong&gt;load and link classes ahead of time&lt;/strong&gt;, then store that state in a cache for later runs. The goal is to &lt;strong&gt;reduce startup time&lt;/strong&gt; by shifting part of the class-loading work from runtime to a prior “training” phase.&lt;/p&gt;

&lt;p&gt;Essentially:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You run your application once (a “training run”) to record which classes are loaded and linked.&lt;/li&gt;
&lt;li&gt;You create an &lt;strong&gt;AOT cache&lt;/strong&gt; (archive) containing that information.&lt;/li&gt;
&lt;li&gt;On the next startup, the JVM reuses that cache, skipping much of the load/link process to start faster.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  💡 Why it matters
&lt;/h3&gt;

&lt;p&gt;Applications, especially large frameworks like Spring, spend noticeable time at startup loading and linking classes. By caching this work, the JVM can &lt;strong&gt;cut startup time dramatically&lt;/strong&gt;—benchmarks show up to around 40% improvement in some cases.&lt;/p&gt;

&lt;p&gt;Because this mechanism works &lt;strong&gt;without changing your code&lt;/strong&gt;, it’s easy to adopt in existing projects. It also supports Java’s broader effort to improve startup and footprint, especially for &lt;strong&gt;cloud-native and serverless&lt;/strong&gt; workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ How it works (high Level)
&lt;/h3&gt;

&lt;p&gt;JEP 483 makes it possible for Java to &lt;strong&gt;load and link classes ahead of time&lt;/strong&gt;, caching that work for faster subsequent startups. It’s a simple yet powerful feature for improving startup performance in modern Java applications—particularly useful for microservices, short-lived workloads, and cloud deployments. Here is how it works (you need to have the jar file of your app with the Manifest file):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Training phase:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  java &lt;span class="nt"&gt;-XX&lt;/span&gt;:AOTMode&lt;span class="o"&gt;=&lt;/span&gt;record &lt;span class="nt"&gt;-XX&lt;/span&gt;:AOTConfiguration&lt;span class="o"&gt;=&lt;/span&gt;app.aotconf &lt;span class="nt"&gt;-cp&lt;/span&gt; app.jar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This records which classes are loaded and linked.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cache creation phase:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  java &lt;span class="nt"&gt;-XX&lt;/span&gt;:AOTMode&lt;span class="o"&gt;=&lt;/span&gt;create &lt;span class="nt"&gt;-XX&lt;/span&gt;:AOTConfiguration&lt;span class="o"&gt;=&lt;/span&gt;app.aotconf &lt;span class="nt"&gt;-XX&lt;/span&gt;:AOTCache&lt;span class="o"&gt;=&lt;/span&gt;app.aot &lt;span class="nt"&gt;-cp&lt;/span&gt; app.jar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates the AOT cache file &lt;code&gt;app.aot&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Production run:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  java &lt;span class="nt"&gt;-XX&lt;/span&gt;:AOTCache&lt;span class="o"&gt;=&lt;/span&gt;app.aot &lt;span class="nt"&gt;-cp&lt;/span&gt; app.jar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The JVM uses the cache to start up faster. If the cache isn’t valid, it gracefully falls back to normal startup.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;classpath and module configuration&lt;/strong&gt; during the training phase must match those used later.&lt;/li&gt;
&lt;li&gt;The optimization targets &lt;strong&gt;startup performance&lt;/strong&gt;, not runtime throughput.&lt;/li&gt;
&lt;li&gt;The training and caching workflow adds a bit of setup overhead, especially in containerized or CI/CD environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The features covered in this article reflect Java's commitment to staying relevant in a rapidly changing software landscape. From &lt;strong&gt;compact source files&lt;/strong&gt; that make Java approachable for beginners and scripters, to &lt;strong&gt;ZGC&lt;/strong&gt; delivering microsecond-level pause times for demanding production workloads—these aren't just incremental improvements. They represent fundamental shifts in how we can use Java.&lt;/p&gt;

&lt;p&gt;Java continues to evolve rapidly, balancing its enterprise heritage with modern development needs. Whether you're building cloud-native microservices, teaching programming fundamentals, or optimizing high-frequency trading systems, these features provide concrete solutions to real problems.&lt;/p&gt;

</description>
      <category>java</category>
      <category>performance</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Hyperskill's Coding Christmas Challenge🎄</title>
      <dc:creator>Igor Kirillov</dc:creator>
      <pubDate>Tue, 23 Dec 2025 12:46:57 +0000</pubDate>
      <link>https://forem.com/hyperskill_academy/hyperskills-coding-christmas-challenge-4f00</link>
      <guid>https://forem.com/hyperskill_academy/hyperskills-coding-christmas-challenge-4f00</guid>
      <description>&lt;p&gt;Fresh snow outside. Warm lights inside. The quiet days between Christmas and New Year stretch ahead like a blank canvas. You've got time between celebrations, and your mind is already reaching for something to build.&lt;/p&gt;

&lt;p&gt;Why not enhance your skills in &lt;strong&gt;12 Days of Coding challenge&lt;/strong&gt; — a festive journey created for Hyperskill learners that runs from December 25th through January 5th? It's part puzzle, part celebration, and entirely about rediscovering the joy of programming during the most magical time of year.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;The holidays are a unique time. Everyone slows down, but our minds don't. I wanted to create something for those quiet moments between family gatherings, when you're sipping cocoa and feel like solving something elegant. Not a work project. Not a deadline. Just pure problem-solving for the love of it.&lt;br&gt;
This challenge is my gift to the community: 12 days of puzzles that make you think, smile, and remember why you fell in love with code in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Countdown Tradition
&lt;/h2&gt;

&lt;p&gt;There's something special about counting down days during the holidays. Advent calendars, New Year's Eve countdowns — we mark time differently in these weeks. Each day feels significant. Each challenge in this series follows that rhythm, building momentum as we transition from one year to the next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;p&gt;This challenge is for developers who want to stay sharp during the break without the pressure of real work. Maybe you're on vacation. Maybe you're between projects. Maybe you just enjoy a good puzzle with your morning coffee.&lt;br&gt;
The difficulty curve is gentle but rewarding. If you can write a for-loop and understand basic logic, you can solve every single challenge. Some might take longer than others, but that's part of the journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Hope You'll Get From It
&lt;/h2&gt;

&lt;p&gt;I want you to close your laptop after each challenge feeling satisfied. That "aha!" moment when the solution clicks. That reminder that programming can be playful, creative, and deeply rewarding outside of sprint planning and code reviews.&lt;br&gt;
Plus, complete all 12 days and you'll earn an exclusive profile cover, gems, and maybe even some secret rewards from our partners, which I won't reveal just yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technical Side
&lt;/h2&gt;

&lt;p&gt;I built everything in Python because it's my comfort zone, but I deliberately designed each challenge to be language-agnostic. Whether you're a JavaScript developer, a Java enthusiast, or exploring something new like Rust or Go — the logic works everywhere.&lt;br&gt;
Use whatever tools make you happy. Your IDE, our playground, a text editor and terminal. This is your challenge, your way.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Peek Behind the Curtain
&lt;/h2&gt;

&lt;p&gt;Special little spoiler for dev.to readers: we're going full algorithm crash course mode this year. Await tasks that rely on the most popular computational theory questions. Good for refreshing your knowledge from that one CompSci class you completely forgot about! Can't wait to see you rebuilding Dijkstra's algorithm in your favorite language.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Join
&lt;/h2&gt;

&lt;p&gt;If this sounds like your kind of holiday tradition, here's how to start:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up to Hyperskill - &lt;a href="https://hyperskill.org" rel="noopener noreferrer"&gt;https://hyperskill.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Find &lt;strong&gt;12 Days of Coding Challenge&lt;/strong&gt; in &lt;strong&gt;My Learning&lt;/strong&gt; or your &lt;strong&gt;Study Plan&lt;/strong&gt; and begin with Day 1&lt;/li&gt;
&lt;li&gt;Join our &lt;a href="https://discord.com/invite/ut6nEqu" rel="noopener noreferrer"&gt;Discord community&lt;/a&gt; and visit the #12-days-of-coding channel for hints and camaraderie&lt;/li&gt;
&lt;li&gt;Code in any language that brings you joy — use your favorite setup or try our playground&lt;/li&gt;
&lt;li&gt;Most importantly: enjoy the journey!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Happy coding, and happy holidays!🎄&lt;/p&gt;

</description>
      <category>coding</category>
      <category>devchallenge</category>
      <category>learning</category>
    </item>
    <item>
      <title>Modern Java Evolution: Part 1 - From Java 22 to 25</title>
      <dc:creator>Vahram Papazyan</dc:creator>
      <pubDate>Mon, 22 Dec 2025 09:10:02 +0000</pubDate>
      <link>https://forem.com/hyperskill_academy/modern-java-evolution-part-1-from-java-22-to-25-37j7</link>
      <guid>https://forem.com/hyperskill_academy/modern-java-evolution-part-1-from-java-22-to-25-37j7</guid>
      <description>&lt;p&gt;Java has undergone a transformative evolution from versions 22 through 25, introducing features that significantly enhance readability, performance, native interop, and structured concurrency. This article breaks down key JEPs from recent releases, grouped by theme, and highlights both their benefits and potential considerations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4xmy4ov8yp6ektej0to.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4xmy4ov8yp6ektej0to.png" alt=" " width="500" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Flexible Constructor Bodies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/447" rel="noopener noreferrer"&gt;JEP 447: Statements before &lt;code&gt;super(...)&lt;/code&gt;&lt;/a&gt; (Preview, Java 22)  
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/482" rel="noopener noreferrer"&gt;JEP 482: Flexible Constructor Bodies&lt;/a&gt; (Second Preview, Java 23)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/492" rel="noopener noreferrer"&gt;JEP 492: Flexible Constructor Bodies&lt;/a&gt; (Third Preview, Java 24)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 What’s New
&lt;/h3&gt;

&lt;p&gt;Traditionally, Java required that the first line in a constructor must be a call to &lt;code&gt;super(...)&lt;/code&gt;. These JEPs progressively relax that restriction, allowing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Preliminary statements (e.g., input validation, logging) before calling &lt;code&gt;super(...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Explicit control flow logic before initializing the superclass.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is what it looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Student&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;Student&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isBlank&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Name cannot be null or blank"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Validated name: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="kd"&gt;super&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Why It Matters
&lt;/h3&gt;

&lt;p&gt;This aligns Java with more intuitive OOP practices, particularly in constructors, where argument validation is often required. It enables safer, more flexible class hierarchies.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;p&gt;Developers must still ensure that fields are not accessed before full initialization, preserving constructor safety.&lt;/p&gt;

&lt;h2&gt;
  
  
  Foreign Function &amp;amp; Memory API
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/424" rel="noopener noreferrer"&gt;JEP 424: Foreign Function &amp;amp; Memory API&lt;/a&gt; (First Preview, Java 19)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/454" rel="noopener noreferrer"&gt;JEP 454: Foreign Function &amp;amp; Memory API&lt;/a&gt; (Stable, Java 22) &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 What’s New
&lt;/h3&gt;

&lt;p&gt;This API replaces JNI with a safer, more efficient, and idiomatic way to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Call native (C/C++) libraries.&lt;/li&gt;
&lt;li&gt;Allocate and manage memory off-heap using &lt;code&gt;MemorySegment&lt;/code&gt;, &lt;code&gt;MemoryLayout&lt;/code&gt;, and &lt;code&gt;Linker&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Arena&lt;/span&gt; &lt;span class="n"&gt;arena&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Arena&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofConfined&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;MemorySegment&lt;/span&gt; &lt;span class="n"&gt;segment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arena&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;allocate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Use memory directly&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Foreign Function &amp;amp; Memory API (FFM API) defines classes and interfaces so that client code in&lt;br&gt;
libraries and applications can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Control the allocation and deallocation of foreign memory
(&lt;code&gt;MemorySegment&lt;/code&gt;, &lt;code&gt;Arena&lt;/code&gt;, and &lt;code&gt;SegmentAllocator&lt;/code&gt;),&lt;/li&gt;
&lt;li&gt;Manipulate and access structured foreign memory (&lt;code&gt;MemoryLayout&lt;/code&gt; and &lt;code&gt;VarHandle&lt;/code&gt;), and&lt;/li&gt;
&lt;li&gt;Call foreign functions (&lt;code&gt;Linker&lt;/code&gt;, &lt;code&gt;SymbolLookup&lt;/code&gt;, &lt;code&gt;FunctionDescriptor&lt;/code&gt;, and &lt;code&gt;MethodHandle&lt;/code&gt;).
The FFM API resides in the java.lang.foreign package of the java.base module.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  💡 Why It Matters
&lt;/h3&gt;

&lt;p&gt;Java can now operate with native libraries without boilerplate JNI code. This is huge for performance-sensitive&lt;br&gt;
applications like machine learning, image processing, and systems integration.&lt;/p&gt;
&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;p&gt;Still evolving, and requires an understanding of low-level memory and ABI (Application Binary Interface) details. Avoid misuse that could cause memory leaks or segmentation faults.&lt;/p&gt;
&lt;h2&gt;
  
  
  Unnamed Variables &amp;amp; Patterns
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/443" rel="noopener noreferrer"&gt;JEP 443: Unnamed Patterns and Variables&lt;/a&gt; (Preview, Java 21)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/456" rel="noopener noreferrer"&gt;JEP 456: Unnamed Variables &amp;amp; Patterns&lt;/a&gt; (Final, Java 22) &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🔍 What’s New
&lt;/h3&gt;

&lt;p&gt;You can now use &lt;code&gt;_&lt;/code&gt; as a placeholder in places where a variable is syntactically &lt;br&gt;
required, but the actual value is not used. Here is what this JEP adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;unnamed variable&lt;/strong&gt;, declared by using an underscore character, _ (U+005F), to stand in for the name of the local variable in a local variable declaration statement, or an exception parameter in a catch clause, or a lambda parameter in a lambda expression.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// some risky code&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;IOException&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"I/O error occurred"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;unnamed pattern variable&lt;/strong&gt;, declared by using an underscore character to stand in for the pattern variable in a type pattern.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"It's a string, but we don't care about the value."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;unnamed pattern&lt;/strong&gt;, denoted by an underscore character, is equivalent to the unnamed type pattern &lt;code&gt;var _&lt;/code&gt;. It allows both the type and name of a record component to be elided in pattern matching.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="nf"&gt;Point&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt;

&lt;span class="nc"&gt;Point&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Point&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nf"&gt;Point&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Matched, but ignored both fields."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;⚠️ Important: You cannot use &lt;code&gt;_&lt;/code&gt; more than once in the same pattern expression. For example, &lt;code&gt;if (p instanceof Point(_, _))&lt;/code&gt; is not allowed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  💡 Why It Matters
&lt;/h3&gt;

&lt;p&gt;This is a small syntax change with big readability improvements, especially in exhaustive pattern matching or placeholder variables.&lt;/p&gt;
&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;p&gt;Overusing _ may make the code obscure. Use it where the intention is clear.&lt;/p&gt;
&lt;h2&gt;
  
  
  Stream Gatherers
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/461" rel="noopener noreferrer"&gt;JEP 461: Stream Gatherers&lt;/a&gt; (First Preview, Java 22)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/473" rel="noopener noreferrer"&gt;JEP 473: Stream Gatherers&lt;/a&gt; (Second Preview, Java 23)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/485" rel="noopener noreferrer"&gt;JEP 485: Stream Gatherers&lt;/a&gt; (Final, Java 24)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🔍 What’s New
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Stream.gather()&lt;/code&gt; introduces a mechanism to support intermediate stream operation that processes the elements of a stream by applying a user-defined entity called a gatherer. With the gather operation, we can build efficient, parallel-ready streams that implement almost any intermediate operation. This &lt;code&gt;gather&lt;/code&gt; method is to intermediate operations what &lt;code&gt;Stream::collect(Collector)&lt;/code&gt; is to terminal operations.&lt;/p&gt;

&lt;p&gt;An example of a built-in gatherer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;grouped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;gather&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;windowFixed&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;grouped&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also define a custom gatherer and use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Why It Matters
&lt;/h3&gt;

&lt;p&gt;This allows complex grouping, windowing, buffering, and merging logic to be cleanly expressed in the Stream API, e.g., batching or handling sliding windows, making stream pipelines more flexible and expressive.&lt;/p&gt;

&lt;p&gt;⚠️ Considerations:&lt;br&gt;
It adds complexity. Understanding Gatherer mechanics (accumulator, finisher) takes practice.&lt;/p&gt;
&lt;h2&gt;
  
  
  Structured Concurrency
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/453" rel="noopener noreferrer"&gt;JEP 453: Structured Concurrency&lt;/a&gt; (First Preview, Java 21)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/462" rel="noopener noreferrer"&gt;JEP 462: Structured Concurrency&lt;/a&gt; (Second Preview, Java 22)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/480" rel="noopener noreferrer"&gt;JEP 480: Structured Concurrency&lt;/a&gt; (Third Preview, Java 23)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/499" rel="noopener noreferrer"&gt;JEP 499: Structured Concurrency&lt;/a&gt; (Fourth Preview, Java 24)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/505" rel="noopener noreferrer"&gt;JEP 505: Structured Concurrency&lt;/a&gt; (Fifth Preview, Java 25) &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🔍 What’s New
&lt;/h3&gt;

&lt;p&gt;Structured concurrency is an approach to concurrent programming that preserves the natural relationship between tasks and subtasks, which leads to more readable, maintainable, and reliable concurrent code. It treats concurrent tasks as a structured unit of work—bound together by lifecycle and failure policies. It introduces APIs like &lt;code&gt;StructuredTaskScope&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Structured concurrency derives from a simple principle: If a task splits into concurrent subtasks then they all return to the same place, namely the task's code block.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Response&lt;/span&gt; &lt;span class="nf"&gt;handle&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;InterruptedException&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StructuredTaskScope&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;open&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Subtask&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fork&lt;/span&gt;&lt;span class="o"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;findUser&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="nc"&gt;Subtask&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fork&lt;/span&gt;&lt;span class="o"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;fetchOrder&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;

        &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;join&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;   &lt;span class="c1"&gt;// Join subtasks, propagating exceptions&lt;/span&gt;

        &lt;span class="c1"&gt;// Both subtasks have succeeded, so compose their results&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Why It Matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Makes parallel code easier to reason about.
&lt;/li&gt;
&lt;li&gt;Simplifies error handling, cancellation propagation, and resource management.
&lt;/li&gt;
&lt;li&gt;Promotes better structured and maintainable multithreaded applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ Considerations:&lt;br&gt;
Still under preview (5th round). Developers must migrate gradually and understand ForkJoin-based semantics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Module Import Declarations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key JEPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/476" rel="noopener noreferrer"&gt;JEP 476: Module Import Declarations&lt;/a&gt; (Preview, Java 23)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/494" rel="noopener noreferrer"&gt;JEP 494: Module Import Declarations&lt;/a&gt; (Second Preview, Java 24)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openjdk.org/jeps/511" rel="noopener noreferrer"&gt;JEP 511: Module Import Declarations&lt;/a&gt; (Final, Java 24) &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 What’s New
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Module import declarations&lt;/strong&gt; allow a Java source file to declare which &lt;strong&gt;modules&lt;/strong&gt; it depends on — directly in the source code.&lt;/p&gt;

&lt;p&gt;Instead of relying solely on the module system (via &lt;code&gt;module-info.java&lt;/code&gt;) or command-line options to express module dependencies, developers can now specify module usage within individual &lt;code&gt;.java&lt;/code&gt; files using the new &lt;code&gt;import module&lt;/code&gt; syntax.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Syntax Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;module&lt;/span&gt; &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;graphics&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.example.graphics.Image&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells the compiler that this file uses types from the &lt;code&gt;com.example.graphics&lt;/code&gt; module.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Why It Matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simplifies modular development: Especially useful for small programs, scripts, or single-source-file applications.&lt;/li&gt;
&lt;li&gt;Reduces boilerplate: No need for a separate &lt;code&gt;module-info.java&lt;/code&gt; just to use a few modules.&lt;/li&gt;
&lt;li&gt;Improves clarity: The source file shows all its external module dependencies up front.&lt;/li&gt;
&lt;li&gt;Enables better tooling: IDEs and compilers can provide better feedback and autocomplete when module dependencies are declared explicitly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Using one or more module import declarations leads to a risk of name ambiguity due to different packages declaring members with the same simple name&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;From enabling pre-super() logic to opening Java to native interop and empowering concurrent designs, these JEPs collectively represent Java’s steady transformation into a modern, expressive, and high-performance platform. While many of these features are still in preview, developers are encouraged to explore them now to prepare for their production maturity in the near future.&lt;/p&gt;

</description>
      <category>java</category>
      <category>learning</category>
      <category>programming</category>
    </item>
    <item>
      <title>Hyperskill's Fright Night Coding Challenge🎃</title>
      <dc:creator>Igor Kirillov</dc:creator>
      <pubDate>Wed, 22 Oct 2025 12:06:23 +0000</pubDate>
      <link>https://forem.com/hyperskill_academy/hyperskills-fright-night-coding-challenge-3o9e</link>
      <guid>https://forem.com/hyperskill_academy/hyperskills-fright-night-coding-challenge-3o9e</guid>
      <description>&lt;p&gt;A miserable autumn day. Rain and gray skies. Two vacation days that aren't enough for the beach, but enough to visit your old uncle in the middle of nowhere. Wrong turns. A dead GPS. Then — a pop, a hiss. Your tire quits.&lt;/p&gt;

&lt;p&gt;This is how Day 1 of the &lt;strong&gt;Fright Night coding challenge&lt;/strong&gt; begins — a 10-day journey created for Hyperskill learners that runs from October 22nd through October 31st. It's part puzzle, part story, and entirely about rediscovering why programming is fun.&lt;/p&gt;

&lt;p&gt;Here's what inspired it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;I really love all kinds of puzzles and riddles. I think programming is the perfect sandbox for creating your own puzzles, because the possibilities are endless, and you can solve problems even knowing the language at a surface level — the main thing is being able to recognize algorithms and patterns.&lt;/p&gt;

&lt;p&gt;For me, coding isn't just about business logic and production deployments. It's a hobby. It's a playground. And I wanted to create something that reminded other developers of that too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rocky Horror Connection
&lt;/h2&gt;

&lt;p&gt;When I was designing this challenge, I kept thinking about my favorite film — the horror musical Rocky Horror Picture Show. I think those who go through the challenge will definitely notice the parallels. I won't spoil what they are, but keep your eyes open for Easter eggs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;p&gt;This challenge is for everyone who understands that programming is not only writing code for business tasks, but also a very fun hobby.&lt;/p&gt;

&lt;p&gt;I tried to make the tasks as accessible as possible for all levels of developers. For some, it will just take a little more time to figure it out. The minimum requirement is simple: know any programming language well enough to understand a for-loop. That's it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Hope You'll Get From It
&lt;/h2&gt;

&lt;p&gt;I hope that all programmers who participate in the challenge will have a good time. The tasks will help them remember algorithms and language elements they haven't used in a long time.&lt;/p&gt;

&lt;p&gt;And if you complete all 10 challenges, you'll earn a unique profile cover, a bag of gems, and exclusive rewards from our partners.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technical Side
&lt;/h2&gt;

&lt;p&gt;Everything from start to finish was conceived, developed, and tested in Python. But our challenge is specifically designed so that it can be comfortably solved in any programming language.&lt;/p&gt;

&lt;p&gt;You can use Python, JavaScript, Java — whatever you're comfortable with. &lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned Building This
&lt;/h2&gt;

&lt;p&gt;I once again became convinced of how difficult it can be to describe even the simplest task in a way that is understandable to the maximum number of people. I learned to better abstract from my code and look at the task I just wrote from the outside. This is very valuable, especially for those who often interact with other developers and assign them tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Peek Behind the Curtain
&lt;/h2&gt;

&lt;p&gt;I don't want to spoil it, but closer to the end there will be one good task for finding the shortest path, for which I had to write a procedurally generated map. It was fun.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Day 1 Looks Like
&lt;/h2&gt;

&lt;p&gt;The code to the gates is four digits. It is the first, the second, the third and the fourth most common digit in today's sequence, in that particular order. If there are equal number of appearances, higher digit should come first.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Join
&lt;/h2&gt;

&lt;p&gt;If this sounds interesting, here's what you need to do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up to &lt;a href="https://hyperskill.org/" rel="noopener noreferrer"&gt;Hyperskill&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Find Fright Night Challenge in My Learning and start with Day 1&lt;/li&gt;
&lt;li&gt;Join our &lt;a href="https://discord.com/invite/ut6nEqu" rel="noopener noreferrer"&gt;Discord community&lt;/a&gt; and check out the #fright-night-coding channel for hints if you feel stuck&lt;/li&gt;
&lt;li&gt;Use any programming language you want —  write and run code in IDE of your choice or use our code playground&lt;/li&gt;
&lt;li&gt;Have fun!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Happy coding, and happy Halloween. 🎃&lt;/p&gt;

</description>
      <category>halloween</category>
      <category>challenge</category>
      <category>programming</category>
      <category>learning</category>
    </item>
    <item>
      <title>5 Python Courses That Help You Build Portfolio-Worthy Projects</title>
      <dc:creator>Lada Petrushenko</dc:creator>
      <pubDate>Fri, 17 Oct 2025 19:31:13 +0000</pubDate>
      <link>https://forem.com/hyperskill_academy/5-python-courses-that-help-you-build-portfolio-worthy-projects-4anh</link>
      <guid>https://forem.com/hyperskill_academy/5-python-courses-that-help-you-build-portfolio-worthy-projects-4anh</guid>
      <description>&lt;p&gt;Hi, I’m Lada — Content Project Manager at Hyperskill.&lt;/p&gt;

&lt;p&gt;One of the questions we get a lot from our students is: &lt;strong&gt;“Which Python course should I start with?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's a fair question. We have several Python courses, and yes, they overlap. Each one focuses on different goals and project types, but many topics show up across multiple courses. The good news? If you've already completed a topic in one course, it automatically counts toward another. So you're never redoing work.&lt;/p&gt;

&lt;p&gt;Whether you're starting from zero or building on what you already know, you can choose any course and move at your own pace. The main difference is how deep you want to go — and what skills you need right now.&lt;/p&gt;

&lt;p&gt;Here's how to figure out which Python course fits you best.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Course&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Project Examples&lt;/th&gt;
&lt;th&gt;What You’ll Learn&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/6-introduction-to-python" rel="noopener noreferrer"&gt;Python Fundamentals with Practical Projects&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complete beginners&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/175" rel="noopener noreferrer"&gt;Bill splitter&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/97" rel="noopener noreferrer"&gt;Chatbot&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Variables, loops, functions, PyCharm basics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/22-python-core" rel="noopener noreferrer"&gt;Python Core&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Learners ready to go deeper&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/80" rel="noopener noreferrer"&gt;Password hacker&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/127" rel="noopener noreferrer"&gt;Flashcards&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;OOP, data structures, testing, multithreading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/2-python-developer" rel="noopener noreferrer"&gt;Python Developer&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Career switchers&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/112" rel="noopener noreferrer"&gt;Code analyzer&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/145" rel="noopener noreferrer"&gt;Web scraper&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/99" rel="noopener noreferrer"&gt;Translator&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Databases, web tech, Docker, design patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/94-python-backend-developer-with-django" rel="noopener noreferrer"&gt;Python Backend Developer with Django&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Future backend devs&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/85" rel="noopener noreferrer"&gt;Service center&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/255" rel="noopener noreferrer"&gt;HyperSchool&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Django REST, Redis, deployment, testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hyperskill.org/courses/54-python-with-algorithms-for-tech-interviews" rel="noopener noreferrer"&gt;Python with Algorithms for Tech Interviews&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Interview prep&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hyperskill.org/projects/307" rel="noopener noreferrer"&gt;Sorting tool&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/381" rel="noopener noreferrer"&gt;Password checker&lt;/a&gt; / &lt;a href="https://hyperskill.org/projects/92" rel="noopener noreferrer"&gt;PageRank&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Classic algorithms, problem-solving&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Note: Each course includes more projects than shown here — these are just some highlights.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Courses
&lt;/h2&gt;




&lt;h3&gt;
  
  
  Python Fundamentals with Practical Projects
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;CV-ready skills:&lt;/em&gt;&lt;/strong&gt; Python, PyCharm, Git, debugging, functions, data types, control structures, basic problem-solving.&lt;/p&gt;

&lt;p&gt;This is where you should start if you've never coded before.&lt;br&gt;
You’ll learn the basics — variables, data types, loops, conditionals, functions, and error handling — and get comfortable with PyCharm, a popular Python development tool.&lt;/p&gt;

&lt;p&gt;You’ll also build small projects like a bill splitter for your next group dinner or a chatbot that could help customers on a website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if:&lt;/strong&gt; You've never written a line of code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What learners say:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It is a great course with a strong theoretical focus and excellent practical assignments and projects that will help you develop your skills through hands-on experience." — Oleksii Savenko&lt;/p&gt;

&lt;p&gt;"I came into this without a single piece of information about Python, besides knowing it's a programming language. This course was great for teaching and mastering not only the basics but also building on those basics as a foundation to actively solve problems and create projects. I liked how the problems weren't too long or overwhelming, and that I didn't have to read a novel or watch multiple hours of videos to learn a topic." — Fahad Rahu&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Python Core
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;CV-ready skills:&lt;/em&gt;&lt;/strong&gt; Object-oriented programming, data structures, algorithms, testing (unittest/pytest), multithreading, version control, code architecture.&lt;/p&gt;

&lt;p&gt;Once you're past the fundamentals, Python Core takes you deeper into the language.&lt;/p&gt;

&lt;p&gt;Beyond basic syntax, you'll explore algorithms, data structures, object-oriented programming, and testing. You'll also dive into advanced topics like multithreading and become familiar with essential tools, including Jupyter Notebook, PyCharm, and GitHub.&lt;br&gt;
This course is great for building a solid foundation so you can choose your path later — whether that's backend development, data science, or something else. &lt;/p&gt;

&lt;p&gt;The projects here show that you understand not just syntax, but how to structure code properly. That's what hiring managers look for when they review portfolios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if:&lt;/strong&gt; You know basic Python and want to understand how things work under the hood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What learners say:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have learned essential Python programming concepts, including syntax, data processing techniques, and object-oriented programming principles. This course has significantly improved my ability to use standard and third-party libraries to enhance code functionality and efficiency. Additionally, I have gained experience in implementing automated tests to ensure code quality." — Evgenii Morgunov&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Python Developer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;CV-ready skills:&lt;/em&gt;&lt;/strong&gt; Database design (SQL/NoSQL), web scraping, REST APIs, Docker, ORM (SQLAlchemy), design patterns, performance tuning, automation.&lt;/p&gt;

&lt;p&gt;This course assumes you already understand Python syntax and want to see how it fits into real projects.&lt;/p&gt;

&lt;p&gt;You'll expand on core Python knowledge and explore the broader ecosystem around it. The course covers databases (SQL, NoSQL, MongoDB), web technologies (HTML, CSS, Requests, BeautifulSoup), design patterns, performance optimization, and developer tools such as Docker and SQLAlchemy.&lt;/p&gt;

&lt;p&gt;You’ll build projects like a static code analyzer (to catch bugs in your own code), a memorization tool (to help you study or learn new languages), and a multilingual online translator (that works a lot like Google Translate). They’re real applications that you can showcase in job interviews or use to demonstrate your technical skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if:&lt;/strong&gt; You want to work as a Python developer and need to understand the full development workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What learners say:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"5 stars because this was the course with the most practical applications that I have ever done." — Thomas Buchberger&lt;/p&gt;

&lt;p&gt;"During this course, I learned both basic and advanced features of the Python programming language. I gained experience in problem-solving and code development through challenging and interesting projects." — Andrei Raugas&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Python Backend Developer with Django
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;CV-ready skills:&lt;/strong&gt;&lt;/em&gt; Django, Django REST Framework, ORM design, Redis, Pytest, deployment, REST APIs, database optimization, authentication, production best practices.&lt;/p&gt;

&lt;p&gt;If you want to build web applications, this is the course that gets you there.&lt;/p&gt;

&lt;p&gt;Django is a popular Python framework for backend development, and this course covers it thoroughly. You learn Django's ORM, templates, and admin interface, but also the ecosystem around it: APIs with Django REST Framework, caching with Redis, testing with Pytest, and deployment best practices.&lt;/p&gt;

&lt;p&gt;By the end, you'll have full-stack Django applications in your portfolio — real web apps with databases, APIs, and proper testing. That's exactly what companies want to see when they're hiring backend developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if:&lt;/strong&gt; You're aiming for backend developer roles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python with Algorithms for Tech Interviews
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;CV-ready skills:&lt;/em&gt;&lt;/strong&gt; object-oriented programming, data structures, algorithms, testing (unittest/pytest), multithreading, version control, code architecture.&lt;/p&gt;

&lt;p&gt;In this course, you'll learn the essential theory of algorithms and data structures, understand time-complexity analysis, and develop algorithmic thinking — a crucial skill for developers preparing for technical interviews. &lt;/p&gt;

&lt;p&gt;The course shows how various real-world algorithms work and how to implement them in Python. In the graduate projects, you'll implement classic algorithms from scratch and even build your own version of PageRank — the algorithm Google used to figure out which web pages are most important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect if:&lt;/strong&gt; You're preparing for technical interviews or want to write more efficient code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What learners say:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This track has good projects to sharpen and practice your thinking skills with a good number of well-known algorithms."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Which One Should You Pick?
&lt;/h3&gt;

&lt;p&gt;Start with &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/6-introduction-to-python" rel="noopener noreferrer"&gt;Python Fundamentals&lt;/a&gt;&lt;/strong&gt; if you're new to programming entirely.&lt;/p&gt;

&lt;p&gt;Move to &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/22-python-core" rel="noopener noreferrer"&gt;Python Core&lt;/a&gt;&lt;/strong&gt; if you know the basics but want to understand how professional developers think and work.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/2-python-developer" rel="noopener noreferrer"&gt;Python Developer&lt;/a&gt;&lt;/strong&gt; if you're looking to switch careers and need a comprehensive view of the development workflow.&lt;/p&gt;

&lt;p&gt;Go with &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/94-python-backend-developer-with-django" rel="noopener noreferrer"&gt;Python Backend Developer with Django&lt;/a&gt;&lt;/strong&gt; if you specifically want to build web applications and APIs.&lt;/p&gt;

&lt;p&gt;Pick &lt;strong&gt;&lt;a href="https://hyperskill.org/courses/54-python-with-algorithms-for-tech-interviews" rel="noopener noreferrer"&gt;Python with Algorithms for Tech Interviews&lt;/a&gt;&lt;/strong&gt; if you're preparing for job interviews or want to level up your problem-solving skills.&lt;/p&gt;

&lt;p&gt;The nice thing about our approach is that these courses are all connected. The topics overlap and your progress carries over — so you don’t have to go through the material twice.&lt;/p&gt;

&lt;p&gt;Along the way, you’ll build real projects you can add to your GitHub and show to potential employers.&lt;/p&gt;

&lt;p&gt;No course will teach you everything. But our courses give you enough practical experience and portfolio pieces to grow as a developer and build skills that last.&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>backend</category>
      <category>learning</category>
    </item>
    <item>
      <title>Building Hyperskill: My Story as a Developer</title>
      <dc:creator>Igor Kirillov</dc:creator>
      <pubDate>Mon, 13 Oct 2025 20:36:18 +0000</pubDate>
      <link>https://forem.com/hyperskill_academy/building-hyperskill-my-story-as-a-developer-c47</link>
      <guid>https://forem.com/hyperskill_academy/building-hyperskill-my-story-as-a-developer-c47</guid>
      <description>&lt;p&gt;Hi everyone! I’m a Tech Lead at &lt;a href="https://hyperskill.org/" rel="noopener noreferrer"&gt;Hyperskill&lt;/a&gt; — a project-based learning platform for programmers.&lt;br&gt;
Here’s a bit about how I found my way into tech — and why I still love what I do.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Role at Hyperskill
&lt;/h2&gt;

&lt;p&gt;At Hyperskill, I handle most of the technical stuff. I'm the one keeping our web interface, mobile app, and IDE plugin running smoothly and integrated with our backend. So if something breaks, most likely you should blame me — sorry! ‍ ‍&lt;/p&gt;

&lt;p&gt;My days typically start with a health check: reviewing logs and metrics to catch any issues that surfaced overnight. Then I sync with our support team to understand what challenges our learners are facing in real-time. The bulk of my work involves tracking down and fixing the inevitable small bugs that pop up across our platforms, plus implementing new features based on user feedback. &lt;/p&gt;

&lt;p&gt;There are definitely moments when I feel frustrated by code that refuses to cooperate. But what keeps me going is knowing that our platform helps people learn new skills and potentially transform their careers. That mission makes every struggle worthwhile. &lt;/p&gt;

&lt;h2&gt;
  
  
  How I Got Into Tech
&lt;/h2&gt;

&lt;p&gt;For most of my life, I saw myself as firmly in the liberal arts camp. While I did well enough in STEM subjects and had a knack for the limited programming we covered in school, my real passion was creative work — especially writing. I even pursued a degree in Political Science, about as far from code as you can get. &lt;/p&gt;

&lt;p&gt;The turning point came through my tech-savvy friends and those Friday night conversations about computational theory and neural networks that somehow captivated me. I tried Python and experienced almost an epiphany: programming isn't fundamentally different from other creative disciplines! You start with a vision of what you want to create, then explore countless paths to get to that vision. It's actually very similar to creative writing if you think about it. That realization completely shifted my perspective. Programming is actually a form of art. Once I understood that, something clicked that I didn't even know was missing. One project led to another, and here I am writing code professionally for many years. &lt;/p&gt;

&lt;p&gt;If you had told my 2015 self that I'd become a programmer, I would have thought you were absolutely out of your mind. &lt;/p&gt;

&lt;h2&gt;
  
  
  Building for Developers, as a Developer
&lt;/h2&gt;

&lt;p&gt;Building a learning product for developers feels incredibly meaningful to me, especially as someone who taught myself programming without formal computer science training. I wish Hyperskill had existed when I was starting out. Instead, I used countless other platforms and felt every frustration that comes with trying to get a grip on those complex CS concepts. &lt;/p&gt;

&lt;p&gt;What genuinely excites me is witnessing our student's journey firsthand. Reading posts in our Discord or comment sections under topics, I see learners making the exact same mistakes I once did, then pushing through those same mental barriers I remember hitting. Watching them struggle with complex concepts and then finally break through, that gives me real joy. Our students' success stories are what really drive me though. People around the world are completely transforming their lives with nothing more than a computer, internet access, and sheer determination. Programming is such a powerful social mobility tool nowadays. That's genuinely extraordinary, and knowing our platform plays a part in those transformations makes everything I do feel worthwile. &lt;/p&gt;

&lt;h2&gt;
  
  
  How AI Changed My View on Coding
&lt;/h2&gt;

&lt;p&gt;I see AI as simply the latest tool in programming's continuous evolution toward greater efficiency and focus. You see, just three generations ago, developers were programming with punch cards and binary code. We've progressively abstracted away the tedious parts — first with programming languages, then keyboards and terminal screens, then sophisticated IDEs and version control systems like Git. &lt;/p&gt;

&lt;p&gt;25 years ago, we were writing code in text editors with barely more functionality than Notepad, and 'version control' meant copying files to floppy disks. Each innovation freed us from mechanical tasks so we could focus on solving more complex problems. AI fits perfectly into this pattern. It handles routine code generation and reduces my time scrolling through Stack Overflow, which means I can dedicate more energy to building meaningful features for our students. But the fundamentals haven't changed — you still need to understand basics of programming to successfully create, verify, debug and optimize. If anything, these skills have become more critical since you can now offload syntax entirely and focus on architecture, logic, and user experience. &lt;/p&gt;

&lt;p&gt;AI hasn't fundamentally altered my view of programming, it has simply refined it. The craft is still about problem-solving and creating value for users — we just have better tools to do some dull work for us. &lt;/p&gt;

&lt;h2&gt;
  
  
  Outside of Work
&lt;/h2&gt;

&lt;p&gt;I'm a committed lifelong learner, so in my free time I inevitably find myself going down Wikipedia rabbit holes at 2am, discovering something like the biological differences between turtles and tortoises (they're not the same, by the way!). I genuinely can't help myself when it comes to exploring new topics. As for recharging, I like watching lighthearted coming-of-age films, reading mid-to-late 20th century American literature, and listening to jazz. Recently, I've also re-discovered absolutely amazing modern Japanese music — there are some phenomenally creative bands emerging from that scene right now. Their music is perfect for powering through challenging work weeks. &lt;/p&gt;

&lt;h2&gt;
  
  
  My Advice to New Learners
&lt;/h2&gt;

&lt;p&gt;Be ready to learn hard and adapt quickly. Never forget that even though AI can handle routine work now, understanding how things actually work is genuinely rewarding and fun.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>learning</category>
      <category>resources</category>
    </item>
  </channel>
</rss>
