Wat leer je in dit hoofdstuk?

Na dit hoofdstuk kan je:

uitleggen wat programmeren en een algoritme zijn

de rol van een programmeertaal, de compiler en .NET situeren

een console-project aanmaken in Visual Studio en de A.I.-hulp uitschakelen

in- en uitvoer verwerken met WriteLine, Write en ReadLine

een variabele in een zin zetten met string interpolation ($"...")

de meest voorkomende beginnersfouten herkennen, ook in code die je niet zelf schreef

kleur gebruiken in de console

Blijf volhouden

Leren programmeren is als een berg beklimmen waarvan je nooit de top bereikt.

en dat is net het mooie: er valt altijd iets nieuws te leren

  • De eerste stappen zijn nooit eenvoudig: je handen én je toetsenbord worden vuil
  • Waar je de komende pagina’s op vloekt, lijkt over enkele hoofdstukken kinderspel

Tip

Blijf volhouden. Blijf oefenen. Vloek gerust af en toe. En vooral: geniet van het ontdekken van nieuwe dingen.

Wat is programmeren?

  • Computers zijn in essentie ongelooflijk domme dingen, hoe krachtig ze ook zijn
  • Ze doen altijd exact wat jij zegt, niet wat je bedoelt

Programmeren = leren praten met die domme computers zodat ze doen wat jij wilt.

Opmerking

Geef je hen de opdracht om te ontploffen, schrik dan niet dat je even later de 112 mag bellen.

Computer = Domme Data Verwerker

Onthoud dit letterwoord: een computer is een DDV, een Domme Data Verwerker.

Invoer

data erin

toetsenbord, bestand, …

Verwerken

jouw programma

exact wat jij zegt

Uitvoer

data eruit

scherm, bestand, …

Opmerking

De computer bedenkt niets zelf: data in, jouw bewerking, data uit. Niet meer, niet minder.

Het algoritme

First, solve the problem. Then, write the code.

Een algoritme is het recept dat je aan de computer geeft: een reeks instructies in de juiste volgorde.

1. Haal dop van het ventiel.

2. Plaats pomp op ventiel.

3. Begin te pompen.

De volgorde doet ertoe

Ook in het echte leven is de volgorde van de stappen belangrijk.

Waarschuwing

Dezelfde drie stappen, andere volgorde: je band blijft plat. Logisch en analytisch leren denken is dus de echte kern.

Wat doet een programmeur de hele dag?

Mythe

een programmeur schrijft de hele dag code

Echt werk

vooral nadenken en code lezen

Probleem begrijpen

Algoritme bedenken

Code typen

Code lezen en testen

Fouten zoeken

Belangrijk

En met A.I.? Het typen, het kleinste stuk, kan je vandaag laten doen. Wat je vergeet te vragen, vult de A.I. zelf in met een gok. Het denkwerk vooraf en het lezen achteraf blijven jouw werk, en je krijgt er meer code bij die je niet zelf schreef.

Een programmeertaal

Een taal die de computer begrijpt is meestal:

Ondubbelzinnig

elke opdracht heeft exact één betekenis (anders dan “wat een koele kikker”)

Woordenschat

een vaste lijst woorden die je mag gebruiken

Grammaticaregels

een vaste volgorde

Tip

Enkel Yoda mag woorden in de verkeerde volgorde gebruiken. “bal rood jongen is gooit veel”?

C# (siesjarp)

  • Eén van de vele programmeertalen, deel van .NET (“dotnet”), ruim 25 jaar oud
  • Een hogere programmeertaal: leesbaarder, dichter bij onze eigen taal
  • Andere bekende hogere talen: Java, Python en JavaScript

C

C++

C#

lijkt als twee druppels water op Java

Tip

Net als bij talen leren: ken je eenmaal Frans, dan leer je makkelijker Italiaans of Spaans. Zo ook met programmeertalen: na dit boek hebben Python en JavaScript weinig geheimen meer voor je.

Anders Hejlsberg

Anders Hejlsberg

De Deen die C# boven de doopvont hield bij Microsoft.

  • Schreef eerder Turbo Pascal
  • Was chief architect van Delphi
  • Bedacht later ook TypeScript

Tip

Als je één poster in je slaapkamer hangt, zou het die van Anders moeten zijn.

Games gemaakt met C#

Allemaal gebouwd met C#, vaak via de Unity-engine.

De compiler

  • Machinetaal rechtstreeks schrijven is loodzwaar: tientallen lijnen voor één letter op het scherm
  • We hebben dus een vertaler nodig: de compiler

Vereenvoudigd compiler-overzicht.

De kern: C#-code omzetten naar een uitvoerbaar bestand in machinetaal.

.NET, kort

.NET is een framework: een grote verzameling bibliotheken plus de Common Language Runtime (CLR).

