<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[F5Build by Samuel Otero]]></title><description><![CDATA[Crafting efficient solutions without adding complexity just to look smart.]]></description><link>https://www.f5run.com</link><image><url>https://substackcdn.com/image/fetch/$s_!xo-n!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62e7588-2308-4c40-a9c7-febbdbdbb994_1280x1280.png</url><title>F5Build by Samuel Otero</title><link>https://www.f5run.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 17 Apr 2026 09:00:39 GMT</lastBuildDate><atom:link href="https://www.f5run.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Samuel Otero]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[f5build@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[f5build@substack.com]]></itunes:email><itunes:name><![CDATA[Samuel Otero]]></itunes:name></itunes:owner><itunes:author><![CDATA[Samuel Otero]]></itunes:author><googleplay:owner><![CDATA[f5build@substack.com]]></googleplay:owner><googleplay:email><![CDATA[f5build@substack.com]]></googleplay:email><googleplay:author><![CDATA[Samuel Otero]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Starting out with .Net: The Essential Cheat Sheet for C#]]></title><description><![CDATA[A No-Nonsense C# Guide for Go-Getters]]></description><link>https://www.f5run.com/p/starting-out-with-net-the-essential</link><guid isPermaLink="false">https://www.f5run.com/p/starting-out-with-net-the-essential</guid><dc:creator><![CDATA[Samuel Otero]]></dc:creator><pubDate>Sun, 15 Sep 2024 22:26:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jAy9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jAy9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jAy9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jAy9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jAy9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jAy9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jAy9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135582,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jAy9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jAy9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jAy9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jAy9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0dc243-8d96-4a34-b9d4-327bfd364ccb_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Are you looking to start your software development journey within .NET? Or maybe, you are a seasoned developer looking for a change within your tools and want to explore something new? Look no further! This C# &#8220;cheat sheet&#8221; is the guide of the essentials in C#. This is the bare minimum you need to cheat your way through .NET development! By the end of this article, you'll have a solid grasp of C# fundamentals and be well on your way to master the whole thing!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.f5run.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>C# Language Basics</h2><h3>Syntax Overview</h3><p>C# is an object-oriented programming language where programs consist of various objects that interact through methods <a href="https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/tutorials/"><sup>[1]</sup></a>. To get started with C#, you'll need to understand some basic syntax elements.</p><p>Every C# program begins with the <code>using System;</code> statement, which includes the System namespace <a href="https://anywhere.epam.com/en/blog/c-sharp-dot-net-introduction"><sup>[2]</sup></a>. This allows you to use classes and methods from the System namespace without fully qualifying them.</p><p>Comments are crucial for explaining your code. In C#, you can use two types of comments:</p><ol><li><p>Single-line comments, indicated by <code>//</code></p></li><li><p>Multi-line comments, enclosed between <code>/*</code> and <code>*/</code> <a href="https://code.visualstudio.com/docs/csharp/get-started"><sup>[3]</sup></a> <a href="https://www.w3schools.com/cs/cs_syntax.php"><sup>[4]</sup></a></p></li></ol><p>When writing C#, you'll often work with classes. The <code>class</code> keyword is used to declare a class <a href="https://learn.microsoft.com/en-us/training/paths/build-dotnet-applications-csharp/"><sup>[5]</sup></a>. Here's a simple example:</p><pre><code><code>using System;

class MyClass
{
    // Your code here
}</code></code></pre><h3>Data Types and Variables</h3><p>In C#, variables are attributes or data members of a class used for storing data <a href="https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/tutorials/"><sup>[1]</sup></a>. Before using a variable, you need to declare it with a specific data type. C# offers various data types to suit different needs <a href="https://www.w3schools.com/cs/cs_data_types.php"><sup>[6]</sup></a>.</p><p>Here's a table of <strong>common</strong> data types in C#:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cp8P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cp8P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png 424w, https://substackcdn.com/image/fetch/$s_!Cp8P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png 848w, https://substackcdn.com/image/fetch/$s_!Cp8P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png 1272w, https://substackcdn.com/image/fetch/$s_!Cp8P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cp8P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png" width="846" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:795,&quot;width&quot;:846,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:80570,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Cp8P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png 424w, https://substackcdn.com/image/fetch/$s_!Cp8P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png 848w, https://substackcdn.com/image/fetch/$s_!Cp8P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png 1272w, https://substackcdn.com/image/fetch/$s_!Cp8P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ac0758-3f46-4af2-b312-33c8976ac4de_846x795.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When declaring variables, you can initialize them immediately or later:</p><pre><code><code>int myNumber = 5; // Immediate initialization

string myText; // Declaration only

myText = "Hello, C#!"; // Later initialization</code></code></pre><h2>Control Structures and Exception Handling</h2><h3>if-else and switch Statements</h3><p>When you're coding in C#, you'll often need to make decisions based on certain conditions. That's where <code>if-else</code> and <code>switch</code> statements come in handy. These control structures allow you to select which statements to execute from many possible paths based on the value of an expression <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements"><sup>[8]</sup></a>.</p><p>Let's start with the <code>if</code> statement. It's pretty straightforward - it executes a statement only if a provided Boolean expression evaluates to <code>true</code> <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements"><sup>[8]</sup></a>. Here's a simple example:</p><pre><code><code>if (someCondition)
{
    // This code runs if someCondition is true
}
</code></code></pre><p>But what if you want to do something else when the condition is false? That's where the <code>if-else</code> statement comes in. It allows you to choose between two code paths based on a Boolean expression <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements"><sup>[8]</sup></a>. Here's how it looks:</p><pre><code><code>if (someCondition)
{
    // This code runs if someCondition is true
}
else
{
    // This code runs if someCondition is false
}</code></code></pre><p>Now, what if you have multiple conditions to check? You can nest <code>if</code> statements, but that can get messy quickly. That's where the <code>switch</code> statement shines. It selects a statement list to execute based on a pattern match with an expression <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements"><sup>[8]</sup></a>. Here's a basic example:</p><pre><code><code>switch (someVariable)
{
    case 1:
        // Do something if someVariable is 1
        break;
    case 2:
        // Do something if someVariable is 2
        break;
    default:
        // Do this if none of the above cases match
        break;
}</code></code></pre><p>One cool thing about C# is that you can use <code>switch</code> statements with strings, which isn't possible in many other languages <a href="https://anywhere.epam.com/en/blog/c-sharp-dot-net-introduction"><sup>[2]</sup></a>. The compiler is smart enough to optimize this into a hash table lookup for better performance when there are many cases <a href="https://anywhere.epam.com/en/blog/c-sharp-dot-net-introduction"><sup>[2]</sup></a>.</p><h3>Loops (for, while, do-while)</h3><p>Loops are your best friends when you need to repeat a block of code multiple times. C# offers three main types of loops: <code>for</code>, <code>while</code>, and <code>do-while</code>.</p><p>The <code>for</code> loop is great when you know in advance how many times you want to repeat something. It's typically used with a counter variable <a href="https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/tutorials/"><sup>[1]</sup></a>. Here's a basic example:</p><pre><code><code>for (int i = 0; i &lt; 10; i++)
{
    Console.WriteLine(i);
}</code></code></pre><p>The <code>while</code> loop, on the other hand, is perfect when you don't know in advance how many times you need to repeat something. It keeps executing as long as a condition is true <a href="https://www.programiz.com/csharp-programming/do-while-loop"><sup>[17]</sup></a>. Here's how it looks:</p><pre><code><code>while (someCondition)
{
    // This code keeps running as long as someCondition is true
}</code></code></pre><p>The <code>do-while</code> loop is similar to the <code>while</code> loop, but with one key difference: it always executes the loop body at least once before checking the condition <a href="https://www.programiz.com/csharp-programming/do-while-loop"><sup>[17]</sup></a>. It's useful when you want to ensure that your code runs at least once. Here's an example:</p><pre><code><code>do
{
    // This code runs at least once, and then as long as someCondition is true
} while (someCondition);</code></code></pre><h3>Try-Catch-Finally Blocks</h3><p>When you're writing robust C# code, you need to be prepared for things to go wrong. That's where exception handling comes in, and the primary tool for this is the <code>try-catch-finally</code> block <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/exception-handling-statements"><sup>[18]</sup></a>.</p><p>The <code>try</code> block contains the code that might throw an exception. The <code>catch</code> block handles the exception if one occurs. The <code>finally</code> block contains code that runs whether an exception was thrown or not - it's great for cleanup operations <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/exception-handling-statements"><sup>[18]</sup></a>.</p><p>Here's a basic example:</p><pre><code><code>try
{
    // Code that might throw an exception
}
catch (Exception e)
{
    // Handle the exception
}
finally
{
    // Cleanup code that always runs
}</code></code></pre><p>You can have multiple <code>catch</code> blocks to handle different types of exceptions. You can also use exception filters with the <code>when</code> keyword to further refine your exception handling <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/exception-handling-statements"><sup>[18]</sup></a>.</p><p>Remember, when you're working with resources that implement <code>IDisposable</code> or <code>IAsyncDisposable</code>, consider using the <code>using</code> statement. It ensures that resources are properly disposed of when you're done with them <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/exception-handling-statements"><sup>[18]</sup></a>.</p><h2>Methods and Parameters</h2><h3>Method Declaration and Invocation</h3><p>In C#, a method is a code block containing a series of statements that perform a specific task <a href="https://learn.microsoft.com/en-us/dotnet/csharp/methods"><sup>[19]</sup></a>. To declare a method, you need to specify its access modifier, return type, name, and any parameters <a href="https://learn.microsoft.com/en-us/dotnet/csharp/methods"><sup>[19]</sup></a>. Here's a basic structure:</p><pre><code><code>&lt;Access_Modifier&gt; &lt;return_type&gt; &lt;method_name&gt;([&lt;param_list&gt;])
{
    // Method body
}</code></code></pre><p>The access modifier (public or private) determines the method's visibility, while the return type specifies what kind of data the method returns, if any <a href="https://learn.microsoft.com/en-us/dotnet/csharp/methods"><sup>[19]</sup></a>. The method name should be descriptive and follow C# naming conventions.</p><p>To use a method, you need to invoke or call it. You can do this by using the method name followed by parentheses, including any required arguments <a href="https://learn.microsoft.com/en-us/dotnet/csharp/methods"><sup>[19]</sup></a>. For instance:</p><pre><code><code>MethodName(argument1, argument2);</code></code></pre><p>Methods can be either instance or static. Instance methods operate on object instances, while static methods belong to the class itself and don't require an instance to be called <a href="https://learn.microsoft.com/en-us/dotnet/csharp/methods"><sup>[19]</sup></a>.</p><h3>Parameter Passing</h3><p>When you call a method, you can pass arguments in different ways. By default, C# uses pass-by-value for both value types and reference types <a href="https://learn.microsoft.com/en-us/dotnet/csharp/methods"><sup>[19]</sup></a>. This means:</p><ol><li><p>For value types: A copy of the value is passed to the method.</p></li><li><p>For reference types: A copy of the reference is passed, not the object itself.</p></li></ol><p>However, C# also allows you to pass parameters by reference using the <code>ref</code>, <code>out</code>, or <code>in</code> keywords <a href="https://learn.microsoft.com/en-us/dotnet/csharp/methods"><sup>[19]</sup></a>.</p><p>Using these modifiers can affect performance and behavior, so choose wisely based on your needs.</p><p>C# also supports optional parameters. You can define these by providing a default value in the method declaration <a href="https://learn.microsoft.com/en-us/dotnet/csharp/methods"><sup>[19]</sup></a>. For example:</p><pre><code><code>void ExampleMethod(int required, string optional = "default")
{
    // Method body
}</code></code></pre><p>When calling a method with optional parameters, you can omit arguments for the optional ones, and they'll use their default values.</p><h2>Object-Oriented Programming in C#</h2><h3>Classes and Objects</h3><p>Object-Oriented Programming (OOP) in C# organizes code by creating types in the form of classes. These classes contain code that represents specific entities and implement operations through methods and properties <a href="https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/tutorials/classes"><sup>[21]</sup></a>. To create a class, you use the <code>class</code> keyword followed by the class name <a href="https://www.w3schools.com/cs/cs_classes.php"><sup>[22]</sup></a>. For example:</p><pre><code><code>class Car
{
    string color = "red";
}</code></code></pre><p>In this example, <code>color</code> is a field (or attribute) of the <code>Car</code> class <a href="https://www.w3schools.com/cs/cs_classes.php"><sup>[22]</sup></a>.</p><p>To create an object from a class, you use the <code>new</code> keyword:</p><pre><code><code>Car myObj = new Car();

