Zie Scherp Scherper - Hoofdstuk 1
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
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
Tip
Blijf volhouden. Blijf oefenen. Vloek gerust af en toe. En vooral: geniet van het ontdekken van nieuwe dingen.
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.
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.
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.
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.
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 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
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.
De Deen die C# boven de doopvont hield bij Microsoft.
Tip
Als je één poster in je slaapkamer hangt, zou het die van Anders moeten zijn.
Allemaal gebouwd met C#, vaak via de Unity-engine.
Vereenvoudigd compiler-overzicht.
De kern: C#-code omzetten naar een uitvoerbaar bestand in machinetaal.
.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
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 …
Tip
Waarom deze geschiedenisles? Online bots je vaak op oudere namen. Anders raak je het noorden kwijt bij het opzoeken.
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.
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.
Tip
Layout om zeep? “Window” - “Reset window layout” zet alles terug.
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.
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.
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 inConsole.WriteLine() zet tekst op het schermBelangrijk
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.
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.
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
Console.WriteLine() toont alle tekst tussen de aanhalingstekens:
De aanhalingstekens én de puntkomma achteraan zijn cruciaal.
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.
Console.Writeline(Hallo)
Opmerking
Writeline bestaat niet: C# is hoofdlettergevoelig, het is WriteLineHallo staat zonder aanhalingstekens, dus C# zoekt een variabele met die naamConsole.WriteLine("Hallo");
Console.ReadLine() leest wat de gebruiker typt tot die op enter drukt:
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 =.
plaatst een enter aan het einde van de lijn
Belangrijk
Spaties zijn ook tekens. Zet ze binnen de aanhalingstekens: "Dag ". Spaties buiten de quotes worden genegeerd.
Eén lijn code. Cool? In sommige kringen. Onleesbaar? Zeker.
Zet een $ vóór de string en de variabele tussen accolades:
$ zegt: wat tussen { } staat is code, geen tekst{naam} komt de inhoud van de variabeleBelangrijk
Vergeet je de $, dan staat {naam} letterlijk op het scherm, mét accolades: Dag {naam}, hoe gaat het?
Je gaat heel vaak Console.WriteLine schrijven. Gelukkig zit er een snippet in VS:
cw + TabTab
En automagisch verschijnt er een verse lijn:
Je code compileert pas als ze 100% foutloos is: zolang er een fout in staat, komt er geen .exe uit de compiler.
Tip
Veel fouten ineens? Kijk net boven de eerste fout. Vaak ontbreekt daar gewoon een puntkomma.
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.
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.
Belangrijk
Wees kritisch: VS is niet alwetend en kan niet altijd raden wat je bedoelt.
RaedLine i.p.v. ReadLineReadline i.p.v. ReadLineMain)ForegroundColor = letterkleur, BackgroundColor = achtergrondResetColor() zet alles terug naar de standaardBelangrijk
Hou het leesbaar en denk aan daltonisme: rood op groen was voor sommigen onleesbaar.
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.
Kennisclips
Hoe doen andere programmeertalen hetzelfde? En een korte zoek-de-fout, om zo kritisch mogelijk naar code te leren kijken.
Dit programma wil de gebruiker begroeten, maar het compileert niet. Wat loopt er mis?
Opmerking
Twee klassiekers. Readline moet ReadLine zijn, want C# is hoofdlettergevoelig. En op het einde van die lijn ontbreekt de puntkomma.
| 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.
Geen namespace, class of Main, geen accolades en geen puntkomma: één lijn volstaat. Die extra structuur in C# krijgt verderop stuk voor stuk betekenis.
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.
JavaScript wordt niet vooraf gecompileerd maar lijn per lijn geïnterpreteerd terwijl het programma draait.
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.
Een handige samenvattende poster (Opgelet: gemaakt m.b.v. ChatGPT Image Gen 2).