Skip to content
Free public beta until December 4, 2026: every course is open, no card needed. After that, the first chapter of each course stays free and full access is a one-time $39 ($19 for up to 100 founding members chosen for helpful feedback). Your progress is kept. How the beta works

How this course works

~15 min

This is the last page before any setup, and it's short. It covers what the two explanation styles are for and how the course knows which computer you're on. It also covers what the exercises do with the code you type. Last, it says which parts of learning C# happen on your own machine instead of in the browser.

Two explanations and your setup

Almost every idea here is explained two ways, and you choose which one you see. Textbook is the exact version, with the proper words that C# programmers and documentation use. Plain English is written for a newcomer, in everyday words, and it explains each new term the moment it shows up. Both say the same things. Plain English isn't a "lite" version. Use the switch above each explanation to flip between them. The page remembers which one you like.

Some steps depend on your computer, like how to open a terminal. Those steps come in tabs, one per option. Tell the course your setup one time, in the My setup panel on the course page. It asks two things. First, which operating system you use: Windows, macOS, or Linux. Second, which app you'll write C# in. Chapter 1 helps you choose between Visual Studio, Rider, VS Code, and just using the terminal. After that, every tabbed block opens on your choice.

Most ideas in this course are explained twice, side by side. The Textbook lane is precise: it uses the correct terms and states the rules in full, the way documentation or an interview question would. The Plain English lane says the same thing for someone meeting it for the first time, in everyday words, with each new term explained where it appears. The two lanes make the same claims; neither is a shortcut. A switch above each explanation flips between them. The choice sticks as you move through the course.

Some instructions differ by computer. Those appear as tabs. The course has two tab groups, set once under My setup on the course page or in Settings. One is your operating system: Windows, macOS, or Linux. The other is your environment, the app you'll write and run C# in: Visual Studio, Rider, VS Code, or the plain command line. Picking a tab in any lesson changes it everywhere. If a block doesn't offer your choice, it shows its first tab and leaves your setting alone.

Here's a small taste of an environment-tabbed block. Each tab shows how you'll start a program once Chapter 1 has set that app up.

Visual Studio 2026 runs on Windows. Press Ctrl+F5 to run your program, or F5 to run it under the debugger (a tool that can pause the program on any line so you can look around; Chapter 1 §5 shows you how).

JetBrains Rider runs on Windows, macOS, and Linux. Click the green Run arrow in the toolbar to run your program, or the bug icon next to it to run it under the debugger.

VS Code runs on Windows, macOS, and Linux, with Microsoft's C# Dev Kit extension added. Press F5 to run your program under the debugger, or Ctrl+F5 to run it without.

Any text editor plus a terminal works. In the folder that holds your file, type:

dotnet run hello.cs

The apps in the other tabs run this same dotnet tool underneath.

Worked example

Setting up once

  1. 1

    Sam uses a MacBook and plans to use VS Code. On the course page, Sam opens My setup and picks macOS and VS Code.

  2. 2

    In Chapter 1, the install steps open straight on the macOS tab, and the "run your program" steps open on VS Code. Sam never has to hunt for the right tab.

  3. 3

    Later Sam wants to try Rider and clicks its tab in a lesson. Every environment tab in the course now opens on Rider, because picking a tab anywhere updates the setting everywhere.

  4. 4

    One block only covers Visual Studio and the command line. It opens on its first tab, Visual Studio. Sam's Rider choice stays saved for the next block that has it.

Practice: Explanations, tabs, and My setup (4 problems · doesn’t affect your progress)

Why do some steps in a lesson come as a row of tabs?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

The tabs aren't levels. They're the same step written for different computers.

A tabbed step isn't optional. You follow the tab that matches your machine.

You only need the tab for your own setup. The others are for people on other computers.

Why

Opening a terminal or installing a tool is done differently on Windows, macOS, and Linux, and in each app. Tabs hold one version per choice, and the course opens yours.

The step differs by operating system or app

Where do you tell the course, once, which operating system and environment you use?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

You can click a tab in a lesson, and that updates your setting everywhere, so you never need to repeat it per block.

Every tabbed step covers Windows, macOS, and Linux where they differ.

It's a setting you pick yourself, on the course page or in Settings.

Why

My setup stores your operating system and environment, and every tabbed block opens on them.

My setup, on the course page

Priya's My setup says Windows and VS Code. In one Chapter 1 lesson she clicks the Rider tab to see what it looks like. Which tab does the next environment block open on?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

Clicking a tab is a way of changing the setting. Her saved choice is now Rider.

The first tab is only a fallback for a block that lacks your choice. This block has Rider.

The choice isn't kept per lesson. One click updates it everywhere in the course.

Why

