What Every C#/.Net Developer Needs to Know in 2019
Master C# one step at a time.
Join the DZone community and get the full member experience.Join For Free
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 on. Some of that knowledge overlaps, but most does 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 into too much detail on each topic, as there are a lot of references already available, but I will try to cover what is necessary and provide additional 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.
You may also like: C# Best Practices.
I chose to write about this topic now as the .NET platform is mature enough to offer all kinds of modern application developments. It is also starting to transform it into 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.
You can get a good overview of the .NET ecosystem by looking at the .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 a string actually is, and then continue and learn about passing parameters, collections, multithreading, asynchronous programming, 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 and framework libraries, which provide primitive data types and a 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.
- The 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 the execution of .NET programs, a process known as JIT compilation. JIT, on the other hand, takes IL and compiles it in preparation for running as native code.
- CoreCLR — .NET Runtime used by .NET Core.
- CoreFX — represent a class of 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#, this is an efficient approach towards when an activity is 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 — This is a set of tools and features that one can use for different types of tests (unit, performance, load, UI, etc.).
- Entity Framework Core — This is a cross-platform version of O/RM mapper enabling .NET developers to work with a database using .NET objects.
- LINQ — LINQ is a uniform query syntax in C# to retrieve data from different sources and formats, but mainly databases.
- Portable Class Libraries — This is a technology to build cross-platform apps and libraries by sharing the same code. The .NET Platform represents a successor to PCLs.
Nice to Know
- New C# 8.0 features — the latest version of the C# language, including 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 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, instead 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 is still used in many enterprise applications.
If you have a suggestion for any other topic not in this list and want to contribute, do not hesitate to contact me or comment below!
Published at DZone with permission of Milan Milanovic. See the original article here.
Opinions expressed by DZone contributors are their own.