Yacoub Massad is a software architect and works mainly on Microsoft technologies. Currently, he works at NextgenID where he uses C#, .NET, and other technologies to create identity solutions. He is interested in learning and writing about software design principles that aim at creating maintainable software. You can view his blog posts at criticalsoftwareblog.com. He is also the creator of DIVEX (https://divex.dev), a dependency injection tool that allows you to compose objects and functions in C# in a way that makes your code more maintainable. Recently he started a YouTube channel about Roslyn, the .NET compiler. You can follow him on twitter @yacoubmassad.

Yacoub Massad has written 29 articles, which have been read 2673592 times.
101746
Abstract: In this article, I try to show how async/await can be used to solve problems in situations where developers may not think about async/await as an immediate solution.
74367
Abstract: In this part of the article series, I will continue exploring the F# language, a .NET based functional-first programming language, by using the example of the Tic Tac Toe game.
241826
Abstract: F# is a.NET based functional-first programming language. In the second part of the tutorial series, I will continue exploring the F# language, by using an example of the Tic Tac Toe game.
285006
Abstract: F# is a .NET based functional-first programming language. In this article series, we will explore the F# language by using the example of the Tic Tac Toe game.
519189
Abstract: In this tutorial, I will continue talking about the most important coding practices based on my experience. In this part, I will talk about data modeling, and making state or impurities in general visible.
145131
Abstract: In Part 2 of Best Coding Practices, I talk about keeping a clear separation between units of code that model data, and units of code that model behavior. I also talk about making data objects immutable.
119947
Abstract: In this Patterns and Practices tutorial, I will talk about the most important coding practices based on my experience. The first part focuses on Automated Testing.
71734
Abstract: The Maybe Monad is a container that represents a value that may or may not exist. In this tutorial, I will go through some methods that make working with the Maybe monad easier.
57428
Abstract: In this tutorial, I will discuss function parameters in C#. I will talk about how function parameters tend to become unclear as we maintain our programs and how to fix them.
81745
Abstract: In this tutorial, I will talk about the Maybe Monad; a container that represents a value that might or might not exist.
34558
Abstract: In this tutorial, I will talk about ways to handle state in multi-threaded C# applications, including race conditions.
44947
Abstract: In this tutorial, I will discuss about global state in C# applications. I will talk about the problems of global state and discuss a solution.
17375
Abstract: In this tutorial, I am going to go through some examples of data object design in C# and discuss some issues with them.
16680
Abstract: In this tutorial, I will provide a proof of concept in C# for composing honest methods. We will see how to create honest programs out of many honest methods.
31790
Abstract: In this article, I will work on a C# game that contains impure code and work towards making the code pure. I am going to show you how to use PurityAnalyzer—an experimental Visual Studio extension I wrote—to help you write pure code in C#.
56577
Abstract: This C# tutorial describes approaches for making methods/functions more honest. A more honest method makes it easier for readers to understand what the method does by reading its signature, i.e., without reading its implementation.
29646
Abstract: This tutorial looks at a new approach to AOP called AOP via functions (in C#) as an attempt to mitigate the issues of the CQS approach.
56219
Abstract: Learn how to design multi-threading safe data objects in C# and how to “modify” immutable objects using the DataObjectHelper Visual Studio extension. Also use F# to concisely create our data objects, and use them in C# projects.
58125
Abstract: This article discusses the dataflow pattern, a variant of the producer-consumer pattern, along with examples of applying this pattern in .NET. Finally, you will also be introduced to ProceduralDataflow, a new library I created to help write clean dataflows.
99285
Abstract: This article discusses the producer-consumer pattern in .NET, some reasons why we should use it and demonstrates some examples of how to implement it in .NET.
35553
Abstract: This article discusses problems and solutions related to resource management in complex C# applications. It also discusses automatic resource management that exists in the .NET framework.
66369
Abstract: This article describes how we can use Generics in C# to make our software more resilient to data-related changes, thereby improving its maintainability.
38883
Abstract: This article discusses the treatment of data in large C# software applications. More specifically, it discusses runtime data encapsulation, behavior-only encapsulation, and treatment of state.
26407
Abstract: This article describes how to do unit and integration testing using the Composition Root as the source of Systems Under Test (SUTs).
31119
Abstract: C# examples on how we can use the Text Template Transformation Toolkit (T4) to create aspects.
179126
Abstract: Aspect Oriented Programming (AOP) in C# using SOLID principles. We will discuss challenges posed by context-independence in SOLID code bases, and provide a solution for them.
58220
Abstract: This article demonstrates how Object Composition with SOLID helps an application evolve.
61540
Abstract: Using Pure DI and the single level of abstraction per function rule to create Composition Roots that we can understand and navigate easily
33054
Abstract: This article presents a perspective of Liskov Substitution Principle (LSP) and presents an argument against some interpretation and practices of LSP that some people have/follow.