Educating about C# and F#
How to use REPL and Scripting in F#
Lately I’ve been looking into using F# in Jupyter Notebooks. I downloaded it and attempted to follow the tutorials...
Getting Started With BenchmarkDotNet
BenchmarkDotNet is a great library for performance testing on the dotnet platform. On this blog I’ve used it to be...
Getting Started with Elmish
I’ve been learning F# lately and have been wondering what the F# in the browser experience is like. There are seve...
Introduction to F# Type Providers
This post is one of many in the FSAdvent Calendar. A December’s worth of blog articles all about FSharp. Many than...
The Cost of Abstracting a List in C#
In software development, there’s a tradeoff between design and optimization. As a general rule of thumb, most abst...
The Difference Between IEnumerable and IQueryable Explained
This post is part of this year’s C# Advent Series. Which counts down to Christmas with two C# articles published e...
Functional Fundamentals: Currying
This is the second article on this blog discussing functional programming concepts. Here is a link to the first, Pure v....
Benchmarking For Loop Variants
I read Thomas Levesque’s recent post about Using foreach with an index. I’ve definitely run into the problem...
Explaining Implicit Conversion Operators in C#
Sometime ago at work, I discovered a class that could automatically convert to and from a string whenever it was needed....
Under the Hood of C# Alias Types and Namespaces
C# has two different ways to refer to a lot of its fundamental types. String or string, Boolean or bool, Int32 or int, c...
Explaining Async Programming With Pizza
Asynchronous programming. It means so many things to so many people. When first learning async programming, it’s e...
How to Create a .NET Core API CI Action Using Github Actions
Github Actions is a new tool from Github designed to automate workflows for github projects. There are numerous things t...
How to Write a Brainfuck Interpreter in C#
I’ve always been somewhat interested in how programming languages are written. Last month I bought my version is i...
.Net Core 3.0 AddControllers() Method
In case you haven’t heard, .Net Core 3.0 has now been released! So many things are now available as part of this r...
C# Design Patterns: The Visitor Pattern
My last article introduced expressions in C# and explained a bit why they were useful. Today I’m going to build up...
An Introduction to C# Expression Trees
Expression Trees are an interesting C# language feature that you might not have knowingly used before. Expression Trees ...
The Cost of Synchronous Async Methods
C# 5 introduced the async/await keywords and dramatically increased how easy it was to program asynchronously. The first...
Pure v. Impure Functions
Pure and Impure functions is a very important distinction in functional programming. Most of my university and early wor...