Console.WriteLine(myObj.color);</code></code></pre><p>You can access the fields and methods of an object using dot notation (e.g., <code>myObj.color</code>) <a href="https://www.w3schools.com/cs/cs_classes.php"><sup>[22]</sup></a>.</p><h3>Interfaces and Abstract Classes</h3><p>Interfaces and abstract classes are two ways to achieve abstraction in C#. An abstract class is declared using the <code>abstract</code> keyword and must contain at least one abstract method <a href="https://www.geeksforgeeks.org/difference-between-abstract-class-and-interface-in-c-sharp/"><sup>[23]</sup></a>. It can't be instantiated directly and is typically used to define a base class in a class hierarchy <a href="https://www.geeksforgeeks.org/difference-between-abstract-class-and-interface-in-c-sharp/"><sup>[23]</sup></a>.</p><p>Interfaces, on the other hand, contain only the declaration of methods, properties, events, or indexers (although since C# 8, they can also include default implementations) <a href="https://www.geeksforgeeks.org/difference-between-abstract-class-and-interface-in-c-sharp/"><sup>[23]</sup></a>. </p><p>To declare an abstract class:</p><pre><code><code>public abstract class Fruits
{
    public abstract void Mango();
}</code></code></pre><p>To declare an interface:</p><pre><code><code>public interface Readable
{
    void Read();
}</code></code></pre><p>You can implement both an abstract class and an interface in the same class:</p><pre><code><code>public class MyClass : AbstractClass, IMyInterface
{
    // Class implementation
}</code></code></pre><p>By understanding these OOP concepts, you'll be well-equipped to write more organized, reusable, and maintainable C# code.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/p/starting-out-with-net-the-essential?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/p/starting-out-with-net-the-essential?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.f5run.com/p/starting-out-with-net-the-essential?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><h2>&#8220;Advanced&#8221; C# Concepts:</h2><h3>Generics</h3><p>Generics in C# allow you to create classes, interfaces, methods, and other types that can work with any data type <a href="https://www.tutorialsteacher.com/csharp/csharp-generics"><sup>[24]</sup></a>. They provide a way to write reusable, type-safe code without sacrificing performance.</p><p>To define a generic class, you use angle brackets (<code>&lt;&gt;</code>) with a type parameter:</p><pre><code><code>public class DataStore&lt;T&gt;
{
    public T Data { get; set; }
}</code></code></pre><p>You can then create instances of the generic class by specifying the actual type:</p><pre><code><code>DataStore&lt;string&gt; stringStore = new DataStore&lt;string&gt;();

stringStore.Data = "Hello, Generics!";</code></code></pre><p>Generics offer several advantages:</p><ol><li><p>Increased code reusability</p></li><li><p>Type safety at compile-time</p></li><li><p>Better performance by avoiding boxing and unboxing operations</p></li></ol><p>You can also create generic methods within non-generic classes:</p><pre><code><code>public void Print&lt;T&gt;(T data)
{
    Console.WriteLine(data);
}</code></code></pre><p>Generics are widely used in .NET, particularly in collections like <code>List&lt;T&gt;</code>, <code>Dictionary&lt;TKey, TValue&gt;</code>, and <code>Queue&lt;T&gt;</code> <a href="https://www.programiz.com/csharp-programming/generics"><sup>[25]</sup></a>.</p><h3>LINQ (Language Integrated Query)</h3><p>LINQ, or Language Integrated Query, is a powerful feature introduced in .NET 3.5 that allows you to query various data sources using a consistent syntax <a href="https://www.geeksforgeeks.org/linq-language-integrated-query/"><sup>[26]</sup></a>. It provides a way to write queries directly in C# code, making data manipulation more intuitive and less error-prone.</p><p>LINQ queries can be written using two syntaxes:</p><ol><li><p>Query Syntax:</p></li></ol><pre><code><code>var evenNumbers = from num in numbers
                  where num % 2 == 0
                  select num;</code></code></pre><ol start="2"><li><p>Method Syntax:</p></li></ol><pre><code><code>var evenNumbers = numbers.Where(num =&gt; num % 2 == 0);</code></code></pre><p>Both syntaxes are semantically identical, but query syntax is often easier to read for complex queries <a href="https://learn.microsoft.com/en-us/dotnet/csharp/linq/get-started/write-linq-queries"><sup>[27]</sup></a>.</p><p>LINQ supports various operations, including filtering, sorting, grouping, and joining data. It can work with different data sources, such as in-memory collections, databases (LINQ to SQL), XML (LINQ to XML), and more <a href="https://www.geeksforgeeks.org/linq-language-integrated-query/"><sup>[26]</sup></a>.</p><p>Here's an example of a more complex LINQ query that demonstrates grouping:</p><pre><code><code>var groups = from word in words
             group word by word&lt;sup&gt;&lt;/sup&gt; into g
             select new { FirstLetter = g.Key, Words = g };</code></code></pre><p>LINQ queries are executed lazily, meaning they don't retrieve the data until you actually iterate over the results or call a method that forces execution (like <code>ToList()</code> or <code>Count()</code>) <a href="https://learn.microsoft.com/en-us/dotnet/csharp/linq/get-started/write-linq-queries"><sup>[27]</sup></a>.</p><p>By mastering these advanced C# concepts, you'll be able to write more efficient, flexible, and maintainable code. Delegates and events help you create loosely coupled systems, generics enable you to write reusable and type-safe code, and LINQ simplifies data manipulation across various data sources.</p><h3>Collections and Data Structures</h3><p>When you're working with .NET, you'll often need to handle groups of similar data. That's where collections come in handy. They're like super-powered arrays that make your life easier when dealing with sets of objects.</p><p>.NET offers two main flavors of collections: generic and non-generic <a href="https://learn.microsoft.com/en-us/dotnet/standard/collections/"><sup>[28]</sup></a>. Generic collections are the cool kids on the block. They're type-safe at compile time, which means fewer headaches for you later. Plus, they generally perform better than their non-generic cousins. When you're creating a generic collection, you specify the type of data it'll hold, so you don't have to cast objects when adding or removing items.</p><p>Here&#8217;s two of the most common collection types and when to use them:</p><ol><li><p>List: Your go-to for a dynamic array that can grow or shrink as needed.</p></li><li><p>Dictionary&lt;TKey, TValue&gt;: Perfect for storing key-value pairs.</p></li></ol><p>One cool thing about collections is that they all implement either <code>IEnumerable</code> or <code>IEnumerable</code>, which means you can easily iterate through them using a foreach loop <a href="https://learn.microsoft.com/en-us/dotnet/standard/collections/"><sup>[28]</sup></a>. Moreover, you can even use LINQ queries to filter, order, or group your data.</p><h3>Asynchronous Programming</h3><p>Asynchronous programming is like being a master chef in the kitchen (not like me). Instead of waiting for the water to boil before you start chopping vegetables, you get multiple tasks going at once. In C#, the async and await keywords are your ingredients for creating non-blocking code <a href="https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/task-asynchronous-programming-model"><sup>[30]</sup></a>.</p><p>Here's why async programming is awesome:</p><ol><li><p>It keeps your application responsive, even when dealing with potentially slow operations like web requests.</p></li><li><p>It's relatively easy to write, thanks to the async and await keywords.</p></li><li><p>It doesn't create additional threads, which means efficient use of system resources.</p></li></ol><p>To create an async method, you use the async keyword and return a Task or Task. Here's a simple example:</p><pre><code><code>public async Task&lt;string&gt; GetDataAsync()
{
    using (var client = new HttpClient())
    {
        return await client.GetStringAsync("https://api.example.com/data");
    }
}</code></code></pre><p>The await keyword is where the magic happens. It tells the compiler, "Hey, this operation might take a while. Feel free to go do something else, and I'll let you know when it's done."</p><p>One important thing to remember: async all the way down. If you're calling an async method, the calling method should also be async <a href="https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/"><sup>[31]</sup></a>.</p><h2>Conclusion</h2><p>To wrap things up, this C# cheat sheet serves as an essential guide for developers at all levels. From the fundamentals of syntax and data types to advanced concepts like generics and LINQ, it covers the essential aspects of C# programming. The steps through object-oriented programming, C# features, and asynchronous coding equips you with the tools to create efficient and robust applications.</p><p>To stay updated on the latest C# developments and receive more coding tips, consider <a href="https://www.f5build.com/subscribe">subscribing to my newsletter</a>. Stay .NET, and may your C# skills continue to grow!</p>]]></content:encoded></item><item><title><![CDATA[Discover the Hidden Gem for .NET Developers Ready to Embrace AI]]></title><description><![CDATA[How This Overlooked Tool Can Revolutionize Your AI Projects]]></description><link>https://www.f5run.com/p/discover-the-hidden-gem-for-net-developers</link><guid isPermaLink="false">https://www.f5run.com/p/discover-the-hidden-gem-for-net-developers</guid><dc:creator><![CDATA[Samuel Otero]]></dc:creator><pubDate>Mon, 08 Jul 2024 08:31:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!j2TG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j2TG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j2TG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!j2TG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!j2TG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!j2TG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j2TG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:120283,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j2TG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!j2TG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!j2TG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!j2TG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe091c0c0-90f3-4f71-a3be-75674b330475_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Introduction to ML.NET</h2><p>As a .NET developer, you've likely encountered the buzz surrounding Artificial Intelligence (AI) and Machine Learning (ML). While these concepts may seem daunting, Microsoft has unveiled a hidden gem that simplifies the integration of ML into your .NET applications: <strong>ML.NET</strong>.</p><p>ML.NET is an open-source, cross-platform machine learning framework designed specifically for .NET developers. It empowers you to build, train, and deploy custom machine learning models without the need for extensive expertise in data science or complex mathematical algorithms. With ML.NET, you can harness the power of AI and unlock new possibilities for your applications, revolutionizing the way you approach problem-solving and decision-making.</p><p>Whether you're building enterprise-level software, creating innovative web applications, or developing cutting-edge solutions, ML.NET empowers you to leverage the capabilities of AI and machine learning without the need for extensive expertise in these domains. With its intuitive APIs and seamless integration with .NET, you can focus on what you do best: building robust and efficient applications.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Understanding the basics of ML.NET</h2><p>Before diving into the benefits and applications of ML.NET, it's essential to grasp the fundamentals of this remarkable framework. At its core, ML.NET is a machine learning toolkit that provides a comprehensive set of tools and libraries for building, training, and deploying machine learning models.</p><p>One of the key strengths of ML.NET lies in its ability to handle a wide range of machine learning tasks, including:</p><ul><li><p><strong>Classification</strong>: Categorize data into predefined classes or labels.</p></li><li><p><strong>Regression</strong>: Predict numerical values based on input data.</p></li><li><p><strong>Clustering</strong>: Group similar data points together based on their characteristics.</p></li><li><p><strong>Recommendation</strong>: Suggest relevant items or content to users based on their preferences and behavior.</p></li></ul><p>ML.NET simplifies the process of training and evaluating machine learning models by providing a streamlined workflow. It abstracts away the complexities of underlying algorithms, allowing you to focus on building effective solutions tailored to your specific requirements.</p><h2>Benefits of using ML.NET for .NET developers</h2><p>As a .NET developer, embracing ML.NET offers numerous advantages that can elevate your development capabilities and unlock new possibilities. Here are some compelling reasons to consider integrating ML.NET into your projects:</p><ol><li><p><strong>Seamless Integration with .NET</strong>: ML.NET is designed to seamlessly integrate with the .NET ecosystem, ensuring a consistent and familiar development experience. You can leverage your existing knowledge of .NET languages, tools, and frameworks, minimizing the learning curve and maximizing productivity.</p></li><li><p><strong>Cross-Platform Support</strong>: ML.NET is a cross-platform framework, enabling you to develop machine learning applications that run on various operating systems, including Windows, Linux, and macOS. This flexibility allows you to target a wide range of devices and platforms without sacrificing performance or compatibility.</p></li><li><p><strong>Scalability and Performance</strong>: ML.NET is built with scalability and performance in mind. It leverages the power of .NET's runtime and optimized libraries, ensuring efficient execution and resource utilization, even for computationally intensive machine learning tasks.</p></li><li><p><strong>Extensive Model Support</strong>: ML.NET supports a wide range of machine learning models, including popular algorithms like logistic regression, decision trees, and neural networks. This versatility empowers you to tackle diverse problem domains and find the most suitable solution for your specific use case.</p></li><li><p><strong>Automated Machine Learning (AutoML)</strong>: ML.NET incorporates AutoML capabilities, which automate the process of selecting the best machine learning model and optimizing its hyperparameters. This feature streamlines the model development process, saving you valuable time and resources.</p></li><li><p><strong>Deployment Flexibility</strong>: With ML.NET, you can deploy your machine learning models in various environments, including cloud platforms, edge devices, and on-premises servers. This flexibility ensures that your solutions can adapt to different deployment scenarios, catering to diverse business needs.</p></li><li><p><strong>Community and Support</strong>: ML.NET is an open-source project backed by Microsoft and a vibrant community of developers. This ensures continuous improvement, bug fixes, and access to a wealth of resources, including documentation, tutorials, and community support.</p></li></ol><h2>ML.NET vs Python: A comparison</h2><p>When it comes to machine learning and AI, Python has long been considered a dominant language, thanks to its rich ecosystem of libraries and frameworks like TensorFlow, PyTorch, and scikit-learn. However, ML.NET offers a compelling alternative for .NET developers, enabling them to leverage the power of machine learning without abandoning their preferred development environment.</p><p>Here's a comparison between ML.NET and Python in the context of machine learning:</p><ol><li><p><strong>Language and Ecosystem</strong>: Python is a general-purpose programming language with a vast ecosystem of libraries and tools specifically designed for machine learning and data science. ML.NET, on the other hand, is a machine learning framework that integrates seamlessly with the .NET ecosystem, allowing you to leverage your existing knowledge and tools.</p></li><li><p><strong>Performance</strong>: While Python is known for its simplicity and ease of use, it can sometimes fall short in terms of performance, especially for computationally intensive tasks. ML.NET, being built on top of the .NET runtime, can leverage the performance optimizations and native code execution capabilities of .NET, potentially offering better performance in certain scenarios.</p></li><li><p><strong>Deployment and Integration</strong>: If your primary development environment is .NET, integrating ML.NET into your existing applications can be more straightforward and seamless compared to incorporating Python-based machine learning solutions. ML.NET allows you to deploy your models as part of your .NET applications, simplifying the deployment process.</p></li><li><p><strong>Tooling and IDE Support</strong>: Python has a rich ecosystem of development tools and IDEs, such as Jupyter Notebooks, PyCharm, and Visual Studio Code. However, for .NET developers accustomed to Visual Studio and its powerful tooling, ML.NET provides a familiar and integrated development experience.</p></li><li><p><strong>Community and Resources</strong>: While Python has a large and active community dedicated to machine learning and data science, ML.NET benefits from the vibrant .NET community, as well as the extensive resources and support provided by Microsoft.</p></li></ol><p>Ultimately, the choice between ML.NET and Python for machine learning will depend on your specific requirements, existing skillset, and development ecosystem. If you're a .NET developer looking to leverage machine learning capabilities without the need to learn a new language or switch ecosystems, ML.NET presents an attractive and powerful solution.</p><h2>Hands-on Machine Learning with ML.NET: A Step by Step of a Simple Scenario: </h2><p>Now that you've gained an understanding of ML.NET and its benefits, it's time to dive into the hands-on aspect of building machine learning applications using this powerful framework. In this comprehensive guide, we'll explore the key steps and components involved in developing ML.NET solutions.</p><h3>1. Data Preparation</h3><p>Before you can train and deploy machine learning models, you need to ensure that your data is in a suitable format and free from any inconsistencies or errors. ML.NET provides a set of data transformation and preprocessing tools to help you clean, transform, and normalize your data for optimal model performance.</p><p>Here's an example of how you can load and preprocess data using ML.NET:</p><pre><code>// Load data from a file
var dataView = mlContext.Data.LoadFromTextFile&lt;SampleData&gt;(dataPath, hasHeader: true, separatorChar: ',');

