Exploring C++ std::span – Part 2: Accessing Elements and Iterating
In C++20, std::span provides a safe, convenient way to access and iterate over contiguous data, offering many of the familiar…
For Software Engineers
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…
In C++, the semicolon is more than a mere syntactical rule—it’s a critical delimiter that signifies the end of a…
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.…
The role of your manager, particularly in software engineering, can significantly affect your career trajectory. A manager with a technical…
Kolmogorov complexity measures the shortest possible description of an object, like a string or a piece of code. In programming,…
Can AI help us craft better blog posts without falling into the trap of producing generic “content”? Absolutely. In this…
In some software engineering circles, there remains a debate (or needs to be a debate) about using In-Source versus Out-of-Source…
std::expected is a powerful feature introduced in C++23 that offers a modern, type-safe alternative to traditional error-handling methods. Throughout my…
Error handling is a critical component of many C++ applications. Even so, there are many strategies we can use to…
Book Review: Modern CMake for C++ (Second Edition) by Rafał Świdziński As a CMake developer and user for over 15…
TL;DR; – Agile, as a management philosophy, requires a whole organization commitment and the right leadership to be successful. Bad…
Zero-sum thinking (sometimes called the Zero-Sum Fallacy) is a mindset where resources are viewed as finite and fixed, meaning one…
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 use of data to make decisions as a software developer is a core skill. It transcends mere operational enhancement,…
To achieve Generative AI Acceleration, the Department of the Air Force Chief Information Officer has proposed revamping the approval process…
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…
Social engineering represents one of the most insidious forms of cyberattack, exploiting the most vulnerable link in the security chain:…
At first glance, defining a software project vs. a product seems like a difference in semantics. Looking deeper, however, understanding…
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 principle of “Build One to Throw Away” from Frederick Brooks’ “The Mythical Man-Month” is an important yet often misunderstood…
Our industry is often (always) captivated by the latest technological advancements. Rightfully so. It is what drives us personally and…
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 Second-System Effect can lead to overcomplicated and bloated systems due to a misunderstanding of the first project’s constraints and an overzealous desire to rectify its limitations.
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.
Understanding how team size impacts project progress is crucial. The Man-Month Myth, a concept popularized by Frederick Brooks, challenges the…
A recent memo on FedRAMP Equivalency from the DoD has set a new course for defense contractors working with CUI in cloud environments. This pivotal memo outlines the stringent requirements for FedRAMP equivalency, but what are the implications of this memo on the defense industry and the second-order consequences for innovation, development time, and overall cost of compliance?
“The Price is Right” can serve as an engaging and unconventional guide to understanding game theory and its application in software engineering. From the bidding strategies in the “One Bid” round to the risk assessment in “Plinko,” the show offers a treasure trove of lessons relevant to the challenges and decisions we face in the tech world.
Metrics and measurements are vital tools. They guide decisions, shape strategies, and can provide a clear picture of progress and productivity. However, a fundamental principle, often overlooked, governs the use and impact of these metrics: Goodhart’s Law.
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.
For many managers, the allure of fostering a ‘Hero Culture’ can be tempting. However, it carries with it the seeds of potential crises.
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.
Some organizations have adopted a policy of frequently rotating staff through different projects. While this approach aims to broaden experience, it’s worth taking a closer look at the implications.
What do you consider when choosing static vs. dynamic linking? Choosing the right one for your library requires a nuanced understanding of each.
Programmers are optimists. For software engineers, optimism is not just a personality trait but a necessary mindset. As Frederick P.…
I am currently authoring a new book covering data structures and algorithms using the C++ STL. I am interested to know the community’s thoughts on what would make the book a valuable addition to the C++ community!
Career management is hard. When managing your career in an evolving professional landscape, it’s not uncommon to find oneself at a career crossroads, wondering whether it’s time to seek new horizons or stay the course. But often, this introspection isn’t just about analyzing the company’s role in our professional growth but also self-reflecting on our contributions and responsibilities.
Introduction Push/Pull communication is a fundamental concept in communication, dictating how information flows within an organization. This article discusses various…
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.
Can we look to the Ghostbusters for inspiration on interviewing and hiring? Let’s explore their process and see how they managed (without using Workday.)
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.
The Win-Win-Win Principle is a holistic approach to business that ensures value is created for the client, business, and employees. Derived from experiences in software engineering companies, it advises looking for opportunities that bring mutual benefits, such as strategic alignment, operational efficiency, and personal growth.
Sir Galahad: Is there someone else up there we can talk to? Frenchman: No, now go away or I shall…