Picking a tab in any lesson updates the setting everywhere. From then on, environment blocks open on Rider until she picks another one.

Is clicking a tab just a peek, or does it change something?

Rider

Omar's setup is Linux and Command line. One block offers only Visual Studio, Rider, and VS Code, so it opens on Visual Studio. The next block offers all four. Which tab does it open on?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

Showing the first tab as a fallback doesn't change the setting. Only a click does that.

Nothing moved his choice to Rider. The earlier block just showed its first tab.

A tabbed block always opens on some tab. When it has your choice, it opens on that.

Why

The first block lacked his choice, so it showed its own first tab and left his setting alone. The second block has Command line, so it opens there.

Did Omar click anything in the first block?

Command line

Checks, practice, and bug hunts

You'll meet two kinds of question set. A check sits in the middle of a lesson and asks a few questions picked at random from a bigger pool, so coming back later gives you different ones. Checks are marked. They also help the course decide what to show you again later for review.

A practice set comes at the end of a section. It's a short ladder of 4 to 6 problems that always come in the same order. First comes one about the idea itself. Then there's an easy one, a normal one, and a twist, and last comes the one with a trap. Practice isn't marked. It's there because reading about something and doing it are different skills.

A bug hunt gives you a short program with mistakes planted in it. It tells you up front how many there are. A mistake in a program is called a bug. Sometimes you just click the broken lines. Sometimes you edit the code to repair it and press Check, and it tells you which mistakes you've fixed and whether the code is still written correctly.

A check (the questions set inside a lesson) draws a few questions at random from a larger bank, so a revisit shows a different mix. Your answers are graded and feed your progress and review schedule. A practice set is a fixed ladder of 4 to 6 problems, always in the same order. It opens with a question about the idea, then climbs through a basic case, a typical one, and a variation, and ends on the problem with the catch in it. Practice is ungraded; it exists so you can do the thing, not just read about it. Each chapter ends with review practice drawn from all its sections.

A bug hunt is a short program with planted mistakes, and it always tells you how many. It comes in two forms. In spot mode you click the line or lines that are wrong. In fix mode you edit the code in place and press Check; the checker then reports whether each planted mistake is gone and whether the code is still valid C#.

Bug hunt, spot mode

This program has 1 mistake that stops it from building. Click the line that's wrong.

Loading interactive…

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Correct answer

Also accepted:

Why

Why

Line 2 opens a quote before Total and never closes it, so the compiler reads the rest of the line as text and can't find where the instruction ends. Adding the closing quote right after 12 fixes it.

Worked example

Working a bug hunt

  1. 1

    The task says "1 mistake." Believe it. You're looking for one line. Once you've found a clear culprit, you can stop.

  2. 2

    Read top to bottom, checking one thing per line: does every opening quote have a closing quote? Every ( a )? Does every instruction end in ;? Are Console and WriteLine spelled with their capitals?

  3. 3

    Line 1 passes every test. Line 2 has "Total: 12 with no closing quote before the ). That's it.

  4. 4

    In fix mode you'd add the missing " and press Check. If the checker still says the code isn't valid C#, the fix introduced a new problem; compare your line character by character with a working one above it.

Check your understanding (counts toward your progress)

How do the Textbook and Plain English explanations relate to each other?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

Plain English isn't a trimmed version. It says everything, with each new term explained as it appears.

Both are correct. They differ in wording, not in accuracy.

They cover the same idea side by side. Read whichever one works for you.

Why

The two lanes carry the same content. Textbook uses the exact terms; Plain English translates them for someone meeting them for the first time.

Bug hunt, fix mode: this program has 1 mistake. Repair it.

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

Line 1 opens a quote before Level and never closes it, so the text runs off the end of the line (CS1010, "newline in constant"). Close it after complete.

Correct answer

Also accepted:

Why

Every opening quote needs a closing quote.

Sort each description: is it a check or a practice set?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

Checks draw a random handful from a bank and are graded. Practice sets are fixed, ordered ladders that end on the tricky case and aren't graded.

Correct answer

Also accepted:

Why

One of the two is random and graded; the other is a fixed ladder.

Put the steps for working a fix-mode bug hunt in a sensible order.

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

Know how many mistakes to look for, find them line by line, repair, check, and if the checker still objects, your edit probably added a new problem.

Correct answer

Also accepted:

Why

You can't compare results before you've pressed Check.

Practice: Work a bug hunt (4 problems · doesn’t affect your progress)

Sort each instruction by the kind of bug hunt it belongs to.

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

In spot mode you only mark the broken lines. In fix mode you repair the code in place and press Check.

Correct answer

Also accepted:

Why