// Preprocess data
var pipeline = mlContext.Transforms.Concatenate("Features", "FeatureA", "FeatureB", "FeatureC")
                        .Append(mlContext.Transforms.NormalizeMeanVariance("Features"))
                        .AppendCacheCheckpoint(mlContext);</code></pre><h3>2. Model Selection and Training</h3><p>With your data prepared, the next step is to select an appropriate machine learning algorithm and train your model. ML.NET offers a wide range of built-in algorithms for various tasks, such as classification, regression, clustering, and recommendation.</p><p>Here's an example of how you can train a logistic regression model for binary classification:</p><pre><code>// Define the training pipeline
var trainingPipeline = pipeline.Append(mlContext.BinaryClassification.Trainers.LbfgsLogisticRegressionBinary());

// Train the model
var model = trainingPipeline.Fit(trainingData);</code></pre><h3>3. Model Evaluation and Tuning</h3><p>Once your model is trained, it's crucial to evaluate its performance and make necessary adjustments to improve its accuracy and reliability. ML.NET provides various evaluation metrics and techniques to help you assess your model's performance and fine-tune its hyperparameters.</p><p>Here's an example of how you can evaluate a binary classification model using cross-validation:</p><pre><code>// Define the cross-validation settings
var crossValidationResults = mlContext.BinaryClassification.CrossValidateNonCalibrated(trainingData, trainingPipeline, numberOfFolds: 5);

// Evaluate the model's performance
var metrics = crossValidationResults.Average;
Console.WriteLine($"Accuracy: {metrics.Accuracy:0.##}");
Console.WriteLine($"AUC: {metrics.AreaUnderRocCurve:0.##}");</code></pre><h3>4. Model Deployment and Consumption</h3><p>Once you're satisfied with your model's performance, you can deploy it for real-world use. ML.NET offers several options for deploying your models, including integration into .NET applications, deployment to cloud platforms, or deployment to edge devices.</p><p>Here's an example of how you can consume a trained model in a .NET application:</p><pre><code>// Load the trained model
var model = mlContext.Model.Load(modelPath, out var inputDataView);

// Create a prediction engine
var predictionEngine = mlContext.Model.CreatePredictionEngine&lt;SampleData, SamplePrediction&gt;(model);

// Make predictions
var prediction = predictionEngine.Predict(new SampleData
{
    FeatureA = 1.2f,
    FeatureB = 3.4f,
    FeatureC = 5.6f
});

