How to learn .NET in 2023

Vladyslav Furdak
How to learn .NET : manuals
8 min readJul 10, 2023

Hello everyone, my name is Vlad and I have been involved in .NET development for over 10 years. During this time, I managed to work on dozens of projects in the role of senior/principal/lead developer and also conducted a large number of interviews at various levels.

I also love sharing experience, writing articles, and speaking at conferences. The last one where I spoke was FwDays 2023, where Jon Skeet and Mads Torgersen also participated. In this article, I will try to explore the topic: how to study .NET development, I will detail a Roadmap, and share some links.

Let’s go! Let’s start with a detailed map of the features of the C# language and related topics.

This Google Spreadsheet contains the following tabs:

C# 5 basics — basic topics on C# syntax.

I suggest beginners study the basics, along with the old syntax, so you won’t get lost in code written long ago. If you don’t understand the basics now, you probably won’t have time for it later. During self-study, don’t forget about LINQ, it’s worth knowing all the methods.

C# 6–12 features that have been added to C# since 2015.

I’ve collected all the features by categories in the document and added links where you can watch/read.

I recommend considering new features as a “patch” to basic knowledge. You can study them column by column, within some context, for example, today you’re learning everything related to the structure of the program and usings, tomorrow — everything related to data structures and collections. However, if your project has not the latest version of C# fixed, you can focus only on the features that are relevant to you. This way, you will learn all the latest language updates in 2–3 weeks. Features of the language that relate to unmanaged code are not necessary to study. They have a quite narrow niche of application and you probably won’t need it. But if you need it, you know where to find information.

Basic knowledge about the .NET CLR (Common language runtime) execution environment.

Basically, basic knowledge about how the .NET platform works inside. In the table, .NET Framework and .NET Core / .NET 5+ are divided. With the emergence of new versions of the framework and runtime, some things have changed dramatically, and what was relevant for .NET 4.8 is no longer relevant for .NET 5 (for example, Application Domains). Basic knowledge of Class Libraries (BCL) — a list of the most popular classes from .NET that will help you in routine work. Design patterns — collected the most popular design patterns that can come in handy. Some of them are no longer that relevant, others are worth knowing if you’re not a trainee anymore. I suggest considering patterns as an idea, not as a solution. Patterns are a language that tells about the implementation, but in modern C# most patterns are already built into the language/framework level, and there is no need to implement them separately. However, it is necessary to know about them, exclusively from the point of view of terminology. For example, there’s no point in implementing Singleton when you can use Singleton scope in your IoC container. Or, for example, the Observer/ Iterator pattern already has language means in C# in the form of events and enumerations. Various useful links and materials — I will add various courses, articles and books that I found useful here.

Changes in Requirements for Beginners in 2023

Knowing only the C# language is not enough;

it’s also necessary to have the ability to work with frameworks/infrastructure. Your gentleman’s set could be as follows:

  • ASP.NET Core.
  • EF Core.
  • XUnit or NUnit, understanding what integration/unit tests are, and the AAA methodology. Basic SQL: SELECT queries, data changes, creation/modification of tables.
  • Ability to run docker containers and docker-compose files.
  • Basic Docker skills, ability to write simple Dockerfiles.
  • Basic proficiency with Git.
  • It would be really cool if you figured out how to implement application deployment using CI/CD pipelines. You can use Gitlab pipelines / Github actions, or even something from the cloud, like Azure pipelines.
  • You can deploy to Heroku or set up your own Linux VM from scratch. The cheapest Linux machines can be found here.

Additional Competencies Databases

In this document, I have gathered the necessary minimum of basic knowledge of T-SQL / MS SQL Server.

Where and how to learn is up to you, I can suggest the following materials:

Beginner level: a decent website tutorial with the basics. Intermediate level: a book on writing T-SQL queries. Advanced level: the best tutorial on basic SQL, in my opinion. However, lately, especially with the spread of microservices architecture, MySQL / PostgreSQL is becoming more popular.

But having learned the basics of SQL for MS SQL Server, it will be easier for you to understand any SQL-like language. However, it is not worth chasing all databases, I recommend first learning the Microsoft stack.

Understanding Authentication and Authorization

It’s quite important to understand how authentication and authorization work, what Bearer & JWT tokens are, and what kinds of authentication providers exist: asp.net identity, Identity Server, and 3rd party services.

There’s a decent course on Udemy on this topic, but it’s not for absolute beginners.

Containerization

Modern development is practically impossible without containerization.

For Docker and Docker-compose, I can recommend the official documentation:

Dockerfile reference. docker-compose guide. Or a video course on Udemy about Docker & Docker-compose. However, for beginners, it’s enough to understand how to start/stop/build Docker containers and Docker-compose files.

Front-end

If you like front-end and you have a lot of free time, you can learn the basics of some frameworks. For this, courses like these are suitable:

