De eerste stappen

Zie Scherp Scherper - Hoofdstuk 1

Tim Dams

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.

  • Mythe: een programmeur schrijft de hele dag code
  • Echt werk = analyse van het probleem + een goed algoritme

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.

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# lijkt als twee druppels water op Java, en stamt af van C en C++

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

Opmerking

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

  • Je C#-code wordt eerst omgezet naar Intermediate Language (IL)
  • Bij het uitvoeren zet de CLR die IL Just-In-Time (JIT) om naar machinetaal
  • Daardoor kunnen .NET-talen (C#, F#, VB.NET) samenwerken met diezelfde bibliotheken

Naamgeving van .NET en C#

  • Sinds 2020: gewoon .NET gevolgd door een nummer (.NET 5, 6, … en intussen hoger)
  • 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.

Visual Studio: de IDE

  • We werken met Visual Studio Community 2026, gratis via visualstudio.microsoft.com/vs
  • VS is een IDE (Integrated Development Environment): debugger, code-editor en compiler in één
  • 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 VS Code of JetBrains Rider, of draaien Windows via 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

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.

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?!");

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.

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

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();

We maken een geheugenplekje (variabele) naam van het type string en bewaren daarin wat de gebruiker invoert. ReadLine leest tot de gebruiker op enter drukt.

Waarschuwing

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

Aanhalingsteken of niet?

Console.WriteLine(naam);
Console.WriteLine("naam");
  • Zonder aanhalingstekens (naam): de inhoud van de variabele
  • Mét aanhalingstekens ("naam"): letterlijk die tekst

De tweede lijn toont dus letterlijk het woord naam, niet wat de gebruiker typte.

Write vs WriteLine

  • WriteLine plaatst een enter aan het einde van de lijn
  • Write doet dat niet: het volgende komt op dezelfde lijn
Console.Write("Dag");
Console.Write(naam);
Console.Write("hoe gaat het?");

Resultaat: 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

Belangrijk

Vergeet je de $, dan staat {naam} letterlijk op het scherm, mét accolades.

Sneller typen met snippets

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

cw + tweemaal [tab]

En automagisch verschijnt er een verse lijn Console.WriteLine();.

Fouten oplossen

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.

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

Belangrijk

Hou het leesbaar en denk aan daltonisme: rood op groen las 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: 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

Python doet dit zo:

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

Python doet dit zo:

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");

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).