“Click each line that's wrong” → Spot mode; “Edit the code, then press Check” → Fix mode; “A flag appears next to the lines you pick” → Spot mode; “You type the repair into the program itself” → Fix mode

A shop's checkout screen won't build, and the hunt says there is 1 mistake. In spot mode, which line do you click?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

Line 2 starts with console in lower case. C# is case-sensitive, so the compiler doesn't know that name and reports CS0103.

Correct answer

Also accepted:

Why

Compare how each line starts.

1 mistakes fixed

Bug hunt, fix mode: this weather program has 1 mistake. Repair it so both lines print.

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

Line 2 opens a ( and never closes it. Add ) after the closing quote, before the ;.

Correct answer

Also accepted:

Why

Count the brackets on line 2.

1 mistakes fixed

A spot-mode bug hunt says the program has 2 mistakes. You've clicked one line that is clearly wrong. What should you do next?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

The count in the task is exact. With only one of two found, the hunt isn't finished.

Mistakes aren't always next to each other. Guessing a neighbour isn't reading.

Spot mode only asks you to click lines. You don't type anything at all.

Why

A bug hunt always tells you how many mistakes it planted. Keep checking each line's quotes, brackets, semicolons, and capitals until you've found both.

How many mistakes did the task promise?

Keep reading; one more line is wrong

What the page checks, and what you run yourself

When you type code into a question on this site, the site never runs it. Your code goes to our server, and a C# parser looks at it. A parser is a program that reads code the way a grammar checker reads a sentence. It can tell whether the code is written correctly, and whether you used the piece the question asked for. It can't tell what your code would do if you ran it, just like a grammar checker can't tell whether a sentence is true. It also doesn't know whether a name you typed really exists.

So where do the outputs on the pages come from? Before a page goes live, our build runs every example program on the real C# tools, the same free kit you'll install in Chapter 1. Then it checks that the output on the page matches what really printed. If it doesn't match, the page isn't published. None of the outputs were typed in by a person.

Actually running your own code happens on your own computer. In Chapter 1 you'll run your first program with a command, dotnet run. From Chapter 3, every lab arrives with tests, small extra programs someone already wrote that check whether your program works, and a command runs them all for you. The debugger, a tool that pauses your program so you can watch it one line at a time, also runs on your computer.

Code you type on a lesson page is never compiled or run. It's sent to the course's server and checked by a C# parser: a program that reads source code and works out its structure, without translating or running it. The parser decides whether the code is valid C#, and whether it uses what the task asked for, such as a particular statement. That makes the checks fast and safe, and it sets their limits. A parser knows the shape of your code, not what the code would do when run. It can't know that a name you used doesn't exist anywhere, or what the program would print.

So anything a page shows a program doing was produced ahead of time. That covers the output under a snippet and the answer to a predict-the-output question. The course's build runs every such program on the real .NET SDK, the kit of tools (the C# compiler among them) that you install in Chapter 1, and it fails if the page doesn't match. No output on a page was typed by hand.

Running is your machine's job. From Chapter 1 you'll run small programs with dotnet run. From Chapter 3, each lab comes with tests already written, small programs that check your work, and you run them with dotnet test. Stepping through a program line by line in the debugger is also local.

Two panels. On this page: read, predict, order, and fix code; a C# parser checks the shape; your code is never run. On your machine: dotnet run, labs, and tests; the real .NET SDK builds it; the debugger steps through it. Below both: every output a page shows was captured from a real .NET run when the page was built.
The page checks what your code looks like. Your own machine is where it runs.

On the page, or on your machine?

Sort each activity by where it happens.

Loading interactive…

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Correct answer

Also accepted:

Why

Why

Ordering lines, checking that a fixed line is valid C#, and showing an output captured when the page was built all happen on the site. Running dotnet run, running a lab's tests, stepping through code in the debugger, and seeing what your own changed program prints all need your machine.

Worked example

Checked is not the same as run

  1. 1

    A fill-in-the-blank question asks for the line that prints a stored greeting. Earlier in that program, the greeting was stored under the name greeting. Priya types Console.WriteLine(greting);, one letter short, and presses Check.

  2. 2

    The parser looks at shape. greting is a perfectly well-formed name, the brackets match, and the line ends in ;. If the question only asked for "a printing statement," the shape is right.

  3. 3

    The real compiler, on Priya's machine, would find no such name as greting and stop with an error. The parser can't know that, because it never looks up what names mean. That's why careful questions check for the exact text they need. It's also why labs are run for real.

  4. 4

    The habit that follows: when a page check passes, you've shown the shape is right. When a program runs on your machine and its tests pass, you've shown it works.

Worked example

