Recursive functions are a staple in many programmers’ toolkits. They allow us to solve complex problems by having a function call itself with a different set of parameters until a certain condition is met, known as the base case. This is an elegant way to process data structures like trees or to perform repeated operations until a condition is satisfied. However, recursion comes with its cost. Each recursive call adds a new layer to the stack (a special area in a program’s memory) that tracks where each function should return control once it completes its execution. This is known as…
-
-
Micro-optimizing refers to making small modifications to code in an attempt to improve performance, often at the expense of making the code harder to read, understand, and maintain. While it’s natural for developers to want their applications to run as efficiently as possible, it is also crucial to balance these optimizations with the overall clarity and maintainability of the code. Micro-optimizations may be a bit faster language constructs, helps to handle tricky algorithms for minor performance gains, or restructuring code in a way that makes it harder for others (or even yourself) to understand later. These optimizations are “micro” because…
-
Span<T> in C# is an innovative feature that revolutionizes how developers work with contiguous memory regions, like arrays or memory blocks. The Span is introduced in C# 7.2 and it is designed to provide a more efficient way to handle slices of data. Technically, Span<T> is a ref struct that represents a contiguous region of arbitrary memory. It’s not limited to arrays; it can point to memory on the stack, in managed memory (like arrays or heap-allocated objects), or even unmanaged memory. This makes it incredibly versatile. The structure of Span<T> includes a pointer to the starting location of the…
-
In the previous posts, we explored how C laid the groundwork for modern programming languages and shaped the software landscape. We’ve looked at Cās influence on languages and traced its role as the foundation for today’s development tools. Now, we turn our attention to another critical area where C’s impact is undeniable: operating systems. We have already talked about the relationship between C and Unix here. However, the relationship with C and operating systems are not limited to Unix. Unexceptionally, all operating systems we use today (Windows, Linux, Mac OS, IOS, Android etc.) are either primarily or entirely written in…
-
In C#, when you want to go through all the items in an array one by one, you can use either a for loop or a foreach loop. Both will get the job done, but there’s a bit of a difference in how they do it, especially when it comes to performance. The for loop gives you more control. You have a counter that keeps track of which item you’re on, and you can use this counter to directly access each element in the array by its index. This is a straightforward operation, and it’s very fast because accessing elements…
-
The readonly modifier in C# is a keyword applied to fields that should not change after the constructor for an object has completed. Using readonly indicates that the data is intended to be immutable. This means that it cannot be changed once set. readonly can be particularly useful when you want to create an object that has certain properties that should remain constant throughout the object’s lifetime. It represents unchangeable states or fixed configurations. Immutable data has several advantages in software development. For instance, it is inherently thread-safe because if data cannot change. Multiple threads can access it concurrently without…
-
AWS Secrets Manager is a fully managed service that helps you easily store and retrieve credentials, API keys, and other sensitive data in a secure way. It integrates seamlessly with AWS Identity and Access Management (IAM) to ensure that only authorized users and applications can access your secrets. Beyond simple storage, it also offers basic security practices like automatic rotation of secrets. The main idea of using AWS Secrets Manager is that you no longer need to hardcode sensitive information in your applications or configuration files. Instead, you can reference them securely and fetch them when needed. This practice, sharply…
-
Welcome to the third part of our blog series, “C, Bedrock of Software.” In the first part, we explored the origins of C. In the first part, we discussed its creation at Bell Labs and its role in the development of Unix. In the second part, we examined the symbiotic relationship between C and Unix. We saw how they evolved together, shaping the future of computing. In this part, we will focus on how C has influenced modern programming languages. We will see its impact on popular languages like Java, C#, C++, Objective-C, and others. This will show how C’s…
-
Lazy loading and eager loading are two contrasting approaches in managing how and when data is loaded into memory in programming, particularly relevant in the context of databases, data processing, and UI rendering. Lazy Loading In lazy loading, data is loaded only when it is required. This can enhance application performance and reduce memory usage, especially when dealing with large datasets or complex objects. For example, consider an e-commerce application that displays product details. With lazy loading, the detailed data for a product (like high-resolution images or reviews) is only loaded when a user selects that product, rather than loading…