1
What really happens when you press F5
~2 h

For developers who "know C#" but stall at code review and in interviews when asked why something is built the way it is. The language is taught not as a list of constructs but as a set of decisions with a price: value and reference types, memory and the garbage collector, equality, null, pattern matching, strings and Span, generics, collections, LINQ, exceptions, async and concurrency, data at the process boundary, reflection and source generators. Five units then take SOLID one principle at a time, each as the answer to a concrete pain rather than a slogan. Design patterns follow — creational, structural, behavioural and the applied .NET ones — always including the case where the pattern hurts. The course closes on testability, talking through an architecture decision out loud, and what is new in C# 13 and 14. An optional branch, "C# in an application", takes the language into a working service: the host and DI, Minimal APIs, HttpClient and background jobs, EF Core, tests, and deployment to Azure. Every example lives in one system, the ENGAGE backend of the fictional firm Aldervane. Targets C# 14 / .NET 10 LTS. Written in Russian.
Your lesson is in your language: your assistant leads it.
Your assistant takes the course material from our server and leads the lesson in your language.
The exam is taken on the site, without an assistant. Exam questions are not translated: this is decided for every course.
the order is free · the steps below are the order the author suggests, not a conditionView: map · steps
1
What really happens when you press F5
~2 h
2
Value and reference types: the stack, the heap and boxing
~2 h
by the author’s design, after “What really happens when you press F5”
3
Memory and lifetime: the garbage collector, IDisposable, using
~2 h
by the author’s design, after “Value and reference types: the stack, the heap and boxing”
4
class, struct, record: what to declare data with
~2 h
by the author’s design, after “Value and reference types: the stack, the heap and boxing”
5
Equality, hashing and comparison: a contract that is easy to break
~2 h
by the author’s design, after “class, struct, record: what to declare data with”
6
null: nullable types, nullable reference annotations and what to do about them
~1.5 h
by the author’s design, after “class, struct, record: what to declare data with”
27
Pattern matching, tuples, deconstruction
~2 h
by the author’s design, after any one of these: “class, struct, record: what to declare data with”, “null: nullable types, nullable reference annotations and what to do about them”
28
Span, Memory, ref struct and how to measure
~2 h
by the author’s design, after any one of these: “Value and reference types: the stack, the heap and boxing”, “Strings: immutability, interning, StringBuilder, Span”
7
Strings: immutability, interning, StringBuilder, Span
~1.5 h
by the author’s design, after “Value and reference types: the stack, the heap and boxing”
8
Encapsulation and construction: an object that cannot be assembled wrongly
~2 h
by the author’s design, after “class, struct, record: what to declare data with”
9
Inheritance and polymorphism: virtual, override, new, sealed
~2 h
by the author’s design, after “Encapsulation and construction: an object that cannot be assembled wrongly”
10
Interfaces: the contract, explicit implementation, DIM
~1.5 h
by the author’s design, after “Inheritance and polymorphism: virtual, override, new, sealed”
11
Delegates, lambdas, closures, events
~2 h
by the author’s design, after “Encapsulation and construction: an object that cannot be assembled wrongly”
12
Generics: constraints, reification, variance
~2 h
by the author’s design, after “Interfaces: the contract, explicit implementation, DIM”
31
Metadata: reflection, attributes, source generators
~2 h
by the author’s design, after any one of these: “What really happens when you press F5”, “Generics: constraints, reification, variance”
13
Collections: choosing a data structure and its cost
~2 h
by the author’s design, after “Generics: constraints, reification, variance”
14
LINQ: deferred execution, yield, IQueryable
~2 h
by the author’s design, after “Collections: choosing a data structure and its cost”
15
Exceptions: what they are and what they are not
~2 h
by the author’s design, after “Encapsulation and construction: an object that cannot be assembled wrongly”
30
Data at the boundary: JSON, files and streams, dates and times
~2 h
by the author’s design, after any one of these: “Exceptions: what they are and what they are not”, “async/await: what it is and what it is not”
16
async/await: what it is and what it is not
~2.5 h
by the author’s design, after “Delegates, lambdas, closures, events”
29
Concurrency: lock, Lock, Interlocked, SemaphoreSlim, Channel, Parallel
~2 h
by the author’s design, after “async/await: what it is and what it is not”
17
~2 h
by the author’s design, after “Interfaces: the contract, explicit implementation, DIM”
18
OCP: open for extension, closed for modification
~2 h
by the author’s design, after “SRP: one reason to change”
19
LSP: a subtype must be substitutable
~2 h
by the author’s design, after “OCP: open for extension, closed for modification”
20
ISP: clients are not forced to depend on what they don't need
~1.5 h
by the author’s design, after “LSP: a subtype must be substitutable”
21
~2.5 h
by the author’s design, after “ISP: clients are not forced to depend on what they don't need”
22
Creational patterns: who creates objects and how
~2 h
by the author’s design, after “DIP and dependency injection”
23
Structural patterns: how to assemble objects into a whole
~2 h
by the author’s design, after “DIP and dependency injection”
24
Behavioral patterns: who calls whom and when
~2 h
by the author’s design, after “DIP and dependency injection”, “Delegates, lambdas, closures, events”
25
Applied .NET patterns: Repository, Options, CQRS, Result
~2 h
by the author’s design, after 2 of these: “Creational patterns: who creates objects and how”, “Structural patterns: how to assemble objects into a whole”, “Behavioral patterns: who calls whom and when”
32
What's new in C# 13 and 14 and how interviewers ask about it
~2 h
by the author’s design, after “Finale: testability and talking about architecture out loud”
26
Finale: testability and talking about architecture out loud
~2.5 h
by the author’s design, after “Applied .NET patterns: Repository, Options, CQRS, Result”, “async/await: what it is and what it is not”
33 · C# в приложении
The host, DI in practice, configuration, logging
~2 h
by the author’s design, after “DIP and dependency injection”
34 · C# в приложении
Minimal API: the pipeline, binding, validation, errors
~2 h
by the author’s design, after “The host, DI in practice, configuration, logging”
35 · C# в приложении
HttpClient, resilience and background jobs
~2 h
by the author’s design, after “The host, DI in practice, configuration, logging”, “async/await: what it is and what it is not”
36 · C# в приложении
~2 h
by the author’s design, after “The host, DI in practice, configuration, logging”, “LINQ: deferred execution, yield, IQueryable”
37 · C# в приложении
Testing a service: from the unit to HTTP
~2 h
by the author’s design, after “The host, DI in practice, configuration, logging”, “Finale: testability and talking about architecture out loud”
38 · C# в приложении
Shipping to Azure: App Service, secrets, managed identity
~2 h
by the author’s design, after “Minimal API: the pipeline, binding, validation, errors”
final · in the browser, without the assistant
Exam
closed · enrol on the course
| 1 | What really happens when you press F5 Describe the path from source code to machine code: Roslyn → IL and metadata → JIT (tier0 → tier1) → machine code, and what Debug and Release change | ~2 h |
| 2 | Value and reference types: the stack, the heap and boxing Predict how code behaves on assignment and when passing to a method for value and reference types, including structs in collections and tuples | ~2 h |
| 3 | Memory and lifetime: the garbage collector, IDisposable, using Explain generational collection and why its cost is determined by surviving objects, not dead ones | ~2 h |
| 4 | class, struct, record: what to declare data with Choose between class, struct, record class, record struct and readonly record struct by the question "value or entity", not out of habit | ~2 h |
| 5 | Equality, hashing and comparison: a contract that is easy to break Predict what == compares and what Equals compares, by the static and the actual type | ~2 h |
| 6 | null: nullable types, nullable reference annotations and what to do about them Distinguish Nullable<T> from nullable reference types: what the compiler does, what the runtime does (special boxing) and what nobody does | ~1.5 h |
| 7 | Pattern matching, tuples, deconstruction Rewrite if/else chains with is and casts into a switch expression and explain why the order of arms is part of the meaning | ~2 h |
| 8 | Span, Memory, ref struct and how to measure Explain what Span<T> and ReadOnlySpan<T> are, and predict where a slice gives a window and where it gives a copy | ~2 h |