Console.WriteLine($"Predicted Label: {prediction.PredictedLabel}");</code></pre><p>Throughout this comprehensive guide, you'll gain hands-on experience with various aspects of machine learning using ML.NET, from data preparation and model training to evaluation and deployment. By following these steps and leveraging the provided examples, you'll be well-equipped to build robust and efficient machine learning solutions tailored to your specific needs.</p><h2>ML.NET in real-world applications</h2><p>While the theoretical foundations and hands-on exercises are essential for mastering ML.NET, it's equally important to understand how this powerful framework can be applied in real-world scenarios. By exploring practical use cases and success stories, you'll gain a deeper appreciation for the versatility and impact of ML.NET.</p><p>Here are some real-world applications where ML.NET has been successfully employed:</p><ol><li><p><strong>Predictive Maintenance</strong>: ML.NET can be leveraged to build predictive maintenance solutions for industrial equipment and machinery. By analyzing sensor data and historical maintenance records, machine learning models can be trained to predict potential failures or maintenance requirements, enabling proactive measures and reducing downtime.</p></li><li><p><strong>Fraud Detection</strong>: Financial institutions and e-commerce platforms can utilize ML.NET to develop fraud detection systems. These systems can analyze transaction data, user behavior patterns, and other relevant factors to identify and flag potentially fraudulent activities, enhancing security and protecting against financial losses.</p></li><li><p><strong>Sentiment Analysis</strong>: ML.NET can be used to build sentiment analysis applications that analyze text data, such as customer reviews, social media posts, or product feedback. These applications can help businesses understand customer sentiment, identify trends, and make data-driven decisions to improve customer satisfaction and product offerings.</p></li><li><p><strong>Recommendation Systems</strong>: E-commerce platforms, streaming services, and content providers can leverage ML.NET to build personalized recommendation systems. These systems analyze user preferences, browsing history, and other relevant data to suggest products, movies, or content that users are likely to be interested in, enhancing the overall user experience.</p></li><li><p><strong>Image and Video Analysis</strong>: ML.NET can be employed in applications that require image or video analysis, such as object detection, facial recognition, or content moderation. These applications can be used in various industries, including security, surveillance, retail, and entertainment.</p></li><li><p><strong>Healthcare and Biomedical Research</strong>: ML.NET can play a significant role in healthcare and biomedical research by enabling the development of applications for disease diagnosis, drug discovery, and personalized treatment plans. Machine learning models can analyze medical data, genomic information, and patient records to support clinical decision-making and advance medical research.</p></li></ol><p>These real-world applications showcase the versatility and potential of ML.NET in addressing diverse challenges across various industries. As you delve deeper into ML.NET and explore its capabilities, you'll be better equipped to identify opportunities for leveraging machine learning in your own projects and domains.</p><h2>Resources to learn ML.NET: Books, online courses, and tutorials</h2><p>Mastering ML.NET is an ongoing journey, and having access to quality resources can greatly accelerate your learning curve. Whether you're a beginner or an experienced developer, there's always room to expand your knowledge and stay up-to-date with the latest developments in this rapidly evolving field.</p><p>Here are some valuable resources to help you learn and master ML.NET:</p><h3>Books</h3><ol><li><p><strong>"Machine Learning with ML.NET: A Practical Guide"</strong> by Ankit Pati: This comprehensive book provides a hands-on approach to learning ML.NET, covering topics such as data preparation, model training, evaluation, and deployment. It also includes practical examples and real-world use cases.</p></li><li><p><strong>"ML.NET Cookbook"</strong> by Sudipta Mukherjee and Arun Mahapatra: This book offers a collection of recipes and solutions for common machine learning tasks using ML.NET. It covers a wide range of topics, from data preprocessing to advanced techniques like transfer learning and deep learning.</p></li><li><p><strong>"Hands-On Machine Learning with ML.NET"</strong> by Jarred Capellman and Naren Samnani: This book provides a comprehensive introduction to ML.NET, guiding readers through the entire machine learning workflow, from data exploration to model deployment. It includes practical examples and real-world scenarios to reinforce learning.</p></li></ol><h3>Online Courses</h3><ol><li><p><strong>"Introduction to Machine Learning with ML.NET"</strong> on Microsoft Learn: This free online course from Microsoft offers a comprehensive introduction to ML.NET, covering the fundamentals of machine learning, data preparation, model training, and deployment.</p></li><li><p><strong>"Advanced Machine Learning with ML.NET"</strong> on Pluralsight: This course builds upon the basics of ML.NET and delves into more advanced topics, such as automated machine learning, model operationalization, and best practices for building and deploying machine learning solutions at scale.</p></li><li><p><strong>"ML.NET Masterclass"</strong> on Udemy: This comprehensive course covers ML.NET from the ground up, including data preparation, model selection, training, evaluation, and deployment. It also includes hands-on projects and real-world examples to reinforce learning.</p></li></ol><h3>Tutorials and Documentation</h3><ol><li><p><strong>ML.NET Documentation</strong>: The official documentation provided by Microsoft is a valuable resource for learning ML.NET. It includes tutorials, API references, and guides covering various aspects of the framework.</p></li><li><p><strong>ML.NET Samples</strong>: Microsoft maintains a repository of sample applications and code snippets demonstrating the use of ML.NET in various scenarios. These samples can serve as excellent learning resources for developers.</p></li><li><p><strong>ML.NET Blog</strong>: The official ML.NET blog is a great source for staying up-to-date with the latest developments, announcements, and best practices related to the framework. It also features guest posts and tutorials from industry experts.</p></li><li><p><strong>Community Resources</strong>: The vibrant ML.NET community offers a wealth of resources, including forums, user groups, and online communities where you can connect with other developers, ask questions, and share knowledge.</p></li></ol><p>By leveraging these books, online courses, tutorials, and community resources, you'll be well-equipped to embark on your ML.NET learning journey. Whether you're a beginner or an experienced developer, these resources will provide you with the necessary knowledge and practical skills to harness the power of machine learning in your .NET applications.</p><h2>Conclusion: Embracing AI with ML.NET</h2><p>Embracing artificial intelligence and machine learning is no longer a luxury but a necessity. As a .NET developer, you have a unique opportunity to unlock the potential of these cutting-edge technologies with the help of ML.NET.</p><p>By integrating ML.NET into your development workflow, you can seamlessly incorporate machine learning capabilities into your .NET applications, opening up a world of possibilities. From predictive analytics and recommendation systems to image recognition and natural language processing, the possibilities are endless.</p><p>ML.NET empowers you to leverage the power of machine learning without the need for extensive expertise in data science or complex mathematical algorithms. Its intuitive APIs, seamless integration with the .NET ecosystem, and comprehensive documentation make it an accessible and powerful tool for developers of all skill levels.</p><p>Throughout this article, we've explored the fundamentals of ML.NET, its benefits, and its real-world applications. We've delved into hands-on examples, showcasing how to build machine learning solutions from data preparation to model deployment. Additionally, we've provided valuable resources to further your learning journey and stay up-to-date with the latest developments in the field.</p><p>Embracing ML.NET not only enhances your development capabilities but also positions you at the forefront of innovation. As businesses increasingly recognize the value of data-driven decision-making and intelligent systems, your skills in machine learning will become invaluable assets.</p><p>So, take the leap and explore the hidden gem that is ML.NET. Unlock the power of artificial intelligence, and elevate your .NET development to new heights. The future of technology is here, and ML.NET is your gateway to embracing it with confidence and expertise.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Discover .NET 9: A Detailed Preview of New Features]]></title><description><![CDATA[A Closer Look at the Features Shaping the Future of .NET]]></description><link>https://www.f5run.com/p/discover-net-9-a-detailed-preview</link><guid isPermaLink="false">https://www.f5run.com/p/discover-net-9-a-detailed-preview</guid><dc:creator><![CDATA[Samuel Otero]]></dc:creator><pubDate>Fri, 28 Jun 2024 10:34:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-lde!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-lde!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-lde!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-lde!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-lde!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-lde!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-lde!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:188383,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-lde!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-lde!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-lde!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-lde!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c37f8b0-4bc7-408e-86c0-2c60c766d089_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The future of .NET development has never looked brighter, and with the introduction of .NET 9, developers are poised to redefine what's possible. Microsoft and the .NET community are not just making incremental updates; they're delivering transformative changes across the board. From groundbreaking AI integrations to seamless cross-platform development, can .NET 9 can developer's dream come true? Well, the enhanced support for OpenAI and other open-source models, coupled with new tools like TensorPrimitives, solidifies .NET's position as the go-to framework for building intelligent applications. Bold statement there, I know, however, with strategic partnerships and a commitment to cutting-edge innovation, Microsoft is setting the stage for a new era of software development.</p><p>DotNet 9 also brings significant advancements in mobile and web development, security, and cloud-native applications. .NET MAUI keeps transforming mobile app development, allowing for native apps on both Android and iOS from a single codebase. Meanwhile, enhancements in ASP.NET Core streamline web development, with built-in support for OpenAPI and improved performance features. Security is also a top priority, with new encryption protocols and authentication enhancements ensuring robust protection. And of course, we can't forget about the cloud, and .NET 9's deep integration with Azure and support for scalable microservices architecture that aims to make it easier than ever to build and deploy powerful, scalable applications. Better be ready!</p><div><hr></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/p/discover-net-9-a-detailed-preview?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thank you for reading F5Build by Samuel Otero. This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/p/discover-net-9-a-detailed-preview?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.f5run.com/p/discover-net-9-a-detailed-preview?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><h3>AI-Related Improvements &amp; Partnerships</h3><p>The integration of artificial intelligence into .NET applications has seen significant enhancements, particularly with .NET 9. Developers can look forward to more streamlined processes for incorporating AI, thanks to improved support and extensive libraries tailored for OpenAI and other open-source models, both hosted and local <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a> <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a> <a href="https://visualstudiomagazine.com/Articles/2024/02/26/net-9-preview-1.aspx"><sup>[3]</sup></a>. Microsoft's commitment to expanding AI capabilities in .NET is evident from their ongoing collaborations with AI ecosystem partners, which have resulted in advanced tools like Semantic Kernel and enhanced access to vector databases such as Qdrant and Milvus <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a> <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a>. Moreover, the introduction of TensorPrimitives in .NET has provided developers with more robust tools for building AI-driven applications, ensuring that .NET remains at the forefront of AI application development <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a>.</p><p>Microsoft's strategic partnerships have been crucial in advancing AI technologies within the .NET framework. The collaboration with OpenAI has been particularly impactful, allowing developers to leverage powerful AI tools like Microsoft Copilot in their applications <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a> <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a>. This partnership underscores Microsoft's strategy to integrate cutting-edge AI technologies with .NET, enhancing the platform's capabilities and making it a more attractive option for developers looking to build intelligent applications.</p><h3>Cross-Platform Development Advancements</h3><h4>Mobile Development with MAUI</h4><p>.NET 9 introduces significant enhancements in mobile application development, particularly through the .NET Multi-platform App UI (MAUI). This framework extends its capabilities beyond traditional desktop applications to include robust mobile solutions <a href="https://dev.to/bytehide/exploring-net-9-preview-4-all-you-need-to-know-3mop"><sup>[5]</sup></a>. With .NET MAUI, you can develop native apps for both Android and iOS using a single codebase, simplifying the development process and reducing time to market <a href="https://dev.to/bytehide/exploring-net-9-preview-4-all-you-need-to-know-3mop"><sup>[5]</sup></a>.</p><p>A prime example of this is the ability to implement new soft keyboard inputs such as <code>Password</code>, <code>Date</code>, and <code>Time</code> on mobile devices, which are now supported in editor and entry controls within .NET MAUI 9 Preview 5 <a href="https://learn.microsoft.com/en-us/dotnet/maui/whats-new/dotnet-9?view=net-maui-8.0"><sup>[6]</sup></a>. Moreover, the integration of Android 15 Beta 1 and the enhancements in NativeAOT for iOS &amp; Mac Catalyst improve performance and compatibility across platforms <a href="https://visualstudiomagazine.com/Articles/2024/05/28/net-9-preview-4.aspx"><sup>[7]</sup></a>.</p><h4>ASP. NET Core &amp; Desktop Development Enhancements</h4><p>The advancements in web development within .NET 9 are equally impressive. The introduction of new features for WPF and WinForms, alongside enhanced capabilities in ASP.NET Core, marks significant progress <a href="https://dev.to/bytehide/exploring-net-9-preview-4-all-you-need-to-know-3mop"><sup>[5]</sup></a>. These include improvements to Blazor for building interactive web applications, better support for SignalR, and streamlined processes for handling minimal APIs and authentication <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/overview"><sup>[8]</sup></a>.</p><p>One of the standout enhancements is the built-in support for OpenAPI document generation, which simplifies the creation of well-defined APIs <a href="https://visualstudiomagazine.com/Articles/2024/05/28/net-9-preview-4.aspx"><sup>[7]</sup></a>. Additionally, the introduction of <code>HybridCache</code> and improvements in the developer exception page enhance the overall development experience and performance of web applications <a href="https://visualstudiomagazine.com/Articles/2024/05/28/net-9-preview-4.aspx"><sup>[7]</sup></a>.</p><p>The .NET MAUI Blazor Hybrid and Web App project template, introduced in .NET 9 Preview 5, exemplifies Microsoft's commitment to cross-platform development. This template facilitates the creation of applications that can run on Android, iOS, Mac, Windows, and the web, maximizing code reuse and efficiency <a href="https://visualstudiomagazine.com/Articles/2024/06/20/net-9-preview-5.aspx"><sup>[9]</sup></a>.</p><p>ASP.NET Core 9 also introduces enhancements aimed at boosting web performance. The framework now includes better code analysis tools that not only detect errors but also offer recommendations for optimizing your code. These tools are designed to ensure that your applications run smoothly and are free from common coding errors, thus improving overall performance and reliability <a href="https://dev.to/bytehide/exploring-net-9-preview-4-all-you-need-to-know-3mop"><sup>[5]</sup></a>.</p><h3>Security Improvements</h3><h4>New Encryption Protocols</h4><p>In the realm of cryptography, .NET 9 introduces significant advancements, particularly with the new one-shot hash method on the CryptographicOperations type and the implementation of the KMAC algorithm. The one-shot hash method simplifies the process of hashing data, enabling you to handle various cryptographic needs efficiently and securely <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/libraries"><sup>[10]</sup></a>. This method is designed to optimize performance and minimize resource allocation, which is crucial in maintaining application speed and reliability.</p><p>Additionally, the KMAC algorithm, specified by NIST SP-800-185, is now supported in .NET 9. This algorithm enhances message authentication and pseudorandom generation capabilities, providing a robust framework for secure coding. It's available on platforms like Linux with OpenSSL 3.0 or later, and Windows 11 Build 26016 or later. The inclusion of classes like <code>Kmac128</code>, <code>Kmac256</code>, <code>KmacXof128</code>, and <code>KmacXof256</code> allows developers to generate message authentication codes (MACs) efficiently or perform one-shot hashing over a single input data <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/libraries"><sup>[10]</sup></a>.</p><h4>Authentication Enhancements</h4><p>.NET 9 has made significant strides in improving authentication mechanisms, particularly with the OAuth and OpenID Connect (OIDC) authentication handlers. The introduction of the <code>AdditionalAuthorizationParameters</code> option is a game-changer, simplifying the customization of authorization message parameters typically included in the redirect query string. This enhancement allows you to add parameters like "prompt" for login or specify an "audience" URL with ease, without the need for cumbersome custom callbacks or method overrides <a href="https://medium.com/c-sharp-progarmming/asp-net-core-9-0-authentication-and-authorization-enhancements-4a8e248baf61"><sup>[11]</sup></a>.</p><p>For Windows authentication, the enhancements in HTTP.sys are particularly noteworthy. With properties like <code>EnableKerberosCredentialCaching</code> and <code>CaptureCredentials</code>, you can fine-tune how HTTP.sys handles authentication, optimizing performance and security. These properties facilitate the configuration of flags such as enabling Kerberos credential caching for improved performance and capturing user credentials during the authentication process <a href="https://medium.com/c-sharp-progarmming/asp-net-core-9-0-authentication-and-authorization-enhancements-4a8e248baf61"><sup>[11]</sup></a>.</p><h3>.NET 9 for Cloud-Native Applications</h3><h4>Cloud Integration Enhancements</h4><p>.NET 9 marks a significant leap forward in cloud-native application development, with a strong emphasis on seamless cloud integration. The introduction of .NET Aspire, a cloud-ready stack, simplifies the creation of observable, production-ready, distributed applications. This stack is delivered through a series of NuGet packages that address specific cloud-native concerns, making it easier for you to develop applications that are both scalable and maintainable <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/overview"><sup>[8]</sup></a><a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a><a href="https://visualstudiomagazine.com/Articles/2024/02/26/net-9-preview-1.aspx"><sup>[3]</sup></a>. Additionally, the integration with Microsoft Azure has been deeply enhanced in .NET 9 Preview 4, allowing for effortless deployment of applications using Azure Functions, Logic Apps, and more. This integration ensures that your applications can leverage the full range of Azure's capabilities to enhance functionality and performance <a href="https://dev.to/bytehide/exploring-net-9-preview-4-all-you-need-to-know-3mop"><sup>[5][5]</sup></a>.</p><h4>Scalability Improvements</h4><p>Scalability is a cornerstone of .NET 9, particularly with the enhancements in containerization and microservices architecture. The updated platform supports Docker and Kubernetes more robustly, enabling you to deploy scalable microservices with ease. This improvement is crucial for applications requiring high availability and elasticity <a href="https://dev.to/bytehide/exploring-net-9-preview-4-all-you-need-to-know-3mop"><sup>[5]</sup></a>. Furthermore, the .NET runtime has been optimized to include numerous performance enhancements such as loop optimizations and inlining improvements, which contribute to faster execution and better resource management in scalable applications <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/overview"><sup>[8]</sup></a>. The Azure Container Apps service has also been tailored to ensure that .NET 9 applications can scale dynamically within a Kubernetes-based environment, addressing challenges such as encrypted ephemeral data and optimized rate limiting APIs for better performance across nodes <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a>.</p><p>These advancements in .NET 9 not only streamline the development process but also significantly reduce the distance between development and production, ensuring that your cloud-native applications are both powerful and efficient. By utilizing these new capabilities, you can build applications that are ready to meet the demands of modern digital ecosystems, with reduced cost and complexity.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>AI and ML Integrations</h3><h4>AI Libraries and SDKs</h4><p>.NET 9 introduces significant enhancements in AI integration, notably through the expansion of ML.NET and partnerships with major AI providers. ML.NET 4.0, an open-source, cross-platform framework, now supports additional tokenizer models such as Tiktoken and Llama, as well as the CodeGen model, enabling more sophisticated machine learning capabilities within your .NET applications <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/overview"><sup>[8][8]</sup></a>. The framework's integration with Azure Open AI, highlighted by the popular Microsoft Copilot, exemplifies Microsoft's commitment to providing developers with powerful tools to incorporate AI into their applications. This ongoing collaboration aims to streamline the implementation of AI solutions, enhancing both the development experience and the capabilities of applications <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a>.</p><h3>Future Prospects for .NET 9 and Beyond</h3><p>As we look towards the future of .NET, the release of .NET 9 marks a significant milestone, setting the stage for continued innovation and development. With .NET 9 already in preview, your feedback is crucial to shaping its evolution, ensuring that it meets the dynamic needs of modern software development <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a>.</p><h3>Expected Final Release Improvements</h3><p>The final release of .NET 9 is anticipated to bring even more refinements. You can expect performance optimizations, advanced features, and critical bug fixes, further solidifying .NET as a robust framework for developing modern applications. These improvements are designed to streamline your development process and enhance the capabilities of your applications <a href="https://dev.to/bytehide/exploring-net-9-preview-4-all-you-need-to-know-3mop"><sup>[5]</sup></a>.</p><p>.NET Aspire, a key component of the .NET ecosystem, continues to evolve. Preview 3 of .NET Aspire includes significant UI enhancements and expanded component support for Azure OpenAI, Kafka, Oracle, MySQL, CosmosDB, and Orleans. This integration demonstrates Microsoft's commitment to providing a comprehensive, cloud-ready stack that addresses the unique challenges of building distributed, scalable applications <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a><a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/overview"><sup>[8]</sup></a>.</p><p>As .NET continues to integrate with cutting-edge technologies, the focus remains on cloud-native and intelligent app development. The forthcoming updates are expected to bring substantial investments in performance, productivity, and security, ensuring that .NET remains at the forefront of technological advancements <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a>.</p><p>The collaboration with industry giants like Canonical and Red Hat is set to enhance the versatility of .NET, ensuring it performs optimally across different environments. This partnership underscores the platform's adaptability and its readiness to meet the diverse requirements of developers worldwide <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a>.</p><p>In summary, the future of .NET is geared towards making it even easier for developers to integrate artificial intelligence and manage cloud-native applications efficiently. With ongoing enhancements and community feedback, .NET is poised to continue its legacy as a powerful tool for building enterprise-level applications <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/"><sup>[2]</sup></a>.</p><h3>Conclusion</h3><p>Throughout this recap into the new features of .NET 9, we've delved into the myriads of features and enhancements that signify a leap towards more innovative, efficient, and robust application development. The introduction of advancements across various aspects, from the language enhancements in C# 13 (expect a full article here about C# 13 very soon) aimed at improving coding efficiency to .NET 9's focus on cloud-native applications, AI integration, and cross-platform development, highlights a strategic move towards meeting the challenges of modern digital ecosystems. These updates not only promise to elevate the developer experience but also pave the way for pioneering applications that can seamlessly adapt to the evolving demands of users and industries alike.</p><p>As the landscape of software development continues to evolve at an unprecedented pace, the enhancements introduced in .NET 9 serve as a beacon for developers navigating through the complexities of modern application development. By leveraging these advancements, developers are equipped with the tools they need to build more dynamic, secure, and scalable solutions. </p><p>To stay updated on the latest in .NET and C# and to further harness the power of these updates in your projects, consider <a href="https://www.f5build.com/subscribe">subscribing to our newsletter</a>. Embracing these changes will not only enhance the capabilities of your applications but also ensure they stand resilient in the face of future technological shifts, reaffirming the enduring legacy of .NET and C# in the realm of software development.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>References</h2><p>[1] - <a href="https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-13">https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-13</a><br>[2] - <a href="https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/">https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/</a><br>[3] - <a href="https://visualstudiomagazine.com/Articles/2024/02/26/net-9-preview-1.aspx">https://visualstudiomagazine.com/Articles/2024/02/26/net-9-preview-1.aspx</a><br>[4] - <a href="https://www.infoworld.com/article/3713024/cloud-and-ai-apps-take-center-stage-in-net-9.html">https://www.infoworld.com/article/3713024/cloud-and-ai-apps-take-center-stage-in-net-9.html</a><br>[5] - <a href="https://dev.to/bytehide/exploring-net-9-preview-4-all-you-need-to-know-3mop">https://dev.to/bytehide/exploring-net-9-preview-4-all-you-need-to-know-3mop</a><br>[6] - <a href="https://learn.microsoft.com/en-us/dotnet/maui/whats-new/dotnet-9?view=net-maui-8.0">https://learn.microsoft.com/en-us/dotnet/maui/whats-new/dotnet-9?view=net-maui-8.0</a><br>[7] - <a href="https://visualstudiomagazine.com/Articles/2024/05/28/net-9-preview-4.aspx">https://visualstudiomagazine.com/Articles/2024/05/28/net-9-preview-4.aspx</a><br>[8] - <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/overview">https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/overview</a><br>[9] - <a href="https://visualstudiomagazine.com/Articles/2024/06/20/net-9-preview-5.aspx">https://visualstudiomagazine.com/Articles/2024/06/20/net-9-preview-5.aspx</a><br>[10] - <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/libraries">https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/libraries</a><br>[11] - <a href="https://medium.com/c-sharp-progarmming/asp-net-core-9-0-authentication-and-authorization-enhancements-4a8e248baf61">https://medium.com/c-sharp-progarmming/asp-net-core-9-0-authentication-and-authorization-enhancements-4a8e248baf61</a><br>[12] - <a href="https://dotnetcopilot.com/net-9-preview-new-features-and-updates/">https://dotnetcopilot.com/net-9-preview-new-features-and-updates/</a><br>[13] - <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/runtime">https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/runtime</a></p>]]></content:encoded></item><item><title><![CDATA[Essential C# 12 Features: My Top Picks for Everyday Developers]]></title><description><![CDATA[A Practical Guide to C# 12's Best Additions]]></description><link>https://www.f5run.com/p/essential-c-12-features-my-top-picks</link><guid isPermaLink="false">https://www.f5run.com/p/essential-c-12-features-my-top-picks</guid><dc:creator><![CDATA[Samuel Otero]]></dc:creator><pubDate>Tue, 25 Jun 2024 02:05:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!EH3G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EH3G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EH3G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EH3G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EH3G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EH3G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EH3G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:312665,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EH3G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EH3G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EH3G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EH3G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F116daf55-ca8b-496d-902c-a52f7a372fbb_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With software development practices evolving so fast, and a couple of AI tools making their case to be considered as direct competition for us, the real engineers, staying updated with latest advancements is not just an option; it's a necessity. With the release of the latest C# version, developers worldwide are keen to dive into the wealth of new features that promise enhanced performance, increased code readability, and, ultimately, more maintainable applications. The enhancements in C# 12 bring forward compelling improvements around casts, safety, type checks, and garbage collection, all designed to streamline development workflows and bolster application efficiency. For everyday developers, understanding and harnessing these improvements is crucial for staying competitive and delivering high-quality software.</p><p>Hopefully this article serves as your guide to the essential features of C# 12, showing how they can be leveraged to refine your codebase and development practices with a couple of examples. We'll talk about how primary constructors (definitely my favorite new C# feature) simplifies class definitions, collection expressions that enhance readability and maintainability, and optional parameters in lambda expressions that offer greater flexibility in functional programming. Additionally, we delve into <em>alias any type</em> for more concise code, inline arrays for optimized memory allocation, experimental attributes for advancing codebase safety and performance, and the latest in C# news including interceptors for efficient method invocation. Each section includes practical code examples, allowing you to grasp quickly how these new features can be integrated into your projects for immediate benefits.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>Primary Constructors</h3><h4>Overview</h4><p>Primary constructors in C# 12 streamline the class and struct definition process by allowing you to declare constructors directly within the class or struct declaration. This feature reduces the need for redundant code and simplifies the overall structure of your codebase. By integrating constructor parameters at the place of declaration, primary constructors offer a concise way to initialize class properties.</p><h4>Benefits for Everyday Use</h4><p>One of the significant advantages of using primary constructors is their ability to simplify the syntax required to initialize properties. This not only reduces code duplication but also enhances code readability and maintainability. For instance, in a typical dependency injection scenario, using primary constructors can significantly decrease the amount of boilerplate code required by automatically assigning constructor parameters to private fields.</p><p>To illustrate, consider the refactoring of a <code>Worker</code> class where the primary constructor simplifies the handling of injected dependencies. Previously, a separate field declaration for each dependency was necessary. With primary constructors, these can be directly included in the class declaration, making the <code>logger</code> instance readily available throughout the class without additional field declarations <a href="https://devblogs.microsoft.com/dotnet/csharp-primary-constructors-refactoring/"><sup>[3]</sup></a>.</p><pre><code>namespace Example.Worker.Service
{
    public class Worker(ILogger logger) : BackgroundService
    {
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                if (logger.IsEnabled(LogLevel.Information))
                {
                    logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                }
                await Task.Delay(1000, stoppingToken);
            }
        }
    }
}</code></pre><p>In summary, primary constructors not only facilitate a cleaner and more intuitive coding approach but also enhance the robustness and maintainability of your applications. By adopting primary constructors, you can reduce complexity and improve the overall quality of your C# projects.</p><h3>Collection Expressions</h3><h4>Overview</h4><p>Collection expressions in C# 12 introduce a streamlined syntax for initializing collections, enhancing both readability and maintainability. By using the new terse syntax <code>[e1, e2, e3, etc]</code>, you can quickly define arrays, lists, or spans without extensive boilerplate. These expressions support a variety of types directly without needing external Base Class Library (BCL) support, including <code>int[]</code>, <code>System.Span</code>, and <code>List</code> <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions"><sup>[4]</sup></a><a href="https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-12"><sup>[5]</sup></a><a href="https://medium.com/@nirajranasinghe/everything-you-need-to-know-about-c-12-collection-expressions-78b4897a676f"><sup>[6]</sup></a><a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions"><sup>[4]</sup></a>. Additionally, the spread element <code>..e</code> allows for the inclusion of elements from one collection into another, making it easier to combine or manipulate data <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions"><sup>[4]</sup></a><a href="https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-12"><sup>[5]</sup></a><a href="https://medium.com/@nirajranasinghe/everything-you-need-to-know-about-c-12-collection-expressions-78b4897a676f"><sup>[6]</sup></a><a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions"><sup>[4]</sup></a>.</p><h4>Practical Applications</h4><p>In practical terms, collection expressions can significantly simplify the way you handle data aggregation in your projects. For example, consider you need to create a combined list of integers from several sources. With C# 12, you can utilize the spread operator to merge these efficiently:</p><pre><code>int[] firstBatch = [1, 2, 3];
int[] secondBatch = [4, 5, 6];
int[] combined = [..firstBatch, ..secondBatch];</code></pre><p>This not only reduces the lines of code but also improves the clarity of your operations. The compiler optimizes these expressions by determining the known length of collections when possible, which can enhance performance by reducing the need for additional memory allocations <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions"><sup>[4][4]</sup></a>.</p><p>Furthermore, the introduction of the <code>[CollectionBuilder(...)]</code> attribute provides a way to customize how collections are constructed, giving you control over the instantiation process of your collections. This can be particularly useful when working with custom collection types or when performance optimizations are necessary <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions"><sup>[4][4]</sup></a>.</p><p>By integrating these new features into your daily coding practices, you can achieve more with less code, enhancing both the performance and readability of your applications.</p><h3>Optional Parameters in Lambda Expressions</h3><h4>Overview</h4><p>Optional parameters in lambda expressions, introduced in C# 12, mark a significant advancement in the language, offering developers increased flexibility and conciseness. This feature allows you to define lambda expressions with default values for parameters, simplifying method calls and reducing the need for overloads. For instance, you can now define a lambda expression like <code>(int x, int y = 10) =&gt; x + y</code>, where <code>y</code> defaults to 10 if not specified <a href="https://www.linkedin.com/pulse/net-8-c12-default-parameters-lambda-functions-sachin-kumar-sharma-9y7zc"><sup>[7]</sup></a>.</p><h4>Practical Applications</h4><p>The real power of optional parameters in lambda expressions is evident in their practical applications, which streamline coding tasks and enhance code readability. Consider a scenario where you're implementing a logging function that optionally takes a severity level. Previously, you might have needed multiple method overloads or conditional logic to handle different severity levels. With C# 12, you can simplify this with a single lambda expression:</p><pre><code>Action&lt;string, int&gt; log = (message, severity = 1) =&gt; {
    if (severity &gt; 1)
        Console.WriteLine($"ERROR: {message}");
    else
        Console.WriteLine($"Info: {message}");
};
log("System rebooted");  // Uses default severity
log("System failed", 2);  // Specifies severity explicitly</code></pre><p>This approach not only reduces the lines of code but also makes the function calls clearer and more intuitive. You can see at a glance what the default behavior is and how to override it if necessary <a href="https://www.linkedin.com/pulse/net-8-c12-default-parameters-lambda-functions-sachin-kumar-sharma-9y7zc"><sup>[7]</sup></a>.</p><p>By embracing optional parameters in lambda expressions, you can write more versatile and maintainable code, allowing for cleaner implementations across various use cases.</p><h3>Alias Any Type</h3><h4>Overview</h4><p>The "Alias Any Type" feature in C# 12 marks a significant enhancement, allowing developers to create semantic aliases for virtually any type, including tuples, arrays, pointers, and even more complex types. This capability not only simplifies the code but also enhances its readability and maintainability. By utilizing the <code>using</code> directive, you can define aliases that streamline your codebase, making it cleaner and more legible for your team <a href="https://dev.to/michaeljolley/alias-any-type-with-c-12-l1f"><sup>[8]</sup></a><a href="https://www.c-sharpcorner.com/article/alias-any-type-in-c-sharp-12/"><sup>[9]</sup></a><a href="https://devblogs.microsoft.com/dotnet/refactor-your-code-using-alias-any-type/"><sup>[10]</sup></a>.</p><h4>Practical Applications</h4><p>Consider the practical scenario where you frequently use complex types like tuples or pointers in your project. With C# 12, you can simplify these references using aliases. For example, you can alias a tuple representing a point in a coordinate system as follows:</p><pre><code>using Point = (int x, int y);</code></pre><p>This alias, <code>Point</code>, can then be used throughout your codebase, replacing the more verbose tuple notation and making the code cleaner and easier to understand. Similarly, for array types that are used repeatedly, you can define an alias like:</p><pre><code>using Matrix = int[,];</code></pre><p>These aliases help reduce the cognitive load on developers by replacing complex type notations with simpler, more meaningful names. Moreover, they aid in avoiding naming conflicts and disambiguating types which might otherwise lead to errors or confusion in large codebases <a href="https://www.c-sharpcorner.com/article/alias-any-type-in-c-sharp-12/"><sup>[9]</sup></a><a href="https://devblogs.microsoft.com/dotnet/refactor-your-code-using-alias-any-type/"><sup>[10]</sup></a><a href="https://dev.to/michaeljolley/alias-any-type-with-c-12-l1f"><sup>[8]</sup></a><a href="https://dev.to/moh_moh701/title-simplifying-code-with-type-aliases-in-net-8-and-c-12-g08"><sup>[11]</sup></a>.</p><p>By integrating the "Alias Any Type" feature into your daily coding practices, you enhance not only the clarity but also the efficiency of your development process, allowing for quicker understanding and modifications of the code by any member of your team.</p><h3>Inline Arrays</h3><h4>Overview</h4><p>Inline arrays in C# 12 represent a significant leap in struct-based array handling, offering developers the ability to incorporate fixed-size arrays directly within structs. This feature not only enhances performance by eliminating heap allocations&#8212;favoring stack-based memory instead&#8212;but also simplifies memory management and boosts type safety through compile-time checks <a href="https://www.c-sharpcorner.com/article/what-is-inline-arrays-in-c-sharp-12/"><sup>[12]</sup></a><a href="https://medium.com/c-sharp-progarmming/inline-arrays-in-c-12-7bdde386f531"><sup>[13]</sup></a><a href="https://developers.redhat.com/articles/2024/04/30/some-more-c-12"><sup>[14]</sup></a>.</p><h4>Practical Applications</h4><p>Imagine a scenario where you're implementing a data structure, such as a geometric point system or a simple stack. Inline arrays can drastically optimize these implementations. For instance, a <code>Point</code> struct might include inline arrays to store coordinates, allowing for direct access and manipulation of these values, which streamlines operations like distance calculations between points <a href="https://www.c-sharpcorner.com/article/what-is-inline-arrays-in-c-sharp-12/"><sup>[12]</sup></a>.</p><p>Here's a practical code example demonstrating the use of inline arrays in a <code>Point</code> struct:</p><pre><code>public struct Point
{
    [System.Runtime.CompilerServices.InlineArray(2)]
    private int[] coordinates;

    public Point(int x, int y)
    {
        coordinates = new int[2] { x, y };
    }

    public double CalculateDistance(Point other)
    {
        return Math.Sqrt(Math.Pow(coordinates[0] - other.coordinates[0], 2) +
                         Math.Pow(coordinates[1] - other.coordinates[1], 2));
    }
}</code></pre><p>Moreover, consider a stack implementation using inline arrays. This setup enhances push-and-pop operations with remarkable speed and minimal memory overhead, proving invaluable in performance-critical applications <a href="https://www.c-sharpcorner.com/article/what-is-inline-arrays-in-c-sharp-12/"><sup>[12]</sup></a>.</p><pre><code>public struct Stack
{
    [System.Runtime.CompilerServices.InlineArray(10)]
    private int[] items;
    private int currentIndex;

    public void Push(int item)
    {
        if (currentIndex &gt;= items.Length) throw new InvalidOperationException("Stack overflow");
        items[currentIndex++] = item;
    }

    public int Pop()
    {
        if (currentIndex == 0) throw new InvalidOperationException("Stack underflow");
        return items[--currentIndex];
    }
}</code></pre><p>These examples illustrate how inline arrays facilitate more efficient and readable code, aligning perfectly with modern C# development practices focused on performance and safety.</p><h3>Experimental Attributes</h3><h4>Overview</h4><p>The <code>ExperimentalAttribute</code> in C# 12 is a significant addition for developers looking to mark certain features as experimental within their codebases. This attribute, part of the <code>System.Diagnostics.CodeAnalysis</code> namespace, enables you to flag types, methods, or entire assemblies as experimental. When a feature is marked as such, the C# compiler generates warnings, alerting users about the experimental status of the elements they are accessing <a href="https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-12"><sup>[5]</sup></a><a href="https://henriquesd.medium.com/net-8-and-c-12-experimental-attribute-c895d66bba4e"><sup>[16]</sup></a><a href="https://www.step2gen.com/blogs/mastering-c-sharp-12-through-exploring-exciting-enhancements"><sup>[17]</sup></a><a href="https://henriquesd.medium.com/net-8-and-c-12-experimental-attribute-c895d66bba4e"><sup>[16]</sup></a><a href="https://www.c-sharpcorner.com/article/the-experimental-attribute-in-net-8-and-c-sharp-12/"><sup>[18]</sup></a><a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/experimental-attribute"><sup>[19]</sup></a>. This mechanism is crucial for managing features that are in a testing phase or not yet fully endorsed for production use.</p><h4>Usage Examples</h4><p>To utilize the <code>ExperimentalAttribute</code>, you might begin by marking a method or class in your C# project. For instance, consider a scenario where you have developed a new algorithm that is still under evaluation. You can mark this method using the <code>ExperimentalAttribute</code> to indicate its tentative nature:</p><pre><code>using System.Diagnostics.CodeAnalysis;

