No description
  • HTML 87.8%
  • C# 11.7%
  • Python 0.5%
Find a file
Feiko a7e10533f1
Some checks failed
Build and Release PDFs / build (push) Failing after 7s
new build system
2026-05-28 14:56:44 +02:00
.claude big thing 2026-05-20 22:29:18 +02:00
.forgejo/workflows Include exercises directory in student.zip packaging 2026-05-20 09:02:04 +02:00
.vscode init 2026-05-15 17:24:46 +02:00
archive Added speaker notes to modules 4, 5, 6 and improved build.py with --serve mode 2026-05-19 21:41:49 +02:00
articles delete 404s 2026-05-18 22:21:38 +02:00
books Added speaker notes to modules 4, 5, 6 and improved build.py with --serve mode 2026-05-19 21:41:49 +02:00
build new build system 2026-05-28 14:56:44 +02:00
demos new build system 2026-05-28 14:56:44 +02:00
docs new stuff 2026-05-18 22:09:15 +02:00
exercises big thing 2026-05-20 22:29:18 +02:00
scratch new build system 2026-05-28 14:56:44 +02:00
solutions more 2026-05-20 22:54:06 +02:00
src new build system 2026-05-28 14:56:44 +02:00
tutorials Added speaker notes to modules 4, 5, 6 and improved build.py with --serve mode 2026-05-19 21:41:49 +02:00
.gitignore more 2026-05-20 22:54:06 +02:00
BUILD.md refactor: consolidate source and build tooling into src/ and build/ 2026-05-19 08:14:12 +02:00
GEMINI.md Nuked fragmented lists (converted * to -) with correct UTF-8 encoding and updated documentation 2026-05-19 21:44:52 +02:00
README.md more 2026-05-20 22:54:06 +02:00

Advanced C# Programming — Trainer Guide

If you are delivering this course on Monday, start here.


Repo geography

Path What it is
src/slides/ Marp slide source — one folder per module, one .md file per folder
src/exercises/ Exercise specs — one Markdown file per module
src/site/ Course website copy and official syllabus reference
build/ Build scripts (build.py, lint-slides.py, Node config)
demos/ Demo console projects across 9 module solutions
solutions/ Reference solutions — one project per exercise module
build/dist/ Temporary build artifacts (combined.md, student.zip) — gitignored
archive/ Historical authoring docs — not part of the active workflow

Student deliverable

Attendees receive three things:

  1. Slides PDF — generated at repo root
  2. Exercises PDF — generated at repo root
  3. Demo source code — zip of demos/

Everything else (exercise reference solutions in solutions/, build scripts, source Markdown, archived docs) is trainer-internal.


Build commands

python build/build.py                       # slides PDF
python build/build.py --exercises           # exercises PDF
python build/build.py --check-builds        # also runs dotnet build over all .slnx solutions
python build/build.py --check-builds --skip-builds   # opt-out if you just need PDFs fast
python build/lint-slides.py                 # slide content lint (run before build)

See BUILD.md for full pipeline detail, flag reference, and troubleshooting.


Module navigation

# Topic Slides Demos Exercise spec Reference solution
1 Advanced C# Features src/slides/01-advanced-csharp-features/ demos/M01.AdvancedFeatures/ src/exercises/01-advanced-csharp-features.md solutions/M01.AdvancedFeatures/
2 Delegates and Lambdas src/slides/02-delegates-and-lambdas/ demos/M02.DelegatesAndLambdas/ src/exercises/02-delegates-and-lambdas.md solutions/M02.DelegatesAndLambdas/
3 Generics src/slides/03-generics/ demos/M03.Generics/ src/exercises/03-generics.md solutions/M03.Generics/
4 Functional Programming src/slides/04-functional-programming/ demos/M04.FunctionalProgramming/ src/exercises/04-functional-programming.md solutions/M04.FunctionalProgramming/
5 Asynchronous Programming src/slides/05-asynchronous-programming/ demos/M05.AsynchronousProgramming/ src/exercises/05-asynchronous-programming.md solutions/M05.AsynchronousProgramming/
6 Dependency Injection src/slides/06-dependency-injection/ demos/M06.DependencyInjection/ src/exercises/06-dependency-injection.md solutions/M06.DependencyInjection/
7 Reflection & Metaprogramming src/slides/07-reflection-and-metaprogramming/ demos/M07.ReflectionAndMetaprogramming/ src/exercises/07-reflection-and-metaprogramming.md solutions/M07.ReflectionAndMetaprogramming/
8 Memory Management src/slides/08-memory-management/ demos/M08.MemoryManagement/ src/exercises/08-memory-management.md solutions/M08.MemoryManagement/
9 Advanced Topics src/slides/09-advanced-topics/ demos/M09.AdvancedTopics/ src/exercises/09-advanced-topics.md solutions/M09.AdvancedTopics/
10 Capstone src/exercises/10-capstone.md solutions/M10.Capstone/

