ProgrammingPro #64: Spring Boot 3.0, Rust's Rise in Tiobe, OpenAI's CriticGPT, and JavaScript's ECMAScript 2024 Update
Bite-sized actionable content, practical tutorials, and resources for programmers
Welcome to this week’s edition of ProgrammingPro!
In today’s Expert Insight, we bring you an excerpt from the recently published book,
Mastering Spring Boot 3.0, which discusses new features and improvements in Spring Boot 3.0, such as Java 17 alignment, GraalVM support, and Micrometer integration.
News Highlights: Rust hits 13th in Tiobe index; OpenAI's CriticGPT outperforms humans in code reviews; ECMAScript 2024 updates JavaScript; and Parasoft enhances automated testing for Java and .NET with OpenAI integration.
My top 5 picks from today’s learning resources:
Durable Python - Reliable, Long-Running Workflows with Just a Few Lines of Code🐍
Next-Level Boilerplate - An Inside Look Into Microsoft’s .Net Clean Architecture Repo🏗️
But there’s more, so dive right in.
Stay Awesome!
Divya Anne Selvaraj
Editor-in-Chief
PS: This month’s survey is still open! Do take the oppotunity to give us your feedback on ProgrammingPro, request specific learning resources, and get your one Packt Credit for the month.
PPS: The AI themed collector’s edition of ProgrammingPro will hit your inboxes tomorrow! Roger Roger?🤖
🗞️News and Analysis🔎
Rust leaps forward in language popularity index: Fast and memory-safe, Rust has climbed to the 13th spot in the Tiobe index, its highest ever. Read to learn why anticipation is high for Rust to break into the top 10 soon.
OpenAI's CriticGPT Catches Errors in Code Generated by ChatGPT: This model has proven more effective than human evaluators, with AI trainers preferring CriticGPT's feedback 80% of the time. Read to learn about CriticGPT’s capabilities.
ECMAScript 2024 JavaScript standard approved: The standard introduces new features such as transferring ArrayBuffers, and working with string sets. Read to learn how this will impact JavaScript programming.
Visual Studio Code update previews source change visualization, initial release breaks on older Macs: The latest update introduces a visualization tool for source code changes, support for TypeScript 5.5, and enhanced detection of Python environments. Read to learn about associated challenges.
Parasoft’s latest release offers several new automated features for testing Java, C#, .NET apps: Both Jtest and dotTEST now integrate with OpenAI/Azure OpenAI Service. Read to learn about all the latest advancements in these tools.
Boomi API Control Plane allows for easier discovery and governance of APIs: Leveraging technology from its recent acquisition of APIIDA, this platform addresses the issue of "shadow APIs". Read to learn more about the tool’s capabilities.
BST Daunting downtime stats help put industrial DevOps under spotlight: The 1st Annual State of Industrial DevOps Report highlights the critical impact of industrial code on downtime, which is responsible for 50% of high-cost incidents. Read to learn about major contributing factors.
🎓Tutorials and Learning Resources💡
Python
Durable Python - Reliable, Long-Running Workflows with Just a Few Lines of Code: Introduces a method that simplifies building reliable, long-running workflows in Python. Read to learn how to develop dependable workflows.
Statistics - Time Series Analysis — Compilation of the fundamental concepts: Focuses on autocovariance, autocorrelation, and stationarity, using Python for visualization. Read to gain a comprehensive understanding of time series analysis.
For more Python resources go to PythonPro
C# and .NET
Next-Level Boilerplate - An Inside Look Into Our .Net Clean Architecture Repo: Introduces a .NET Clean Architecture boilerplate designed to streamline project setups while ensuring maintainability and scalability. Read to learn about the benefits and structure of using a Clean Architecture boilerplate in .NET.
The happy state of property-based testing in C#: Introduces CsCheck. Read to learn about a library offering innovative features like stateful and parallel testing, and an effective approach to shrinking.
Scan HTML faster with SIMD instructions - .NET/C# Edition: Discusses the integration of SIMD instructions into C# for faster HTML content scanning. Read to learn the technical advantages and implementation strategies of using SIMD.
C and C++
Compile-time JSON deserialization in C++: By leveraging modern C++ techniques and pattern matching concepts, this article provides a type-safe approach to handle JSON. Read to enhance code safety and conciseness.
Version tolerant serialization in C++: Introduces a C++ binary serialization framework that utilizes the AWL_REFLECT macro for simple and efficient serialization of data structures. Read to learn how to implementing the system.
Beating NumPy's Matrix Multiplication in 150 Lines of C Code: Showcases a high-performance matrix multiplication implementation in C, outperforming OpenBLAS. Read to learn how to utilize straightforward parallelization techniques.
Java
🎓Tutorial | How to describe Java code with annotations: Explains how to utilize Java annotations to attach metadata to classes, methods, and other elements. Read to learn how to define and use Java annotations.
🎓Tutorial | Stream gatherers: A new way to manipulate Java streams: Java 22 introduces stream gatherers under the java.util.stream.Gatherers interface. Read to gain an understanding of how to employ Java's new stream gatherers.
🎓Tutorial | Greetings Application built with Java, Spring and JWT: Demonstrates implementing a basic REST API with user authentication in Java, using JSON Web Token. Read for a comprehensive code walkthrough.
JavaScript and TypeScript
🎓Tutorial | Intro to multithreaded JavaScript: JavaScript, traditionally single-threaded, now embraces true parallelism through web workers in browsers and worker threads. Read to learn how to implement multithreading in JavaScript.
Speeding up the JavaScript ecosystem - Isolated Declarations: Discusses TypeScript's new feature, which simplifies the sharing and packaging of code. Read to learn how this feature speeds up the development process.
🎓Tutorial Modern Emacs Typescript Web (React) Config with lsp-mode, treesitter, tailwind, TSX & more: Outlines a modern configuration for TypeScript and React. Read to learn how to create a highly functional environment.
Go
8 reasons developers love Go—and 8 reasons they don’t: Designed to be easy to learn, Go offers a clean, C-based syntax, but its limited complexity and flexibility feels restrictive to some. Read to learn about the design philosophy of Go.
🎓Tutorial | Compile Go directly to WebAssembly components with TinyGo and WASI P2: Introduces of WASI P2 support in TinyGo. Read to learn how this development significantly enhances the ability to deploy Go-based applications.
Rust
Towards safe and modern cryptography - Overview of the Rust ecosystem in 2024: Highlights Rust's advantages for cryptographic implementations over C, citing notable libraries like aws-lc-rs and ring. Read to learn about current libraries.
Further simplifying self-referential types (SRTs) for Rust: Delves into SRTs’ mechanics, proposing simplified lifetimes and automated referential stability. Read for insights into the feasibility of eliminating the need for immovable types.
Swift
The Swift Method Dispatch Deep Dive: Examines static, dynamic, and message dispatch techniques. Read for insights into compiler optimizations like inlining and precomputing, and how these affect runtime performance.
Inspect network traffic using the Xcode Simulator: Showcases RocketSim's Network Monitor as a highly effective tool. Read to learn how to efficiently monitor and optimize network traffic in your apps.
PHP
🎓Tutorial | Profiling PHP (Laravel)Applications with xhprof. Finding bottlenecks!: Introduces profiling tools like xhprof, Blackfire, and Buggregator, emphasizing their uses and setup processes. Read for a step-by-step setup guide.
SQL
🎓Tutorial | Data observability and alerting in plain SQL: Introduces alerting patterns for monitoring data pipelines, using straightforward SQL queries integrated with an alerting system. Read to learn how to implement these SQL-based alerts.
Ruby
Finding Memory Leaks in the Ruby Ecosystem: Explores the challenge of detecting memory leaks in Ruby, especially from native gems. Read to learn about advanced tools and strategies for identifying and managing memory leaks.
Kotlin
Kotlin Context Receivers - A Comprehensive Guide: Delves into Kotlin's context receivers, starting with setup and exploring their application through practical examples. Read to learn how to apply context receivers to streamline code.
🌟Best Practices and Advice🚀
How to Architect Software for a Greener Future: Highlights strategies for architecting software to enhance carbon efficiency and sustainability. Read to grasp the essential techniques of integrating sustainability into software development.
A guide to supply chain security tools: Details a variety of tools and vendors that enhance software supply chain security such as HCL Software’s AppScan SCA and Anchore. Read to be able to select the right solutions for your needs.
The Set Piece Strategy - Tackling Complexity in Serverless Applications: Focuses on decomposing problems, fostering team autonomy, and leveraging serverless architecture. Read to learn how to leverage Domain-Driven Design.
5 Clean Code Tips for Reducing Cognitive Complexity: Outlines strategies for reducing cognitive complexity to enhance the maintainability, reliability, and understandability of code. Read for practical tips for writing cleaner code.
Take the Survey, Get a Packt Credit!
🧠 Expert Insight 📚
Here’s an excerpt from “Chapter 1: Introduction to Advanced Spring Boot Concepts” in the book, Mastering Spring Boot 3.0, by Ahmet Meric.
Embracing the new era – the innovations of Spring Boot 3.0
Spring Boot 3.0 marks an important part of the story of advanced Java application development. Let’s explore what this new topic holds.
Java 17 baseline
Aligning Spring Boot 3.0 to Java 17 gives you the freshest developments in the Java universe. Generally, features such as sealed classes and new APIs in Java 17, among other things, improve the code readability and maintainability. Using Java 17 with Spring Boot means working with a version that not only is the latest but also has extended support from Java. This gives you cleaner code as well as better performance while being ahead in technology. With Java 17, many new features have been introduced – here is a simple example using sealed classes:
public sealed class Animal permits Dog, Cat, Rabbit {
// class body
}
final class Dog extends Animal {
// class body
}
final class Cat extends Animal {
// class body
}
final class Rabbit extends Animal {
// class body
}
This feature allows you to control which classes or interfaces can extend or implement a particular class or interface. This feature is particularly useful for maintaining code integrity and preventing unintended subclasses.
GraalVM support
GraalVM’s support within Spring Boot 3.0 is an important feature, particularly for cloud-native solutions. When we have a task to develop a serverless project, Java is usually not the first option. This is because Java projects need some more time on startup and consume more memory than other development languages. But GraalVM support helps Spring Boot, reducing memory usage and cutting down on startup times. For microservices and serverless architectures, this means achieving a level of efficiency that allows for quicker scaling and optimized resource utilization.
Observability with Micrometer
Let’s talk about an exciting feature in Spring Boot 3.0 – the integration of Micrometer. Imagine Micrometer as a tool that makes us aware of what is going on inside our application just by taking a look at logs, metrics, and traces. With Micrometer Tracing, the Micrometer tool becomes even more useful within Spring Boot. Now we are able to record application metrics more effectively and carry out more effective operation traces. It’s like having a fancier way to check how well our application is executing with the current technology, way better than the old ways we used to rely on, especially when we’re working with applications built by compiled native code.
Jakarta EE 10 compatibility
I am going to try and explain the transition to Jakarta EE 10 in Spring Boot 3.0. So, it’s a bit like updating your GPS with the latest maps and features before setting off on your journey. In a similar way, the shift to Jakarta EE 10 enables us to make use of the latest tools and standards available in enterprise Java. This way, we would be able to ensure that all applications built make use of modern standards and are future-proof as well. This update doesn’t just keep our applications up to date but also enables us to work with other, more advanced technologies, compliant with the new standards. So, this is nothing less than a leap forward in our development journey.
Simplified MVC framework
The MVC framework updates in Spring Boot 3.0 improve the way we manage communications, particularly API error handling. Support for RFC7807 means our applications can handle exceptions in one place. The following code sample illustrates how to handle exceptions in one place:
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<ProblemDetail> handleException(Exception ex, WebRequest request) {
ProblemDetail problemDetail = new ProblemDetail();
problemDetail.setTitle("Internal Server Error");
problemDetail.setDetail(ex.getMessage());
problemDetail.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
return new ResponseEntity<>(problemDetail, HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ProblemDetail> handleResourceNotFoundException(ResourceNotFoundException ex, WebRequest request) {
ProblemDetail problemDetail = new ProblemDetail();
problemDetail.setTitle("Resource Not Found");
problemDetail.setDetail(ex.getMessage());
problemDetail.setStatus(HttpStatus.NOT_FOUND.value());
return new ResponseEntity<>(problemDetail, HttpStatus.NOT_FOUND);
}
// other exception handlers
}
In this example, GlobalExceptionHandler is a @ControllerAdvice class that handles all exceptions thrown by the application. It has an @ExceptionHandler method for each type of exception that the application can throw. Each @ExceptionHandler method returns a ResponseEntity with a ProblemDetail object as the body and an appropriate HTTP status code. The ProblemDetail object contains the details of the error, including a title, detail, and status code.
Enhanced Kotlin support
Kotlin is getting popular among developers. If you feel more confident with Kotlin, Spring Boot 3.0 now offers enhanced support for Kotlin. This support expands the Spring community.
Mastering Spring Boot 3.0 was published in June 2024. Packt library subscribers can continue reading the entire book for free or you can buy the book here!
🛠️ Useful Tools ⚒️
studio: a visual interface building tool that supports any React + TailwindCSS application, allowing developers to create user interfaces effectively.
Crawlee for Python: a web scraping and browser automation library designed to build reliable crawlers with features like automatic scaling and proxy management.
dut: a disk usage calculator for Linux, offering precise hard link counting and customizable ASCII output inspired by NCDU.
That’s all for today.
We have an entire range of newsletters with focused content for tech pros. Subscribe to the ones you find the most useful here. Complete ProgrammingPro archives can be found here. Complete PythonPro archives are here.
If your company is interested in reaching an audience of developers, software engineers, and tech decision makers, you may want to advertise with us.
If you have any comments or feedback, take the survey, or leave a comment below.



