Sign in

Joseph Musser

@jnm2.bsky.social
78 followers 128 following 58 posts

Senior software engineer at Microsoft, C# language design member, former 7-year Microsoft MVP

PostsRepliesMedia
Joseph Musser @jnm2.bsky.social · 24/01/2026
The wait is almost over! I'm excited to be joining Microsoft Fabric as a senior software engineer. I'm grateful for this opportunity to tackle new challenges together with an amazing team, stretching the limits of .NET build technology! I'll also continue as a member of the C# language design team.
092
Joseph Musser @jnm2.bsky.social · 13/01/2026
If C# had a fullnameof operator, would it suit your needs if it worked as shown in this image? Would you let us know? github.com/dotnet/cshar...
A table showing various inputs and outputs of a proposed fullnameof operator:

fullnameof(System.Collections.Generic) 	"System.Collections.Generic"
fullnameof(List<>) 	"System.Collections.Generic.List<>"
fullnameof(global::System.Func<>) 	"System.Func<>"
fullnameof(someExtern::SomeType) 	"SomeType"
fullnameof(ImmutableArray<>.Builder) 	"System.Collections.ImmutableArray<>.Builder"
fullnameof(ImmutableArray<>.Builder.Capacity) 	"System.Collections.ImmutableArray<>.Builder.Capacity"
fullnameof(List<int>) 	❌ Not permitted
fullnameof(TSomeTypeParameterInScope) 	❌ Not permitted
fullnameof((int A, int B)) 	❌ Not permitted
fullnameof(int[]) 	❌ Not permitted
fullnameof(int*) 	❌ Not permitted
fullnameof(int?) 	❌ Not permitted
fullnameof(string?) 	❌ Not permitted
100
Joseph Musser @jnm2.bsky.social · 01/01/2026
Today was my last day at Technology Solutions Associates, after nearly thirteen years total and seven years as a partner. Signing out for the last time is quite a feeling. I'm grateful for the opportunities I had with them, and ready for the next adventure in 2026. Stay tuned!
050
Joseph Musser @jnm2.bsky.social · 28/11/2025
Ever wanted to write `((a, b)) =>` to deconstruct lambda parameters in C#? I've created a proposal and am co-championing the feature now. Discussion: github.com/dotnet/cshar... Proposal: github.com/dotnet/cshar...
0121
Joseph Musser @jnm2.bsky.social · 05/10/2025
I've added a 360° node viewer to my Myst IV Asset Explorer (github.com/jnm2/MystIVA...)! Rendering a skybox with SkiaSharp in Avalonia, from 3D projection first principles, was satisfying. Looking around at the final result with its layer transparency is surreal.
App screenshot showing 360° node viewer
010
Joseph Musser @jnm2.bsky.social · 17/09/2025
I made an app to browse and extract #Myst IV game assets, and play audio assets with gapless looping using #dotnet and #AvaloniaUI: github.com/jnm2/MystIVA... It hits a nostalgic spot to have original game music instead of the official soundtrack's remix; I grew up playing the Myst games.
App screenshot showing in-app browsing panes and audio player
030
Joseph Musser @jnm2.bsky.social · 17/09/2025
Registered for the 2026 #mvpsummit! Looking forward to flying out and seeing everyone!
020
Joseph Musser @jnm2.bsky.social · 22/05/2025
@patriksvensson.se I'm finally getting into Spectre.Console and it's spectactular, thank you! One thing that's giving me cold feet though is that there's no support for named arguments/required options. It seems to me that named arguments are just as important in CLI scripting as in C#.
110
Joseph Musser @jnm2.bsky.social · 09/05/2025
I'm losing the feeling of "what's happening is bad" that used to pop up for me when facing difficulties. Difficulties are the pathway to heart and soul and life and flow.
000
Joseph Musser @jnm2.bsky.social · 20/01/2025
Discussion for a proposal I'm working on: Target-typed static member lookup github.com/dotnet/cshar...
Summary

This feature enables a type name to be omitted from static member access when it is the same as the target type.

This reduces construction and consumption verbosity for factory methods, nested derived types, enum values, constants, singletons, and other static members. In doing so, the way is also paved for discriminated unions to benefit from the same concise construction and consumption syntaxes.

type.GetMethod("Name", .Public | .Instance | .DeclaredOnly); // BindingFlags.Public | ...

control.ForeColor = .Red;          // Color.Red
entity.InvoiceDate = .Today;       // DateTime.Today
ReadJsonDocument(.Parse(stream));  // JsonDocument.Parse

// Production (static members on Option<int>)
Option<int> option = condition ? .None : .Some(42);

// Production (nested derived types)
CustomResult result = condition ? new .Success(42) : new .Error("message");

// Consumption (nested derived types)
return result switch
{
    .Success(var val) => val,
    .Error => defaultVal,
};
050
Joseph Musser @jnm2.bsky.social · 14/12/2024
There should be a word for the feeling of wrapping up from being ten layers deep into something, specifically finishing a bunch of tasks in a row as you unwind your stack, which you had been holding in memory. There's something satisfying about hitting all of them on the way out.
020
Joseph Musser @jnm2.bsky.social · 13/12/2024
Have you ever run 'dotnet nuget why' and gotten a ridiculous or impossible amount of output to wade through? Would you be interested in a --depth parameter, or something similar? github.com/dotnet/sdk/i...
github.com
'dotnet nuget why' option to show unique parent packages: --depth 1 · Issue #45464 · dotnet/sdk
The problem happens when you reference a large set of deeply nested third-party packages that all have common dependencies. When you run dotnet nuget why Microsoft.CodeAnalysis.NetAnalyzers, and ge...
110
Joseph Musser @jnm2.bsky.social · 07/12/2024
This past year has been so different for me from all other years. I'm going to summarize the theme with a single quote: "There are three musts that hold us back: I must do well. You must treat me well. And the world must be easy." (Albert Ellis) Nothing is holding me back.
020
Joseph Musser @jnm2.bsky.social · 15/10/2024
In a way that will never make sense, the thing holding you back is the thing you believe you have to have.
000
Joseph Musser @jnm2.bsky.social · 11/10/2024
Proposing `typeof` string constants, e.g. allowing `typeof(C).FullName` as an attribute argument: github.com/dotnet/cshar... Would love feedback with real-world use cases, as well as real-world use cases for variants such as `fullnameof` that _aren't_ addressed by this proposal.
github.com
[Proposal]: `typeof` string constants · Issue #8505 · dotnet/csharplang
Proposal added Discussed in LDM Decision in LDM Finalized (done, rejected, inactive) Spec'ed Summary For certain kinds of types, typeof(...).FullName is considered a constant value. It is allowed a...
000
Joseph Musser @jnm2.bsky.social · 03/10/2024
C# proposal to allow nameof(List<>) will be considered soon! github.com/dotnet/cshar... Originally proposed by @jonskeet.bsky.social.
github.com
[Proposal]: Open generic types in `nameof` · Issue #8480 · dotnet/csharplang
Open generic types in nameof Proposed Prototype: - dotnet/roslyn#4902 and dotnet/roslyn#4907 by @CyrusNajmabadi - dotnet/roslyn#20450 by @alrz Implementation: dotnet/roslyn#75368 Specification: Not...
110
Joseph Musser @jnm2.bsky.social · 01/09/2024
open.spotify.com/album/40hWUh... by Jon Hopkins is incredibly powerful. I recommend setting aside an uninterrupted 41 minutes and lying down with headphones and an eye mask to listen.
open.spotify.com
RITUAL
Album · Jon Hopkins · 2024 · 8 songs
000