Suggested four-day delivery flow

Day Sessions Modules
1 AM + PM 1 — Advanced C# Features, 2 — Delegates and Lambdas
2 AM + PM 3 — Generics, 4 — Functional Programming
3 AM + PM 5 — Asynchronous Programming, 6 — Dependency Injection
4 AM AM 7 — Dynamic Programming, 8 — Memory Management, 9 — Advanced Topics
4 PM PM Exercise 10 — Capstone

This is a starting heuristic; calibrate for room pace. Day 4 AM covers three modules at a faster pace; if the group is slower, move Module 9 to a fifth half-day.


Audience profile

Working enterprise developers — typically at banks, ISPs, or large internal-tooling teams — who have been writing C# for years on older runtimes (.NET Framework, .NET Core 2/3). They are comfortable with the language basics. They want a guided tour of what modern C# and .NET offer: practical trade-offs, production pitfalls, and the kind of judgment that comes from seeing the ecosystem whole, not trivia about compiler internals.

Approach the room as seasoned colleagues learning a new area, not as students learning a first language.


Course design notes

COURSE_DELIVERY_CRITIQUE.md documents known delivery trade-offs, coverage gaps, and design rationale from the latest review pass. Read it before first delivery.

src/slides/CONTENT_CRITIQUE.md documents per-slide content notes and edge cases the slides do not fully cover — useful for fielding advanced questions.


Coding conventions (demos and reference solutions)

Follow these exactly or builds will break:

  1. No em-dashes anywhere in code or comments — use semicolons or rewrite as full sentences.
  2. Top-level statements in Program.cs. Supporting types (classes, records, interfaces, delegates, enums, attributes) must appear after all top-level statements in the file.
  3. Each demo runs straight through and exits — no interactive menu.
  4. Section headers use Console.WriteLine("--- Section Name ---");
  5. Solution files use .slnx format (dotnet new sln on .NET 9+ produces this). Do not force .sln.
  6. Every project: <Nullable>enable</Nullable> and <ImplicitUsings>enable</ImplicitUsings>.
  7. Target framework: net10.0.

Standard csproj template:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
</Project>

Slide authoring conventions

  • Tone: calm, professional engineering tone. No exaggerated language ("seamlessly", "harnessing", "leveraging", "crucially"). Run python lint-slides.py before every build.

  • Fast Refresher Pattern: for foundational topics, use 1-2 slides as a quick refresher before moving into advanced trade-offs and design decisions.

  • Version badges: use sparingly to orient developers on feature/runtime requirements. Place inline at the end of a header or bullet point:

    # My Topic <span class="badge-row"><span class="version-badge">C# 12</span></span>
    

    Available variants: version-badge (C#), dotnet, runtime, caution (Preview). Badges placed in headers are automatically stripped from PDF bookmarks.

  • Course Schedule slides: source slides named # Course Schedule in module files are ignored by build.py — they are generated dynamically from module titles.

  • Separator: use --- to separate slides within a module file.

  • List Markers: Use - (dash) for standard lists. Avoid * (asterisk) unless you explicitly want Fragmented Lists (bullets that appear one-click-at-a-time). The entire codebase was converted to - to ensure a consistent, non-animated delivery style.


Trainer workflow (Pro)

For a better delivery experience, use the interactive server:

python build/build.py --serve

This launches a local web server with all modules combined. Open the URL in your browser and press P to enter Presenter Mode, which gives you synced speaker notes and a timer.