During many years in the software development industry and gaining more and more knowledge in Microsoft-related world, I figured out that many people have different knowledge depending on projects and teams they have been working. Some of that knowledge overlaps but some is not. But, there are some subjects that every C#/.NET developer must know and there are some subjects that are good to know.
Here I will not go to much details of each topic, as there are a lot of references about this topic on the Internet, but will try to cover what is a bare minimum and give a references to it. It could look overwhelming, but as in any topic you don’t need to know everything, start with the musts and continue to build your knowledge on top of it.
In one of the further blog posts, I will write about how you can learn in the most efficient way and how to to “keep” that knowledge close to you. Of course, not forget that building a “real stuff” in some area cannot be replaced with just pure learning about it.
I choosed to write about this topic now as the .NET platform is mature enough to offer all kinds of modern application developments, but also it is starting to transform it to a new cross-platform ecosystem (see .NET 5).
As a good start in the C#/.Net world you can start at the https://dot.net page, where you will get a general overview and can start to dive into specific subjects. In general, .NET is a free, cross-platform, open source developer platform for building many different types of applications.
Must know topics
You can get good overview on the .NET ecosystem by looking at .NET architectural components page.
C# language is the main driving force in the .NET ecosystem. C# is a simple, modern, object-oriented, and type-safe programming language. Knowing the language well is a separate subject on its own. You can start learning about the language or deepen your knowledge here:
Start with basics, like what string actually is and then continue and learn about passing parameters, collections, multithreading, asynchronousy and continue with delegates, events, generics, exceptions, etc. Try to fully understand how those concepts work.
In the .NET world we have three main runtimes:
- .NET Framework supports websites, services, desktop apps, and more on Windows.
- .NET Core is a cross-platform .NET implementation for websites, servers, and console apps on Windows, Linux, and macOS. It is composed of .NET Runtime, framework libraries which provide primitive data types and set of SDK tools.
- Mono for Xamarin is a .NET implementation for running apps on all the major mobile operating systems.
Here is a graphic with nice overview of .Net runtimes (thanks to Matt Warren).
Platforms and frameworks
- Target frameworks defines an API you can use. There are different frameworks, such as .NET Framework or .NET Standard.
- .NET Standard is a base set of APIs that are common to all .NET implementations. It allows libraries to build against the agreed on set of common APIs, ensuring they can be used in any .NET application—mobile, desktop, IoT or Web.
- Platform is actually an operating system framework, such as Windows, Linux, Max, etc.
To extend functionality, Microsoft and others maintain a package ecosystem built on .NET Standard.
- NuGet is a package manager built specifically for .NET that contains over 90,000 packages.
Good to know
- What is an Assembly and how runtime locates assemblies - it represents a compiled output of code, usually DLL or EXE, which is deployable. It contains .NET Code in MSIL (Microsoft Intermediate language) that will be compiled to native code by JIT (Just-In-Time compiler).
- Global Assembly Cache - it stores assemblies specifically designated to be shared by several applications on the computer.
- How CLR and JIT works. CLR is a VM component that manages execution of .NET programs, a process known as JIT compilation, whicle JIT takes IL and compiles it in preparation to running as native code.
- CoreCLR - .NET Runtime used by .NET Core.
- CoreFX - represent a class libraries for .NET Core, including types for collections, async, console, JSON, etc.
- Roslyn - C# compiler used by the .NET platform.
- Garbage collection - It is an automatic memory manager and (not) knowing how it works could affect your apps a lot.
- Asynchronous programming - in C# is an efficient approach towards activities blocked or access is delayed. If an activity is blocked like this in a synchronous process, then the complete application waits and it takes more time. The application stops responding. Using the asynchronous approach, the applications continue with other tasks as well.
- Debugging - by using Visual Studio or similar IDE you can debug your app, which means that you are running your application with the debugger attached. When you do this, the debugger provides many ways to see what your code is doing while it runs.
- Profiling - in order to measure and optimize performance of an app you can use different tools and techniques.
- Testing - set of tools and features that one can use for different type of tests (unit, performance, load, ui, etc.).
- Entity Framework Core - is a cross-platform version of O/RM mapper enabling .NET developers to work with a database using .NET objects.
- LINQ - is uniform query syntax in C# to retrieve data from different sources and formats, but mainly databases.
- Portable Class Libraries - a technology to build cross-platform apps and libraries, by sharing the same code. The .NET Platform represents a succcessor of PCLs.
Nice to know
- New C# 8.0 features - the latest version of the C# language, include a few really good features such as Nullable Reference Types.
- NET 5 - will be a single unified platform for building applications that run on all platforms (Windows, Linux) and devices (IoT, Mobile). It represents a single .NET runtime and framework that can be used everywhere and that has uniform runtime behaviors and developer experiences.
- .NET Core Roadmap - Here’s what Microsoft is planning for .NET for the next period
- .NET Native - is the AOT compiler used for Windows UWP applications. It is able to compile to native code directly, instad of IL.
- .NET Core command-line tools - is a set of command-line tools used for .NET Core apps for compiling, package management, testing, etc.
- C# Memory model - is a set of rules that describes what kinds of memory-operation reordering are and are not allowed.
- Windows Communication Foundation - is a framework for building service-oriented applications. It was a standard before REST API world, but still used in many enterprise applications.
If you have suggestion for any other topic not in this list, and want to contribute, do not hasitate to contact me.