C#-code

compiler

Intermediate Language (IL)

CLR

Just-In-Time (JIT)

machinetaal

  • De CLR zet de IL pas bij het uitvoeren om naar machinetaal
  • Daardoor kunnen .NET-talen (C#, F#, VB.NET) samenwerken met diezelfde bibliotheken

Naamgeving van .NET en C#

Vroeger verschillende frameworks die net niet hetzelfde deden

.NET Framework .NET Standard .NET Core

Sinds 2020 gewoon .NET gevolgd door een nummer

.NET 5 .NET 6 .NET 7 .NET 8 …

  • Elk jaar in november een nieuwe versie; de even nummers zijn LTS (langer ondersteund)
  • Dit boek werkt steeds met de meest recente LTS-versie
  • Elke .NET-versie komt met een nieuwe C#-versie (features die je kan, niet moet gebruiken)

Tip

Waarom deze geschiedenisles? Online bots je vaak op oudere namen. Anders raak je het noorden kwijt bij het opzoeken.

Werken met Visual Studio

Visual Studio: de IDE

  • We werken met Visual Studio Community 2026, gratis via visualstudio.microsoft.com/vs
  • VS is een IDE (Integrated Development Environment), drie in één: code-editor compiler debugger
  • Kies bij de installatie de workload “.NET desktop development”, meer heb je niet nodig
  • Niet Visual Studio Code: dat is een lichtere, aparte editor

Waarschuwing

Sinds augustus 2024 bestaat VS Community niet meer voor Mac. Mac-gebruikers werken met JetBrains Rider (gratis voor niet-commercieel gebruik, en via het Student Pack) of met VS Code plus de extensie C# Dev Kit (zo begin je). Of ze draaien Windows in een virtuele machine.

Een nieuw project: Console App

Kies “Create a new project” en let op:

Projecttype Console App met het groene C#-icoon (niet Visual Basic)

Duid zeker “Do not use top-level statements” aan

Laat “Solution name” met rust en vink niet “place solution and project in the same directory” aan

Rider of VS Code zonder dat vinkje? In de terminal: dotnet new console --use-program-main -n MijnProject

Belangrijk

Krijg je code te zien die er totaal anders uitziet? Dan koos je wellicht het verkeerde projecttype, de verkeerde taal, of vergat je de top-level-statements-checkbox.

De IDE-layout

  • Elk open bestand krijgt een eigen tab
  • De Solution Explorer toont alle bestanden van je project (niet wegklikken!)
  • De Copilot-AI rechts mag je meteen wegklikken

VS zonder Copilot.

Tip

Layout om zeep? “Window” - “Reset window layout” zet alles terug.

A.I. even parkeren

  • ChatGPT, Claude, Gemini & friends: ook VS heeft die kracht ingebouwd (IntelliCode en Copilot)
  • Verbluffend goed, maar voor een beginner af te raden

Je leert ook niet hoofdrekenen door vanaf dag 1 met een zakrekenmachine te werken.

Belangrijk

De programmeur van de toekomst moet béter zijn dan Copilot en ChatGPT. Want waarom zou de sector jouw taak anders niet gewoon door A.I. laten doen? In hoofdstuk 4 kijken we hoe je A.I. wél verantwoord inzet.

En hoe zet je die A.I. dan uit?

IntelliCode vult tijdens het typen hele lijnen voor je aan. Knap, en soms gewoon fout:

Na een lijn commentaar tovert IntelliCode zelf een WriteLine tevoorschijn.

IntelliCode

Tools - Options - zoek “IntelliCode” en zet daar de Copilot Completions, de Whole-Line Completions en de C# suggestions uit

Copilot

niet inloggen volstaat. Ben je toch ingelogd, zet dan in de Copilot-settings alle opties uit

Waarschuwing

Duikt er later toch lichtgrijze tekst op die je zelf niet typte? Dan sprong er na een update een optie terug aan. Loop die instellingen dan opnieuw door.

Console-applicaties

In en uit

Een console-applicatie toont alles in een klassiek shell-scherm: enkel tekst, geen afbeeldingen of geluid.

In het begin hebben al je applicaties deze opbouw.

  • Console.ReadLine() leest invoer van de gebruiker in
  • Console.WriteLine() zet tekst op het scherm

Je eerste programma

namespace Demo1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Belangrijk

Voorlopig negeren. De keywords namespace, class en static void Main lijken mysterieus. Dat geeft niet: schrijf voorlopig enkel tussen de accolades van Main. We pluizen ze uit vanaf hoofdstuk 7.

Je programma starten

Klik op de groene driehoek bovenaan (of kies Debug - Start Debugging). VS compileert je code en voert ze meteen uit.

Belangrijk

Moet ik niets bewaren? Neen: bij het starten bewaart VS al je aanpassingen automatisch. Kies nooit “Save as…”, want dan compileert je project mogelijk niet meer.

Even in het diepe

Ik gooi je heel even in het diepe deel van het zwembad, maar haal je er op tijd weer uit. Daarna spelen we rustig verder in het babybadje.

Onthoud nu alvast:

{ } Al je eigen code komt voorlopig tussen de Main-accolades

; Eindig elke lijn met een puntkomma

Code wordt van boven naar onder uitgevoerd

WriteLine: tekst op het scherm

Console.WriteLine() toont alle tekst tussen de aanhalingstekens:

Console.WriteLine("Hello World!");
Console.WriteLine("Hoi, ik ben het!");
Console.WriteLine("Wie ben jij?!");
Hello World!
Hoi, ik ben het!
Wie ben jij?!

De aanhalingstekens én de puntkomma achteraan zijn cruciaal.

Stagiair Steven

Steven laat zijn code volledig door A.I. schrijven en kijkt zelf amper na wat er staat. Zijn allereerste opdracht: toon “Hallo” op het scherm.

Console.Writeline(Hallo)

“Eén lijntje, klaar”, zegt hij trots. Er zitten drie fouten in.

Stagiair Steven: wat liep er mis?

Console.Writeline(Hallo)

Opmerking

  1. Writeline bestaat niet: C# is hoofdlettergevoelig, het is WriteLine
  2. Hallo staat zonder aanhalingstekens, dus C# zoekt een variabele met die naam
  3. De puntkomma op het einde ontbreekt

Console.WriteLine("Hallo");

ReadLine: input van de gebruiker

Console.ReadLine() leest wat de gebruiker typt tot die op enter drukt:

Console.WriteLine("Geef je naam?");
string naam = Console.ReadLine();
Geef je naam?
tim [enter]

We maken een geheugenplekje (variabele) naam van het type string en bewaren daarin wat de gebruiker invoert.

Waarschuwing

Toekenning gebeurt van rechts naar links: naam (links) krijgt de waarde van het stuk rechts van de =.

Aanhalingsteken of niet?

Zonder aanhalingstekens

Console.WriteLine(naam);

de inhoud van de variabele

tim

Mét aanhalingstekens

Console.WriteLine("naam");

letterlijk die tekst

naam

Write vs WriteLine

WriteLine

plaatst een enter aan het einde van de lijn

Console.WriteLine("Dag");
Console.WriteLine(naam);
Console.WriteLine("hoe gaat het?");
Dag
tim
hoe gaat het?

Write

doet dat niet: het volgende komt op dezelfde lijn

Console.Write("Dag");
Console.Write(naam);
Console.Write("hoe gaat het?");
Dagtimhoe gaat het?

Belangrijk

Spaties zijn ook tekens. Zet ze binnen de aanhalingstekens: "Dag ". Spaties buiten de quotes worden genegeerd.

C# negeert witregels

  • Spaties, enters en tabs buiten aanhalingstekens worden genegeerd
  • Je kan een heel programma op één lange lijn typen… maar doe dat niet

Eén lijn code. Cool? In sommige kringen. Onleesbaar? Zeker.

Variabelen in een zin plaatsen

Zet een $ vóór de string en de variabele tussen accolades:

Console.WriteLine($"Dag {naam}, hoe gaat het?");
  • $ zegt: wat tussen { } staat is code, geen tekst
  • Op de plek van {naam} komt de inhoud van de variabele
  • Dit heet string interpolation; in hoofdstuk 3 leer je er meer over
Dag tim, hoe gaat het?

Belangrijk

Vergeet je de $, dan staat {naam} letterlijk op het scherm, mét accolades: Dag {naam}, hoe gaat het?

Sneller typen met snippets

Je gaat heel vaak Console.WriteLine schrijven. Gelukkig zit er een snippet in VS:

cw + TabTab

En automagisch verschijnt er een verse lijn:

Console.WriteLine();

Fouten oplossen

100% foutloos

Je code compileert pas als ze 100% foutloos is: zolang er een fout in staat, komt er geen .exe uit de compiler.

  • Fouten krijgen een rode squiggly onderlijning
  • De statusbalk en de error list tonen al je fouten (laat die error list open staan)
  • Klik op een fout om meteen naar de juiste lijn te springen

Tip

Veel fouten ineens? Kijk net boven de eerste fout. Vaak ontbreekt daar gewoon een puntkomma.

Fouten en warnings

Fout (rood)

houdt je programma tegen

Warning (geel driehoekje in de error list, groene kronkel in je code)

is geen fout: je programma start gewoon

Warnings mag je voorlopig negeren, ook die bij elke Console.ReadLine(). De warnings-filter in de error list hoeft dus niet aan.

De error list.

De gevaarlijke dialog

Waarschuwing

Krijg je deze melding bij het starten? Klik nooit op “Yes” en vink de checkbox nooit aan.

Anders draait VS de laatste werkende versie, niet je huidige code met fouten. Je zit dan uren naar een “spook” te kijken.

Het lampje

  • Zet je cursor op een foutlijn, dan verschijnt soms een geel lampje
  • Klik erop voor een mogelijke oplossing

Het lampje: brenger der oplossingen.

Belangrijk

Wees kritisch: VS is niet alwetend en kan niet altijd raden wat je bedoelt.

Top 5 beginnersfouten

  1. Puntkomma vergeten
  2. Schrijffouten, bv. RaedLine i.p.v. ReadLine
  3. Hoofdlettergevoeligheid, bv. Readline i.p.v. ReadLine
  4. Per ongeluk een accolade verwijderd
  5. Code op een plek waar dat niet mag (enkel binnen Main)

Kleuren in de console

Console.BackgroundColor = ConsoleColor.Yellow;
Console.ForegroundColor = ConsoleColor.Black;
Console.WriteLine("Zwart op gele achtergrond");
Console.ResetColor();
  • ForegroundColor = letterkleur, BackgroundColor = achtergrond
  • Geldt voor alle tekst hierna; bestaande tekst verandert niet mee
  • ResetColor() zet alles terug naar de standaard
Zwart op gele achtergrond

Belangrijk

Hou het leesbaar en denk aan daltonisme: rood op groen was voor sommigen onleesbaar.

Conclusie

Programmeren = een dom maar gehoorzaam toestel exact vertellen wat het moet doen

Een goed algoritme (de juiste instructies in de juiste volgorde) komt vóór de code

De compiler vertaalt je C# naar machinetaal; .NET levert het framework

Met WriteLine, Write en ReadLine doe je in- en uitvoer, met $"...{naam}..." zet je een variabele middenin een zin

Kleur zet je met ForegroundColor en BackgroundColor, en zet je terug met ResetColor()

Lees je fouten, wees kritisch op het lampje, en klik nooit op “Yes” bij die dialog

Tip

Volgende halte: variabelen en datatypes. Daar gaan we het woord “variabele” zo vaak gebruiken dat je oren ervan gaan bloeden.

Meer weten

Kennisclips

Oefeningen H1 · Quizlet flashcards

Zie verder

Hoe doen andere programmeertalen hetzelfde? En een korte zoek-de-fout, om zo kritisch mogelijk naar code te leren kijken.

Zie verder: zoek de fout

Dit programma wil de gebruiker begroeten, maar het compileert niet. Wat loopt er mis?

Console.WriteLine("Geef je naam?");
string naam = Console.Readline()
Console.WriteLine($"Dag {naam}");

Opmerking

Twee klassiekers. Readline moet ReadLine zijn, want C# is hoofdlettergevoelig. En op het einde van die lijn ontbreekt de puntkomma.

Zie verder: wie komt er nog langs?

Taal Tekst op het scherm
Python print("C# rules")
JavaScript console.log("C# rules");
TypeScript console.log("C# rules");
Java System.out.println("C# rules");
C++ std::cout << "C# rules";

In een echt project bots je bijna nooit op één taal: een back-end in C#, een front-end in TypeScript, een scriptje in Python.

Zie verder: tekst tonen in Python

C#

namespace Demo1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Wie ben jij?!");
        }
    }
}

Python

print("Wie ben jij?!")

Geen namespace, class of Main, geen accolades en geen puntkomma: één lijn volstaat. Die extra structuur in C# krijgt verderop stuk voor stuk betekenis.

Zie verder: input in Python

C#

Console.WriteLine("Geef je naam?");
string result = Console.ReadLine();

Python

result = input("Geef je naam?")

De vraag staat meteen in input, dus geen aparte print nodig. En je geeft geen type op: Python leidt dat zelf af. C# is sterk getypeerd, dus daar leg je met string result vooraf vast welk soort data erin mag en controleert de compiler dat voor je.

Zie verder: compiled vs interpreted

JavaScript wordt niet vooraf gecompileerd maar lijn per lijn geïnterpreteerd terwijl het programma draait.

console.log("Dit verschijnt nog wel");
consle.log("Pas hier crasht het");
Dit verschijnt nog wel
ReferenceError: consle is not defined

De eerste lijn wordt netjes uitgevoerd, pas bij de typfout (consle) loopt het mis. C# weigert je programma te starten zolang er ergens een fout staat, dus die fout zie je al voor er één lijn gedraaid heeft.

Samenvattende poster

Een handige samenvattende poster (Opgelet: gemaakt m.b.v. ChatGPT Image Gen 2).