namespace ExperimentalFeatures
{
    [Experimental("Test001", "https://example.org/{0}")]
    public class NewAlgorithm
    {
        public void ExperimentalMethod()
        {
            // Method implementation
        }
    }
}</code></pre><p>In this example, attempting to use <code>NewAlgorithm</code> or its methods will prompt the compiler to issue a warning, which can be suppressed if needed using specific compiler options or pragmas like <code>#pragma warning disable Test001</code> <a href="https://henriquesd.medium.com/net-8-and-c-12-experimental-attribute-c895d66bba4e"><sup>[16]</sup></a><a href="https://www.step2gen.com/blogs/mastering-c-sharp-12-through-exploring-exciting-enhancements"><sup>[17]</sup></a><a href="https://henriquesd.medium.com/net-8-and-c-12-experimental-attribute-c895d66bba4e"><sup>[16]</sup></a><a href="https://www.c-sharpcorner.com/article/the-experimental-attribute-in-net-8-and-c-sharp-12/"><sup>[18]</sup></a><a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/experimental-attribute"><sup>[19]</sup></a>. This approach helps in safely integrating and testing new features without fully committing them to the main codebase, providing a buffer against potential issues arising from their use.</p><p>By marking features as experimental, you ensure that other developers are aware of the risks associated with using these features, fostering a cautious approach to their integration. This attribute is particularly useful for libraries or APIs in development, where new functionalities can be iterated upon and improved based on user feedback and testing outcomes.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>Conclusion</h3><p>Through the exploration of C# 12's features such as primary constructors, collection expressions, optional parameters in lambda expressions, aliasing any type, inline arrays, and the experimental attributes, it is evident that these advancements significantly elevate the efficiency, readability, and maintainability of code for developers. The incorporation of practical code examples for each feature not only clarifies their application but also embodies the essence of our brand voice by providing tangible, real-world solutions to complex programming scenarios. The versatility and depth of C# 12 showcased in this article affirm its role in enhancing software development, offering developers powerful tools to streamline their coding practices and build robust, efficient applications.</p><p>As we conclude, it's clear that staying updated with the latest features in C# is crucial for developers who aim to maintain competitive edge and efficient workflows. Embracing these enhancements will undoubtedly lead to more refined and performant applications, reflecting the evolving landscape of software development. For those keen on keeping up with the dynamic world of coding and furthering their understanding of C# and its capabilities, <a href="https://www.f5build.com/subscribe">subscribing to this newsletter</a> provides the perfect opportunity to stay informed and ahead of the curve. The journey through C# 12's features is just a glimpse of the continuous evolution in the field of software development, and there's so much more to learn and explore.</p>]]></content:encoded></item><item><title><![CDATA[Averting the Insidious Threat of Collaboration Overload]]></title><description><![CDATA[Mastering the Balance of Efficient and Effective Team Interactions]]></description><link>https://www.f5run.com/p/averting-the-insidious-threat-of</link><guid isPermaLink="false">https://www.f5run.com/p/averting-the-insidious-threat-of</guid><dc:creator><![CDATA[Samuel Otero]]></dc:creator><pubDate>Fri, 14 Jun 2024 19:11:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kzfp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kzfp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kzfp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kzfp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kzfp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kzfp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kzfp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89285998-a88c-4551-8888-393a37584213_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165951,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kzfp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kzfp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kzfp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kzfp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89285998-a88c-4551-8888-393a37584213_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>The Paradox of Excessive Collaboration</h3><p>In today's fast-paced, team-oriented work environments, excessive collaboration can seem like an oxymoron. After all, aren't we supposed to prioritize seamless coordination and open communication? Ironically, an overabundance of these very practices can lead to a pernicious phenomenon known as collaboration overload.</p><p>Imagine a scenario where every task, no matter how minor, necessitates a barrage of meetings, endless email threads, and a labyrinth of approvals. Suddenly, the very act of collaborating becomes a drain on productivity, leaving team members feeling overwhelmed, stressed, and on the brink of burnout.</p><p>The harsh truth is that collaboration overload can be just as detrimental to team performance as a lack of collaboration. It's a delicate balance, and striking the right chord is crucial for maintaining a harmonious and efficient workplace.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Identifying the Root Causes</h3><p>To combat collaboration overload, we must first understand its underlying causes. Often, these stem from structural complexities within an organization, outmoded workflows, and a proliferation of micro-teams.</p><h3>Structural Complexities</h3><p>As organizations grow, their hierarchical structures can become convoluted, with communication channels crisscrossing in a tangled web. Redundant processes and competing priorities can further exacerbate the issue, leading to duplication of effort and a general sense of disorganization.</p><h3>Outdated Workflows</h3><p>In today&#8217;s digital world, new technologies and platforms are continuously introduced, promising to streamline operations. However, if these tools are not properly integrated into existing workflows, they can inadvertently introduce additional layers of complexity, generating more work and stress for team members.</p><h3>Micro-Team Mania</h3><p>While micro-teams can be an effective way to tackle specific projects, an overreliance on this approach can breed collaboration overload. Each micro-team requires its own set of communication channels, meetings, and coordination efforts, compounding the overall collaborative burden.</p><h3>Fostering a Sense of Purpose</h3><p>Amidst the chaos of collaboration overload, it's easy for team members to lose sight of their purpose. However, research suggests that a strong sense of purpose can be a powerful antidote to burnout and disengagement.</p><p>While many organizations focus on rallying employees around a collective corporate mission, purpose can also be fostered through positive, everyday interactions with colleagues. By creating an environment where ideas are built upon, and team members feel a sense of camaraderie, a shared purpose emerges organically.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/p/averting-the-insidious-threat-of?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thank you for reading F5Build by Samuel Otero. This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/p/averting-the-insidious-threat-of?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.f5run.com/p/averting-the-insidious-threat-of?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><h2>Streamlining Collaboration: A Step-by-Step Approach</h2><p>Overcoming collaboration overload requires a multi-pronged approach that addresses the root causes while fostering a culture of purposeful collaboration.</p><h4>Step 1: Simplify Structural Complexities</h4><p>Conduct a thorough audit of your team's hierarchical structure, communication habits, and competing priorities. Identify areas of redundancy or inefficiency and implement streamlined processes to eliminate unnecessary complexities.</p><h4>Step 2: Revamp Outdated Workflows</h4><p>Engage your team in a collaborative exercise to assess the impact of new technologies and platforms on their workflows. Together, agree on a set of simpler, team-wide collaborative norms that leverage the power of these tools without introducing unnecessary burdens.</p><h4>Step 3: Manage Micro-Team Proliferation</h4><p>While micro-teams can be beneficial, it's essential to maintain a judicious balance. Establish clear guidelines for when and how micro-teams should be formed, and actively monitor their impact on overall collaborative efforts.</p><h4>Step 4: Cultivate a Culture of Purpose</h4><p>Foster an environment where team members feel empowered to contribute their ideas and build upon one another's insights. Encourage open dialogue, celebrate successes together, and remind everyone of the broader impact their work has on the organization and beyond.</p><h4>Step 5: Lead by Example</h4><p>As a leader, it's crucial to model the behaviors you wish to see in your team. Streamline your own collaborative processes, prioritize purposeful interactions, and actively work to reduce the micro-stresses that can contribute to collaboration overload.</p><h2>The Rewards of Purposeful Collaboration</h2><p>By implementing these strategies, you'll not only mitigate the risks of collaboration overload, but also unlock the true potential of purposeful collaboration. Your team will experience increased productivity, enhanced job satisfaction, and a renewed sense of purpose, all while fostering a culture of innovation and growth.</p><p>Remember, collaboration is a powerful tool, but like any tool, it must be wielded with care and precision. Embrace the art of purposeful collaboration and watch as your team soars to new heights of success.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Empower Your Development with These .NET 8 Features]]></title><description><![CDATA[Could .NET 8 Be the Fresh Start You've Been Looking For?]]></description><link>https://www.f5run.com/p/empower-your-development-with-these</link><guid isPermaLink="false">https://www.f5run.com/p/empower-your-development-with-these</guid><dc:creator><![CDATA[Samuel Otero]]></dc:creator><pubDate>Mon, 03 Jun 2024 05:38:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XYgh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XYgh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XYgh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XYgh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XYgh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XYgh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XYgh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99490,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XYgh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XYgh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XYgh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XYgh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b99206-17c0-40fe-bab7-e57df5328dc6_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Staying abreast of the latest technology advancements is key to enhancing your skills and building more efficient applications. This one took me a little while, just because the advances of .NET, Azure and the whole Microsoft ecosystem (.NET is &#8220;open source&#8221; nowadays, I know) just goes way too fast! However, the roll-out of .NET 8 definitely marked a significant milestone in this journey, offering an array of features designed to streamline development processes and empower developers like you. With its focus on improving performance, security, and productivity, dotnet continues to be at the forefront of building robust, scalable applications. Whether you're developing complex cloud-native applications, integrating Artificial Intelligence (AI) into your projects, or ensuring your apps are secured with the latest authentication and authorization techniques, .NET 8 is engineered to meet these challenges head-on.</p><p>As I delve into my favorite enhancements of the newest .NET version, including revolutionary tools for developers, the introduction of .NET Aspire to empower cloud-native applications, and cutting-edge AI and Machine Learning capabilities, this article aims to provide you with a comprehensive overview. You'll discover how .NET 8 leverages new features in C# 12, Blazor for building interactive web UIs, and advanced Entity Framework Core functionalities for managing databases with ease. Moreover, embracing containers, cryptography, and modern authorization practices in your .NET projects become more accessible, ensuring your applications not only perform well but also adhere to the highest security standards.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.f5run.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Unveiling the Core Enhancements in .NET 8</h2><h4>Performance Boosts: Understanding Dynamic Profile-Guided Optimization (PGO)</h4><p>Dynamic Profile-Guided Optimization (PGO) in .NET 8 marks a significant evolution, now enabled by default to enhance application performance. Initially introduced in .NET 6 and improved upon in .NET 7, PGO dynamically optimizes code during runtime by re-jitting frequently executed paths, thus enhancing the speed and efficiency of applications. The impact is notable, with some applications experiencing a 15% average performance improvement, making .NET 8 an essential upgrade for developers aiming for high-performance software.</p><h4>Language Innovations: Exploring C# 12</h4><p>C# 12, shipped with the .NET 8 SDK, introduces several language enhancements that streamline developer tasks and optimize performance. New features such as primary constructors, collection expressions, and inline arrays facilitate more concise and readable code. Additionally, the introduction of optional parameters in lambda expressions and <code>ref readonly</code> parameters enhances method signatures, offering more flexibility and control over data manipulation.</p><h4>Security Strengthening: Enhancements and New Features</h4><p>.NET 8 introduces robust security enhancements to better protect applications. Improvements in authentication and authorization processes ensure that applications are secure by default. The framework now includes enhanced features for managing cryptographic needs and securing data transactions, thereby fortifying the security posture of applications developed with .NET 8. These advancements not only secure the application but also streamline the development process by integrating security as a core aspect of the framework.</p><p>Each of these core enhancements in .NET 8, be it through performance optimization, language innovation, or security strengthening&#8212;aims to provide developers with the tools necessary to build more efficient, secure, and robust applications.</p><h2>Revolutionary Tools for Developers</h2><h4>Ahead-of-Time (AOT) Compilation: Faster Startups, Reduced Memory Footprint</h4><p>Publishing your app as Native AOT in .NET 8 produces a self-contained application that's been compiled ahead-of-time to native code. This method, particularly beneficial for cloud infrastructure and hyper-scale services, results in faster startup times and smaller memory footprints. Native AOT apps can operate on machines without the .NET runtime installed, and they don't rely on a JIT compiler at runtime, enhancing performance and compatibility in restricted environments.</p><h4>Blazor Updates: Unified Client and Server UI Development</h4><p>.NET 8 introduces significant enhancements to Blazor, allowing for a more unified approach in client and server UI development. New project templates in Blazor can now multitarget over <code>net8.0</code> and <code>net8.0-browser</code>, accommodating various hosting models like Server, WebAssembly, and server-side rendering (SSR) in a single project. This flexibility ensures that developers can optimize UI delivery while maintaining a streamlined project structure.</p><h4>.NET MAUI: A Leap Forward in Cross-Platform Development</h4><p>.NET Multi-platform App UI (.NET MAUI) represents a major advancement, enabling developers to create native mobile and desktop apps from a single codebase across Android, iOS, macOS, and Windows. With .NET MAUI, you benefit from a unified project experience and cross-platform APIs, which streamline the development process. Enhancements like .NET and XAML hot reload further boost productivity by allowing real-time updates without recompilation, making it easier to build and iterate on cross-platform applications efficiently.</p><p>These tools not only enhance the capabilities and efficiency of developers working with .NET 8 but also ensure applications are more robust, secure, and user-friendly.</p><h2>Empowering Cloud-Native Applications with .NET Aspire</h2><h4>Cloud-Native Development Made Easy</h4><p>.NET Aspire simplifies the creation of resilient, observable, and configurable cloud-native applications. It offers an opinionated stack that includes essential components for service discovery, telemetry, resilience, and health checks right out of the box. With .NET Aspire, you can easily manage and configure dependencies for your cloud-native apps from day one, enhancing both new and existing .NET projects.</p><h4>Leveraging Observability, Resilience, and Configuration for Distributed Applications</h4><p>.NET Aspire enhances your ability to build distributed applications by integrating observability and resilience into the development process. The <code>ServiceDefaults</code> project centralizes common service-centric logic, such as telemetry and health check endpoints, ensuring your applications are robust and easily monitored. Additionally, .NET Aspire's orchestration capabilities streamline the setup of service discovery and environment variables, reducing the complexity typically associated with managing distributed applications.</p><h2>AI and Machine Learning with .NET 8</h2><h4>Infusing .NET Applications with AI</h4><p>The integration of AI into .NET applications is transforming how developers approach problem-solving and functionality enhancements. With the release of new quickstarts, you can now seamlessly incorporate large language models like OpenAI's GPT into your applications. These guides provide step-by-step instructions on utilizing the Azure OpenAI SDK to implement features such as text summarization, building chat applications, or creating dynamic interactions based on your data.</p><h4>Integrating Large Language Models and Generative AI</h4><p>Harness the capabilities of Generative AI to elevate your .NET applications. The support for Azure AI and OpenAI services within the .NET ecosystem allows for the easy integration of sophisticated AI models that power advanced features like Microsoft Copilot and Bing Chat. Start with the provided video series to grasp the basics of AI and proceed to more complex integrations using ML.NET or Azure Machine Learning. Whether it's enhancing user interaction with prompt engineering or deploying custom machine learning models, the path from novice to AI integration in .NET is well-supported and straightforward.</p><p>For practical implementation, consider this C# snippet to integrate ChatGPT in a .NET application:</p><pre><code>// Initialize the OpenAI client
var client = new OpenAIClient(apiKey: "your-api-key");

