So You Want to Learn C#? (2026 Edition)
Patrick T Coakley 16 min read March 19, 2026 Software Development, C#, So You Want to Learn[ #c# #programming #beginner #books ]
After creating the original C++ version of this post and getting positive feedback from readers, I figured I could do some more, including C#. The format and structure of this series of posts will mostly be the same, and are meant as a general introduction for someone interested in C#. I will try to keep it updated as things change, possibly expanding coverage over time.
C# has come a long way from the days when it was just another Microsoft programming language made for Windows development, and while its identity might still be entwined with visions of enterprise software and business applications, the language and ecosystem has evolved significantly over the last decade with the introduction of .NET Core and the rise of cross-platform development. With the ability to target desktops, mobile, web, and anything in between, C# has become a versatile language that can be used for a wide range of applications.
Why Learn C#?
With the number of programming languages available today, C# is often overlooked for a few reasons, including misnomers about performance and platform support; it is often considered "Microsoft's Java." However, the reality is that it has become a very powerful language with a number of modern features that make it a great choice in places you might even expect.
For game development, the Unity game engine uses C# as its primary scripting language, and the Godot game engine supports C# right alongside its own GDScript. There's also MonoGame and FNA, both of which are spiritual successors to the original XNA framework.
In addition to being able to create robust back-end services using ASP.NET, C# can also be used for front-end web development with Blazor, which allows you to write client-side code in C# instead of JavaScript, letting you write full-stack C# web applications. You can even use Blazor Hybrid to create cross-platform applications similarly to Electron, but with C# instead of JavaScript.
.NET has also become a great desktop and mobile development platform as well. With strong support for native Windows applications using WPF, WinForms, and WinUI, Windows-native development is first-class with C#. Both WPF and WinForms, while legacy, are still widely used in enterprise applications, and support in modern .NET lets you take advantage of the latest features.
Outside of Windows, there are a few well-supported and mature options depending on your goals. If you want a cross-platform replacement for WPF, Avalonia is a great choice. It currently supports Windows, macOS, and Linux, as well as WebAssembly, mobile, and embedded. Similarly, Uno Platform is a cross-platform replacement for UWP that supports roughly the same targets as Avalonia. These are both the best options available for doing cross-platform desktop development with C#, and they both have active communities and good documentation.
There is also MAUI, which is a cross-platform application development framework that allows you to create native applications for Windows, macOS, iOS, and Android using C#. I would caution against heavily investing in MAUI at this time as it feels like it is not getting the support or development resources it needs to be a real competitor to the other options, but it might make sense for some teams, including those that are already heavily invested in the Microsoft ecosystem or were previously using Xamarin for mobile development.
Finally, .NET is actually supported on embedded platforms as well, meaning you can write C# on small devices like microcontrollers and SOC boards like the Raspberry Pi. nanoFramework is primarily focused with supporting C# development on microcontrollers, including native support for cloud connectivity and IoT applications. There is also .NET IoT, which is focused on supporting C# development on single-board computers like the Raspberry Pi, and has support for a wide range of sensors and peripherals. Lastly, there is Meadow, which is a hardware platform specifically designed for running .NET applications on embedded devices, and has support for a wide range of sensors and peripherals as well.
The Modern C# Landscape
Background
C# has its origins in the late 90's as Cool, which stood for "C like Object Oriented Language." Cool and CLR (Common Language Runtime) were developed to combat the fragmented landscape of developing for Windows at the time, as it was a mix of languages (C, C++, and Visual Basic) and frameworks (Win32 API, MFC, and COM). The original design for C# was heavily influenced by C++ and Java in an effort to appeal to existing programmers and to create something competitive to Sun's offerings. This resulted in a very robust language that was designed to be familiar but modern, and even compared to Java at the time it had a number of features that made it more powerful and easier to use, including properties, events, delegates, and a more powerful type system.
Since the original version of C# and the .NET Framework, everything has evolved significantly from the original vision. At the language level, even the leap from C# 1.0 to C# 2.0 was significant with the introduction of generics, and every major version since has included some major features that have changed the way you write C#. In addition, when .NET Framework was introduced it was only available for Windows, but now you can easily write cross-platform applications in C#. While you can (mostly) write C# the same way you might have 20 years ago, there are a number of modern features that have been added to the language that make it much more powerful and expressive, as well as a much more evolved development environment and ecosystem, and it's worth taking the time to learn about them and how they can improve your code.
Development Environment
The fastest way to start working with C# is to simply install the latest .NET LTS (Long Term Support) SDK; the current LTS is .NET 10. This will give you access to the dotnet CLI, which allows you to create, build, and run C# projects from the command line. This also lets you use a number of templates to quickly get started with different types of projects, including console applications, web applications, and class libraries. This is the standard way to create new .NET applications and helps wire up the dependencies and project structure for you.
As far as editors go, I have been using Rider for over a decade and would recommend it as the best C# development experience. It's cross-platform, it has a ton of great plugins and features, and now it's free for non-commercial use if you just want to use it for learning or doing open-source work. It also has the best debugging experience of any C# IDE, and is well-integrated with a variety of platforms outside of just .NET, including game engines like Godot and Unity, as well as databases and back-end services.
The major alternative to Rider right now would be Visual Studio Code. While in the past Visual Studio was the go-to IDE for C# development, it has become less prominent for .NET developers in recent years with the rise of cross-platform development and the fact that it's only available on Windows. Out of the box VS Code is more barebones, but it has a huge amount of extensions to customize the experience, including the C# extension, which provides support for C# development, including IntelliSense, debugging, and project management.
The nice thing about using .NET today is that it also includes a CLI that can do all of the same stuff that IDEs can do, so if you want to use something else like Emacs or Vim it's not as difficult of a workflow as some other languages, and you can still take advantage of the latest features and libraries without being locked into a specific IDE.
NuGet is the standard package manager for .NET, and it has a huge ecosystem of libraries and tools that you can easily add to your projects. It is worth noting that the C# community can be very divisive about what libraries to use based on their work environment and experience, so it's always worth doing some research to see what's out there as there are a number of great smaller libraries that are doing some interesting things, especially if you want to take advantage of the latest features.
The Standard Library
.NET (and by extension, C#) includes a large core library known as the BCL (Base Class Library), which covers many day-to-day development needs, including collections, IO, networking, cryptography, threading, and numerics. It also includes some especially notable capabilities. LINQ, for example, combines library support with C# language features and query syntax to make querying and transforming data much more expressive. The Task Parallel Library provides a strong foundation for writing concurrent and parallel code. There are even SIMD types such as Vector and Vector128 that let you take advantage of hardware acceleration in performance-sensitive code.
It would be difficult to cover everything, but some of the most foundational areas to become familiar with are:
- System.Collections.Generic, which provides the generic collection types you will use constantly, including
List<T>,Dictionary<TKey, TValue>,HashSet<T>,Queue<T>, andStack<T>. - System.IO, which provides types for working with files, directories, paths, and streams, including
File,Directory,Path,Stream, andStreamReader. - System.Net.Http, which provides the modern HTTP client stack, including
HttpClient,HttpRequestMessage, andHttpResponseMessage. - System.Linq, which provides the standard query operators that make filtering, projecting, grouping, and aggregating data much more expressive.
- System.Threading.Tasks, which provides the foundation for task-based concurrency and async programming through types like
Task,ValueTask, andParallel. - System.Text.Json, which provides the built-in JSON APIs for serialization, deserialization, and lower-level JSON processing.
- System.Security.Cryptography, which provides hashing, encryption, certificates, and secure random number generation.
- System.Numerics, which includes types like
BigInteger,Complex, and SIMD-friendly vector types for math-heavy or performance-sensitive code.
Modern C# Features
The latest version of C#, C# 15, is the newest release as of the creation of this article, but because trying it out currently means using .NET 11 preview tooling, we will focus on C# 14 and previous versions by taking a look at some of the standout features that have been added over the years. C# originally released on a 2-3 year cadence until C# 8, which was the first version to target .NET Core instead of the .NET Framework, and since then there has been roughly been one new version every year. Some of the standout features of modern C# include:
- Pattern matching and switch expressions, which make it much easier to inspect data and write concise branching logic without long chains of casts and conditionals.
- Nullable reference types, which push null-safety into the compiler and make APIs easier to reason about.
- Records and record structs, which reduce boilerplate for data-oriented types and make immutability much more ergonomic.
- Collection expressions, which provide a concise way to create arrays, lists, spans, and other collection-like values.
- Primary constructors, which reduce ceremony for types that mainly exist to hold dependencies or configuration.
initaccessors,withexpressions, andrequiredmembers, which make object construction clearer, safer, and less repetitive.
To learn more, I suggest going through the version history and skimming all of the features added to each version and diving into the ones that look interesting to you. It is recommended you stick with the .NET LTS releases for production, especially in more conservative environments, but for learning purposes, side projects, and fast-moving teams, there's no reason not to try out the latest releases as they are typically very stable and are a way to get access to the latest features and improvements.
Learning Resources
Books
Previously there were a lot of great C# books being published pretty regularly, but over the last few years this has slowed down in favor of online resources, and so there won't be a long list of books to check out, especially since C# has evolved so rapidly over time. Still, there are some standouts that I want to recommend:
- C# In A Nutshell by Joseph Albahari is probably my favorite C# reference book. It covers pretty much every feature in the language, and has pretty robust coverage of the BCL as well. It is not a great beginner book, but I would still recommend a copy even if you're starting out.
- Programming C# by Ian Griffiths is almost like a companion to C# In A Nutshell, but is more of a hands-on tutorial-reference that talks you through how you might use different features and libraries in practice.
- Essential C# is a free online book by Mark Michaelis that is a great introduction to C#. It covers the basics of the language and the .NET ecosystem, and is a good starting point, especially since it covers up to C# 13.
- C# Concurrency by Nir Dobovizki provides a beginner-friendly look at asynchronous programming and concurrency in C#. This is a good book to pick up when you have a little bit of experience with C# but want to know more about async/await.
- C# Concurrency Cookbook, 2nd Edition by Stephen Cleary is a bit outdated but still a great resource for learning about asynchronous programming and concurrency in C#. It covers a wide range of topics, including the Task Parallel Library, async/await, and more advanced topics like dataflow and reactive programming.
- C# In Depth, 4th Edition by Jon Skeet is an interesting book for learning about the history and evolution of C#, as well as covering the quirks of the language. It's not really something you would want to necessarily read when you're learning the language, and it only covers C# up to C# 7, but it can fill a lot of gaps in your knowledge and give you a deeper understanding of how C# works under the hood.
- Pro .NET Memory Management by Konrad Kokosa is a great book for learning about memory management in .NET and C#. It covers everything from how memory in .NET works, the garbage collector, and leveraging the latest features like
Span<T>andMemory<T>for high-performance code. It is written with a wider audience in mind and is a good introduction to the subject. - Dependency Injection Principles, Practices, and Patterns by Mark Seemann and Steven van Deursen for learning about dependency injection and inversion of control in C#. It covers the fundamentals of DI, as well as some of the more advanced topics like testing and design patterns.
- Domain Modeling Made Functional by Scott Wlaschin is a great book for learning about functional programming and domain modeling in F#, a language that is also part of the .NET ecosystem and can also be used alongside C#.
Online Resources
The official Microsoft C# documentation is honestly the best resource for learning C#, and .NET in general. It has very good coverage of everything you need to know, and they have been doing a good job of keeping it up to date with the latest features and improvements. It also has a number of tutorials and guides that can help you get started with different types of projects and applications.
Content Creators
The .NET community is not as prevalent on YouTube or Twitch as some other programming communities, but there are a few standout content creators that are worth following:
- Tim Corey has a lot of great content for learning C# and .NET, including tutorials, best practices, and deep dives into specific features and libraries.
- Nick Chapsas tends to make topical .NET videos covering the latest features and improvements.
- Milan Jovanović uses C# to cover software development topics in general, including architecture, design patterns, and best practices.
There are actually a few .NET-focused podcasts out there, including:
- .NET Rocks, which has been around for a long time and covers a wide range of topics related to .NET and C#.
- The Unhandled Exception, which tends to focus on conversation with guests in the .NET community.
- The Modern .NET Show, which also has a lot of guests from the .NET community, but also has a lot of episodes that are focused on specific features and improvements in .NET and C#.
- Merge Conflict, which has a nice backlog of episodes that focus a lot on mobile development with Xamarin and MAUI, though it has increasingly become more topical about technology in general.
Conclusion
Some of the URLs in this article are affiliate links. If you want to support the site by purchasing any of the content on the site, it is greatly appreciated!