Trusting an output you didn't run

  1. 1

    A lesson shows a three-line program and, under it, the output box with Hello!, Welcome to C#., and 7.

  2. 2

    That box wasn't typed in by the author. When the course was built, the program ran on the .NET SDK and the box was compared with what it printed. A mismatch would have stopped the page from being published.

  3. 3

    So when your prediction disagrees with a page's output, the page is right and your reading has a gap. That's the most useful moment to slow down and trace the program again, line by line.

Professional habit: when a program surprises you, run it. Reading code closely is a skill this course trains hard. Still, a real run on your own machine settles an argument faster than rereading does.

Where this goes next

Chapter 1 §5 is where you pick your environment for real, and your My setup choice from this page decides which tab each later "run it" step opens on. The first lab with prewritten tests arrives in Chapter 3, and Chapter 1 §5 runs a program under the debugger once. Chapter 26 is the full debugging chapter. Every bug hunt from Chapter 1 on works the way this page described.

Check your understanding (counts toward your progress)

Sort each activity by where it happens.

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

Everything that runs a program (dotnet run, dotnet test, the debugger) happens on your machine. Reading, marking, and checking the shape of code happen on the site.

Correct answer

Also accepted:

Why

This program is valid C# in shape, so a page's parser accepts it, but the real compiler rejects it. Click the 1 line the compiler would refuse.

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

Line 3 uses scroe, but the stored number is called score. The shape is fine, so only the compiler catches it, with CS0103: the name doesn't exist.

Correct answer

Also accepted:

Why

Compare every name with the one the program stored.

Your prediction for an example's output disagrees with the output the page shows. What's the most useful conclusion?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

Page outputs aren't typed by authors. They're captured from real runs and checked on every build.

The same simple program prints the same thing every time it runs.

Output is exact, down to spaces and capitals. One of the two is wrong, and it isn't the captured one.

Why

The page's output came from a real run, so the gap is in the reading. That's the moment worth slowing down for.

Who produced the page's output: a person, or a real run?

The answer to this question was captured by running the program on the .NET SDK. Type exactly what it prints.

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

The quoted lines print as written, and 2 * 3 is worked out first, so the middle line prints 6.

Correct answer

Also accepted:

Why

The middle line has no quotes, and * means multiply.

Practice: What the page checks, and what you run (5 problems · doesn’t affect your progress)

How can a page check your C# without ever running it?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

Length tells it nothing. The parser works out the actual structure.

Nothing runs in your browser, secretly or otherwise.

Many different lines can be correct. The parser checks structure and required pieces, not one exact spelling of the whole answer.

Why

The parser works out what the code is made of, which is enough to judge whether it's valid C# and uses what the task asked for.

A parser reads the code's structure, the way a grammar checker reads a sentence

Which of these can only happen on your own machine?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

Ordering lines is a page exercise; the server checks the order.

Spot-mode bug hunts are marked on the site.

Fill-in-the-blank is checked on the site by the parser.

Why

Running tests means running code, and code only runs on your machine.

Running a lab's tests with dotnet test

Sort each claim about a lesson page: true or false?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

The page parses your code, never runs it, and its outputs were captured from real runs. Shape problems like a missing bracket are visible to the parser; what the program prints, and whether it works, are not.

Correct answer

Also accepted:

Why

The parser sees shape: brackets, semicolons, which statements appear.

“Code you type is never compiled or run” → True; “Every output shown came from a real .NET run” → True; “The parser knows what your program prints” → False; “A passing check proves your program works” → False; “The page can tell if a bracket is missing” → True

The page's parser rejects this program. Click the 1 line it objects to.

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

What this task checks

Structure checked automatically. Whether your ideas are convincing isn't graded, so reread with the checklist.

The compiler says

A model answer

Why

Line 2 never closes the bracket it opened after WriteLine. That's a shape problem, so the parser catches it without running anything.

Correct answer

Also accepted:

Why

Count the brackets on each line.

1 mistakes fixed

Your fix-mode answer passes the page's Check. On your own machine, the same code fails to build. How can both be true?

Correct! 🎉 Not quite.

Right on try — credit. Right — the answer had already been shown, so no credit this time. Next try is worth Answer shown after three tries — this one no longer earns credit. You chose to see the answer — this one earns no credit.

Both are working as designed. They check different things.

Both deal with the same C#. The compiler simply checks more than a parser does.

The page never runs any version of your code.

Why

A misspelled name is well-formed C#, so the parser accepts it. The compiler looks names up, finds nothing, and refuses to build.

What does the compiler know that a parser doesn't?

The page checks shape; the compiler also checks that every name you used exists

Feeling good about this section?

Take the section quiz

Every answer gets a full explanation at the end.

Sign in to save highlights

Insert an equation

  • No matches.