React — The Complete Guide (incl Hooks, React Router, Redux). Modern React from scratch. I recommend paid courses on Udemy. But this is not necessary to develop as a junior .NET. If there is not so much time, I suggest focusing on the back-end part.

Gaining Practical Skills I have identified the following stages of learning:

Step1. Base Syntax

Here, your task is to master the syntax of the C# language without real tasks. This can be done by simply implementing each feature separately in the IDE, and experimenting with its behavior. Then you can move on to more complex tasks.

I can recommend CodeWars for coding exercises. Another site that helps to learn programming in a game style is CodeEasy.

Personally, I learned the syntax just by experimenting in the IDE, without third-party services, asking myself questions, and finding answers in books and in official specifications.

Step 2. Learn frameworks

You can start with ASP.NET Core and EF Core. The type of material you use is up to you.

It could be articles from docs. Microsoft, courses from Udemy, or books. Everyone seeks their own convenient form of self-study.

Regarding Udemy courses, I would recommend looking for courses with the most purchases and the longest duration. Udemy reviewers ensure that the course structure is as clear as possible for students, and the information can be absorbed in small chunks.

Step 3. Simple tasks on frameworks Here, for example, is a simple task for designing an API. Similarly, you can come up with a database design using Entity Framework with the CodeFirst approach and EF migrations. Then, implement the same thing, but with a database creation approach using pure SQL.

Step 3. Pet Project

It’s time to write your own project. The task: to create a finished product, which is much more than laboratory work.

This product doesn’t necessarily have to be a web application, although that would be even better. You can implement an API for your web program, assuming you can easily develop a front end for it.

The main thing here is to divide the stages of development so that when you work on them, you clearly understand your tasks, and each task is transparent to you.

For example: initially, you draw mockups to understand what the potential front end will look like. Tools like Balsamiq, Ninjamock, Axure or any other tools, even a piece of paper, can help. By prototyping your project, you will learn to see complete user cases and will be able to formalize them explicitly.

As an example: you could take any E-commerce system or an Instagram clone, or even come up with something of your own. The main thing here is to understand what it will be and how to use it.

The next step is to describe the business logic, that is, what data you display on the screen, what data you send to the server, and what the sequence of use is. Break everything down into pages, and pages into separate features (i.e. specific functions).

Start designing an API for the imaginary front-end, simulating the return of real results.

Then develop a database schema and business logic around it. It will be convenient to use Postman during development. You can also write integration tests in a separate project to go through chains of typical use cases.

Step 3.1. Refactoring of the Pet Project

In the previous step, the main task was to make your project simply work correctly; we didn’t talk about code design yet.

Now it’s time to fix the bugs, show your code to more experienced colleagues and ask for feedback.

Step 4. Deployment of the Pet Project

Deploy your project and databases on a remote server. Set up CI/CD; initially, this can even be done in the visual designer of Azure DevOps, but I would recommend learning to write YAML scripts for deployment. Write integration tests.

Changes in .NET Development and the Required Developer Skills Over the Last 10 Years

• C# has adopted more functional development techniques: Pattern matching, a lot of LINQ, and immutability.

• Asynchronous code.

• Web development has become more popular.

• The API for developing web applications has become more concise.

How to Choose Development Courses

In general, you should answer the question of whether to take a course or not. If you have a lot of time and motivation — you can cope on your own, organizing your learning and practice. If you have a main job and little time — you can involve professionals who will help you with this.

Disclaimer: don’t ask me which courses are better, I don’t know because I’ve never taken courses. But I can give general recommendations on how to choose a course for yourself, based on the experience of other people.

General criteria for courses that, in my opinion, can bring a person to a marketable state:

  • A comprehensive program. Studying both C# and applied aspects: databases, web, or other development, frameworks. It’s acceptable if there are different courses within the learning center, linked by a common sequence.
  • It will be good if they give you some understanding of how queues work, distributed systems, and development tools if the course direction is the web.
  • A large number of practical tasks, as well as educational projects. Ideally — teamwork.
  • Duration at least 4–6 months.
  • Constant communication with mentors, getting feedback. It’s important that mentors have commercial development experience.
  • The result of the completed courses should be the ability to develop projects of any complexity end-to-end with deployment, without using complex architectural patterns. The quality of the code and maintainability is secondary here.

General recommendations

While you have time, study the language thoroughly and deeply, later you won’t have the time. Internships are a good entry point; in the best case, you’ll be hired afterward, and in other cases, you’ll gain experience. Unpaid/low-paid work is better than unpaid idleness, even bad experience is better than no experience at all, but keep in mind that when going for an interview in a big company, if you fail, you’re unlikely to be invited again in the next 6 months. You should have a key competence, something you know best. Yes, you need to know a wide range of issues, including frameworks, infrastructure, etc., but there should be something that you know best. For a C# programmer, it could be the C# language.

Wishing you a good luck

--

--

Vladyslav Furdak
How to learn .NET : manuals

Principal .NET Engineer | Microsoft MVP | public speaker | mentor