// Create a chat session
var session = await client.Chat.CreateSessionAsync(model: "gpt-3.5");

// Send a message and receive the AI-generated response
var response = await session.SendMessageAsync("Hello, how can I help you today?");
Console.WriteLine(response.Message.Content);</code></pre><p>This example demonstrates how effortlessly .NET developers can integrate powerful AI functionalities into their applications, enhancing both the user experience and the app's capabilities.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/p/empower-your-development-with-these?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thank you for reading F5Build by Samuel Otero. This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/p/empower-your-development-with-these?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.f5run.com/p/empower-your-development-with-these?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><h2>Conclusion</h2><p>Throughout this exploration of .NET 8, we've delved into its array of groundbreaking features designed to streamline development, bolster security, and enhance performance. From the introduction of Dynamic PGO, which dynamically re-jits code to improve application performance, to leveraging the power of AI with Azure's OpenAI SDK, the enhancements .NET 8 brings to the table are indispensable for developing robust, scalable applications. The updated Blazor framework and .NET MAUI further underscore .NET's commitment to providing developers with innovative tools for building interactive web UIs and cross-platform applications, standing testament to the framework's evolution in accommodating modern development needs systematically.</p><p>Reflecting on the integration possibilities of AI and machine learning capabilities within .NET applications, it's clear that the inclusion of practical examples like the C# snippet to utilize ChatGPT underscores the tangible benefits of .NET 8's features. These examples not only guide but also inspire developers to harness these advancements in their projects. As the landscape of software development continues to shift, embracing these enhancements is key to staying ahead. Stay in the loop with these lightning-fast advancements and more by <a href="https://www.f5build.com/subscribe?utm_source=subscribe-widget-preamble&amp;utm_campaign=email-checkout&amp;next=https%3A%2F%2Fwww.f5build.com%2Fpublish%2Fpost%2F145244496&amp;utm_medium=email&amp;utm_content=145244496">subscribing to this newsletter</a>. Learning .NET 8 is not just about keeping pace with technology&#8212;it's about setting the stage for future innovations.</p><h2>FAQs</h2><p><strong>What new features does .NET 8 introduce?</strong><br>.NET 8, released on November 14, 2023, introduces a variety of new features including full-stack Blazor, .NET MAUI, artificial intelligence enhancements, simplified code syntax, leaner container images, and several other improvements. This version is a culmination of the best aspects of .NET Core.</p><p><strong>What are the advantages of using .NET 8?</strong><br>.NET 8 brings significant enhancements in performance, garbage collection, core and extension libraries. It introduces a new globalization mode specifically designed for mobile applications and new source generators for COM interop and configuration binding, all aimed at boosting application efficiency and functionality.</p><p><strong>Should I consider upgrading to .NET 8?</strong><br>Upgrading to .NET 8 is highly recommended for businesses. The improvements in performance and efficiency not only ensure faster and more reliable applications but also lead to a better user experience and reduced operational costs.</p><p><strong>How has Blazor improved in .NET 8?</strong><br>.NET 8 introduces several key enhancements to the Blazor framework that transform its ecosystem. These include enhanced navigation and form handling, options to choose your render mode at runtime, streaming rendering to preserve DOM, a new feature called QuickGrid, improved authentication mechanisms, Razor Component Result, and the introduction of Jiterpreter for Blazor WebAssembly.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading F5Build by Samuel Otero! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Five Habits Developers Embrace Just to Waste Everyone's Time]]></title><description><![CDATA[Daily habits that we developers embrace too often for a sense of brilliance instead of productivity]]></description><link>https://www.f5run.com/p/five-habits-developers-embrace-just</link><guid isPermaLink="false">https://www.f5run.com/p/five-habits-developers-embrace-just</guid><dc:creator><![CDATA[Samuel Otero]]></dc:creator><pubDate>Sun, 14 Jan 2024 21:45:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-kCl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-kCl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-kCl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!-kCl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!-kCl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!-kCl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-kCl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:177911,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-kCl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!-kCl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!-kCl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!-kCl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d83b84-4da0-4000-ba82-dd3b5513f211_1280x720.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Podcast Alert!</p><p>Whether or not you're familiar with the motto of my newsletter, it goes like this: "Crafting Efficient Solutions, Without Adding Complexity Just to Look Smart." </p><p>Indeed! Engineers often spend a significant amount of time on daily routines, driven by the need of self-validation. Software Engineers, much like you and me, not only complicate their projects to appear intelligent, but also introduce unnecessary complexity into their daily work routines FOR NO REASON. </p><p>You'll have a good laugh with this content, as I tend to get passionate about these topics. However, I'm confident you'll also find valuable insights that may just make you reconsider one or two of your daily approaches.</p><h4>Script: </h4><ol><li><p>Manually Typing Git Commands (For Everyday Tasks) </p></li><li><p>Preferring Plain JavaScript Instead of JavaScript Libraries </p></li><li><p>Manually Formatting Code </p></li><li><p>Writing Excessive Comments </p></li><li><p>Design Patterns Obsession</p></li></ol><div id="youtube2-Z6WBs7NiTl4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Z6WBs7NiTl4&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Z6WBs7NiTl4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Share this content with that engineer friend of yours who you believe desperately needs to see this, but first, enjoy it yourself! Feel free to comment and share your thoughts below!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe! So you may never miss content like this :)</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><br></p>]]></content:encoded></item><item><title><![CDATA[Preview: Five Daily Habits Developers Embrace for a Sense of Brilliance Instead of Productivity]]></title><description><![CDATA[Preview of my Upcoming Work: Exposing Counterproductive Habits in Software Development]]></description><link>https://www.f5run.com/p/preview-five-daily-habits-developers</link><guid isPermaLink="false">https://www.f5run.com/p/preview-five-daily-habits-developers</guid><dc:creator><![CDATA[Samuel Otero]]></dc:creator><pubDate>Fri, 05 Jan 2024 04:35:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eH4r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eH4r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eH4r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!eH4r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!eH4r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!eH4r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eH4r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:711705,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eH4r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!eH4r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!eH4r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!eH4r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1f8c4b-9b83-443b-91a2-099b1fd3a5b5_1280x720.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Greetings! I'm excited to share that I'm working on a video highlighting five daily routines that many software engineers tend to indulge in to boost their perceived intelligence. Do they do it knowingly? Are engineers conscious of the time they lose, especially when billing clients for these activities? </p><p>Next Sunday, subscribers will receive my first in-person video where I'll delve into this topic. While there's a chance I might lose a few friends (fingers crossed that I don't), the main objective of this upcoming letter is not to gain friends, but to shed light on these practices. This insight is derived from my 13-year journey of constant experience and exposition in the field of software development.</p><p>Keep an eye out for it!</p><h5><em>Samuel Otero</em></h5><h5><em>www.f5build.com </em></h5><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#8220;Crafting Efficient Solutions, Without Adding Complexity, Just to Look Smart&#8221;</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Unveiling the F5Build Journey: An Opinionated Take from a .NET Engineer]]></title><description><![CDATA[Crafting efficient solutions, without adding complexity just to look smart.]]></description><link>https://www.f5run.com/p/opinionated-take-from-pragmatic-engineer</link><guid isPermaLink="false">https://www.f5run.com/p/opinionated-take-from-pragmatic-engineer</guid><dc:creator><![CDATA[Samuel Otero]]></dc:creator><pubDate>Tue, 02 Jan 2024 09:45:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!M1UD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M1UD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M1UD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!M1UD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!M1UD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!M1UD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M1UD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:712569,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M1UD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!M1UD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!M1UD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!M1UD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbfbcad-31d3-4ed5-b43a-940a99af431f_1280x720.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After spending 13 years in software development, one thing stands out to me: the constant learning. As a software engineer, you pick up new things every day&#8212;sometimes because you need to finish a task, sometimes out of sheer curiosity. The tech world has changed a lot in the past decade, and how we develop software now is worlds apart from how we did it 10 years ago.</p><p>But here's the thing: no matter the language, platform, or tools we use, there's a word that often gets overlooked in our field. That word is "pragmatic." You might have heard of a book called "The Pragmatic Programmer," and there's a reason it's still relevant after 20 years. Engineers like the book, but it seems we forget to put the pragmatic concept it teaches into practice. Let's take a quick look at what "pragmatic" means.</p><p><strong>Pragmatic</strong>: Being pragmatic in software engineering means being practical and realistic. It suggests that the engineer prioritizes practical solutions over theoretical ones. Pragmatic engineers focus on what works in the given context rather than adhering strictly to theoretical ideals. </p><p>My consistent encounter with this situation is likely the primary foundation of our newsletter's motto: <em><strong>Crafting efficient solutions, without adding complexity just to look smart.</strong></em> Here&#8217;s a 2-minute video where I dissect this motto, allowing you to understand its essence!</p><div id="youtube2-WmuT518z33c" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;WmuT518z33c&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/WmuT518z33c?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p>In summary, this motto describes a software engineer who values practical and efficient approaches to software development, while avoiding unnecessary complexity, or the pursuit of just &#8220;looking good&#8221;. It reflects a commitment to delivering solutions that meet the real needs of the project without unnecessary embellishments.</p><p>Stay .NET!</p><p><em>Samuel Otero</em></p><p><em><strong>www.f5build.com</strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.f5run.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading my newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>