Standardizing the Handling of Non-Source Files in CMake Projects: The Config Target
As C++ projects grow, they often include files that aren’t part of the source code but remain essential—files like README.md,…
For Software Engineers
As C++ projects grow, they often include files that aren’t part of the source code but remain essential—files like README.md,…
Software development requires a careful balance between functionality, performance, and security. C++ developers, with the language’s powerful features and fine-grained…
Throughout this series, we’ve explored the capabilities and best practices for using std::span. We began by understanding its role as…
One of the hallmarks of modern C++ is its emphasis on type safety and const-correctness. These principles help developers write…
In C++20, std::span provides a safe, convenient way to access and iterate over contiguous data, offering many of the familiar…
What is std::span? std::span is a feature introduced in C++20, designed to provide a safe and efficient way to create…
Concurrency and parallelism have become vital aspects of modern C++ programming, demanding robust mechanisms for handling multi-threaded environments. Enter std::mutex, a…
As artificial intelligence continues to evolve, the demand for more efficient and accurate data processing solutions is higher than ever.…
Kolmogorov complexity measures the shortest possible description of an object, like a string or a piece of code. In programming,…
In some software engineering circles, there remains a debate (or needs to be a debate) about using In-Source versus Out-of-Source…
Error handling is a critical component of many C++ applications. Even so, there are many strategies we can use to…
Custom allocators in C++ can be intimidating to approach in our code. C++ is renowned for its powerful standard library…
Mastering std::vector is essential for advanced C++ Development. While many experienced C++ developers are familiar with std::vector, its full potential…
The C++14 standard introduces a compelling feature: Transparent Comparators. C++ programmers often encounter the concept of comparators when working with…
The dialogue around C++ and memory safety has intensified following recent evaluations by authoritative bodies. The White House’s Office of…
My new book, Data Structures and Algorithms with the C++ STL: A guide for modern C++ practitioners, will be released…
The Service Locator pattern is a powerful design pattern that is used in many types of programs. Design patterns help…
The Decorator Pattern stands out for its unique ability to add new functionalities to objects dynamically without altering their structure. This pattern not only enhances the capabilities of individual objects but also fosters a flexible and extensible design, making it a powerful tool in the arsenal of a C++ programmer.
The implementation of mathematical equations demands a keen awareness of the computational environment. This article illustrates the importance of considering IEEE floating point representation in C++ (as well as Python and FORTRAN) for accurate and reliable computations.
Hashing, a cornerstone concept in computer science, plays a pivotal role in efficient data processing and storage. In C++, std::hash emerges as a critical component, deeply ingrained in the language’s Standard Library. This article aims to demystify std::hash, making it accessible and understandable to entry and intermediate-level C++ developers.
C++20 Callable Concepts refer to a powerful feature introduced in the C++20 standard that allows developers to specify and enforce constraints on function objects, lambdas, and other callable entities in a more expressive and type-safe manner.
What do you consider when choosing static vs. dynamic linking? Choosing the right one for your library requires a nuanced understanding of each.
In the early days of software development, the simplicity of tools like VI and a compiler sufficed for building enterprise-scale applications. Today, we find ourselves wading through an ever-expanding array of tools and technologies that have caused us to wander off the path of value creation.
Naming Things is hard. The guidance provided here is derived from years of making mistakes, wishing I had done things better, and finding ways to get tools to do my work for me (and get on with the interesting problems).
Establishing pair programming between a software engineer (in the driver role) and a domain expert (in the navigator role) can significantly enhance the quality and accuracy of domain-specific software.
Balancing software development requires managing technical debt and capital. While debt can fast-track projects, building robust technical capital ensures long-term software resilience and quality.
The promise of Semantic Versioning (SemVer) is tantalizing. However, as is often the case in software engineering, the real world is messier than our theoretical models. Introducing Algorithmic SemVer as an alternative software versioning scheme.
Start with the default settings and see if you can live with them and tweak your process to accommodate before going off and making everything custom. The more custom something is, the harder it is to maintain.