ProgrammingPro #75: Python 3.13 JIT & Free Threading, C# Native AOT Performance, and AI Tools for DevOps & Productivity
Welcome to this week’s edition of ProgrammingPro!
In today’s Expert Insight, we bring you an excerpt from the recently published book, System Design Guide for Software Professionals, which discusses distributed tracing—tracking requests across distributed systems.
News Highlights: JavaScript community petitions to cancel Oracle’s trademark; Microsoft unveils Azure AI Inference SDK for .NET; Harness debuts AI assistants for DevOps, QA, and code; YugabyteDB update enhances distributed PostgreSQL performance.
My top 5 picks from today’s learning resources:
How Canva Scaled Real-Time Collaboration with WebRTC - From WebSockets to Seamless P2P Communication🔄
Study Shows AI Coding Assistant Improves Developer Productivity🤖
But there’s more, so dive right in.
Stay Awesome!
Divya Anne Selvaraj
Editor-in-Chief
PS: With this issue, we have finished covering all resource requests made through the September survey. Keep your eye out for next month's survey.
🗞️News and Analysis🔎
JavaScript community challenges Oracle’s JavaScript trademark: With over 10,000 signatures, the community plans to petition the USPTO to cancel the trademark, aiming to protect the language's widespread use from legal issues.
Java 23 highlights crypto performance and security: Key changes include increased buffer sizes for crypto operations, additional root certificates, and adjustments for case-sensitive Kerberos principal name lookups.
Microsoft Launches Azure AI Inference SDK for .NET: The SDK is designed to simplify access to genAI models from the Azure AI Studio model catalog, which includes models from Azure OpenAI Service, Mistral, Meta, and more.
Harness launches new AI assistants for DevOps, QA, and Code Generation offerings: Harness’s new AI solutions include tools for pipeline creation, code completion, testing automation, and productivity insights.
Latest YugabyteDB update enables distributed PostgreSQL: Key improvements include an adaptive cost-based optimizer and smart data distribution to optimise performance and support multi-region applications.
Eclipse Foundation forms new working group to help open source community comply with global regulations: The group will focus on the European Cyber Resilience Act, develop best practices, and provide resources.
Gleam language reaches 1.5 release: Gleam is a statically typed language for the Erlang VM and JavaScript runtimes. The update brings productivity improvements like better compile-time error messages.
🎓Tutorials and Learning Resources💡
Python
Python 3.13 Preview: Free Threading and a JIT Compiler: Demonstrates the key new features in Python 3.13, including free threading, which makes the GIL optional, and a JIT compiler that compiles Python code into machine code.
For more Python resources, go to PythonPro
C# and .NET
🎓Tutorial | Curve Fitting in C# using Particle Swarm Optimization: Covers setup, theory, and implementation details, guiding users on how to fit custom equations to data points.
C# Native AOT performance: Compares the performance of .NET Native AOT applications to regular managed .NET code, focusing on startup time, memory usage, and request processing speed.
4 Genius .NET Libraries I Love: Covers Refit for streamlined HTTP requests, Coravel for scheduling, queuing, and background jobs, FluentValidation for cleanly defining data validation rules, and Polly for robust resilience.
Recent C#, .NET, and Unity Books from Packt
Buy 5 eBooks for 30% + 20% off!
Discount automatically calculated when you add items to cart
Get the eBook for $39.99 $27.98
Get the eBook for $43.99 $29.99
Get the eBook for $38.99 $26.99
C and C++
🎓Tutorial | Logging all C++ destructors, poor mans run-time tracing: Shows you how to trace destructor calls, set up logging, and filter out unnecessary library output.
C++ programmer's guide to undefined behavior: part 6 of 11: Discusses undefined behavior in C++ with a focus on broken syntax and standard library pitfalls, covering topics like variadic functions and iostreams quirks.
Hardening C Against ROP: Getting CET Shadow Stacks Working: Provides instructions for compiling a C program with shadow stack support and demonstrates how to enable CET in recent Linux distributions.
Java
🎓Tutorial | Demystifying Java Reflection: A Guide to Dynamic Code Capabilities (Part 1): Covers accessing class info, creating instances dynamically, modifying fields, and invoking methods at runtime.
Java JDBC Best Practices for Developers: Outlines 10 essential best practices including using prepared statements for security, closing resources properly, and handling exceptions.
🎓Tutorial | Building an Orders Processing Service with ChatGPT (contribute 70–80% efforts) and Finished in 2 Days: Covers defining API endpoints, designing entities like User and Order, and more.
JavaScript and TypeScript
🎓Tutorial | this in JavaScript: Provides examples to explain the usage and behavior of the
this
keyword in different contexts such as objects, functions, constructors, and callback functions, with practical demonstrations.Variable Naming Best Practices in JavaScript: Outlines 12 best practices for variable naming in JavaScript to improve code clarity and maintainability. Key guidelines include using
let
andconst
instead ofvar
, and proper naming.Try, catch, but don't throw: Discusses how the standard try-catch-throw approach to error handling in TypeScript lacks type safety, leading to challenges in handling recoverable vs. unrecoverable errors.
Go
Developing a go bot embedding ichiban Prolog: Introduces the new
PrologTrigger
struct to execute Prolog scripts and discusses implementation steps and improvements.Go sync.Cond, the Most Overlooked Sync Mechanism: Covers its usage for goroutine synchronization, demonstrating patterns for
Wait()
,Signal()
, andBroadcast()
with examples, benefits, and internal workings.
Rust
How to Learn Rust in 2024: A Complete Beginner’s Guide to Mastering Rust Programming: Explains how to effectively approach Rust, understand its unique features like memory safety, and access curated learning resources.
“Truly Hygienic” Let Statements in Rust: Explores solutions like using
IDENT @ _
patterns, dummy functions, and ultimately choosing pragmatic trade-offs for maintainability and simplicity.
Swift
Mastering Data Binning with Swift Charts: Explores data binning using Swift Charts'
NumberBins
andDateBins
APIs and demonstrates how these tools enable precise data intervals for numerical and temporal data.Insetting Scrollable Views’ Content With contentMargins In SwiftUI: Discusses using the
contentMargins
view modifier in SwiftUI (iOS 17), which adds spacing around content within scrollable views likeScrollView
, andList
.
PHP
High frequency metrics in PHP using TCP sockets: Covers practical examples of logging API and database calls, handling TCP socket connections non-blockingly, and provides a PHP class,
MetricObserver
.
SQL
SQL-tips-and-tricks: A repository containing a curated list of SQL tips and tricks for improving query readability, avoiding pitfalls, and leveraging advanced features.
Ruby
“Gilded Rose” refactoring kata in Ruby — as if it is 2024: Discusses a "stories-first" approach to refactor the "Gilded Rose" kata in Ruby, focusing on readable, concise code rather than small, overly abstracted classes.
Kotlin
Loading Initial Data on Android Part 2: Clear All Your Doubts: Addresses common challenges in loading initial data in Android apps, focusing on using the right triggers to avoid side effects.
🌟Best Practices and Advice🚀
How Canva Scaled Real-Time Collaboration with WebRTC - From WebSockets to Seamless P2P Communication: Discusses how the adoption of WebRTC for direct data transmission enhanced user experience and more.
Dirty code still runs, and that’s not a good thing: Discusses the hidden risks of allowing "dirty code" to persist in software production, highlighting that it functions but causes technical debt and long-term issues.
How software teams should prepare for the digital twin and AI revolution: Discusses how these technologies can enable real-time monitoring, enhance analytics, and streamline development.
Study Shows AI Coding Assistant Improves Developer Productivity: A study shows that GitHub Copilot increased developer productivity by 26%, based on three randomized controlled trials involving over 4,000 developers.
🧠Expert Insight📚
Here’s an excerpt from “Chapter 8: Design and Implementation of System Components: API, Security, and Metrics” in the book, System Design Guide for Software Professionals by Dhirendra Sinha and Tejas Chopra, published in August 2024.
Distributed tracing
Distributed tracing extends the concept of tracing to a distributed system. It involves tracking a request as it travels across multiple services and machines. Each step in the request’s journey is
recorded as a span. Each step in the request’s journey is recorded as a span. A collection of spans forms a trace, which represents the entire journey of the request.
Distributed tracing provides several benefits:
Performance optimization: By visualizing the flow of requests, you can identify performance bottlenecks and optimize them
Error diagnosis: If a request fails, you can use the trace to identify where the error occurred and what caused it
System understanding: Tracing helps you understand the flow of requests in your system, which can be useful when onboarding new team members or when planning system changes
Open-source tools for distributed tracing
Several open-source tools are available for implementing distributed tracing, each offering distinct features and capabilities:
Jaeger: Jaeger is a distributed tracing system that was developed by Uber Technologies and subsequently released as open-source software. It is designed to monitor and troubleshoot microservices-based distributed systems, drawing inspiration from Google’s Dapper and OpenZipkin. Jaeger provides a comprehensive set of features, including distributed context propagation, transaction monitoring, root cause analysis, and performance optimization. It supports various storage backends, including Elasticsearch, Cassandra, and Kafka, for scalable trace storage.
Zipkin: Zipkin is another distributed tracing system that focuses on collecting and managing timing data for troubleshooting latency issues in microservice architectures. It provides a simple and intuitive interface for visualizing trace data, enabling developers to quickly identify and address performance bottlenecks. Zipkin supports multiple data storage options, such as in-memory, MySQL, Cassandra, and Elasticsearch, and can be integrated with various programming languages and frameworks.
OpenTelemetry: OpenTelemetry is a unified observability framework that provides APIs, libraries, agents, and collector services for capturing distributed traces and metrics from applications. It aims to standardize the collection and analysis of telemetry data across different platforms and tools. OpenTelemetry supports a wide range of programming languages and integrates seamlessly with popular observability tools such as Prometheus and Jaeger. It offers advanced features such as context propagation, distributed tracing, and metric collection, making it a versatile choice for modern cloud-native applications.
System Design Guide for Software Professionals was published in August 2024. Packt library subscribers can continue reading the entire book for free or you can buy the book here!
Get the eBook for $33.99 $22.99
🛠️Useful Tools⚒️
Stride Community Toolkit: A collection of extensions and helpers to simplify and enhance game development in the Stride engine using C# and .NET.
Panora: An open-source API that streamlines data integration for LLMs, connecting data sources and managing embeddings and chunking efficiently.
Viewport Tester: Enables testing websites on 180+ device viewports simultaneously, with multi-device mode, deep-linking, and favorites for tracking.
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.
If your company is interested in reaching an audience of developers, software engineers, and tech decision makers, you may want to advertise with us.