Hoe begin je met Ada?
=====================
2022-02-07
Ik had een e-mailtje gekregen van een lezer over hoe je het
best met Ada kunt beginnen. Na mijn eerste blije reactie dat
er überhaupt zoiets is als een lezer van mijn blog heb ik
een lijstje gemaakt. Het leek me aardig om die hier in
aangepaste vorm te delen.
Hoe je het best een nieuwe programmeertaal kunt leren is erg
afhankelijk van je ervaring met andere talen en je
persoonlijke leerstijl. Zelf ken ik al een hoop talen dus
als ik een nieuwe taal wil leren ga ik eerst kijken in
hoeverre hij lijkt op een taal die ik al ken.
Programmeertalen zijn onder te verdelen in families en vaak
hebben ze een gemeenschappelijk paradigma dat gedeeld wordt
door broertjes en zusjes. Toen ik bijvoorbeeld Dart ging
leren omdat ik Flutter apps wou gaan maken, ging ik kijken
naar de overeenkomsten tussen Dart en andere talen. Dart
bleek op een soort combinatie van Java en JavaScript te
lijken met een sterke objectgeoriënteerde basis. Daarom kon
ik er vrij snel induiken en gaandeweg de specifieke
eigenaardigheden van de taal opzoeken. Als ik bijvoorbeeld
een taal als OCaml zou willen leren dan zou ik weer kunnen
terugvallen op mijn kennis van Haskell, omdat beide
functionele talen zijn en Haskell roots heeft in de
ML-familie.
Als je Ada wil leren en al bekend bent met een bestaande
taal dan is het dus sowieso handig om te kijken of die
kennis je misschien kan helpen. Ben je al bekend met C++ of
Java? Dan zijn er zelfs specifieke tutorials [1] die je
snel op weg kunnen helpen.
Ben je nog helemaal niet bekend met programmeren dan kan het
wat lastiger zijn. Maar aan de andere kant kan dit ook weer
een voordeel zijn. Een webprogrammeur die gewend is PHP en
JavaScript ranzing in elkaar te hacken zal aardig wat dingen
moeten afleren, want Ada neemt het vrij nauw en de compiler
zal fouten snel afstraffen.
De eerste stap die ik gewoonlijk neem bij het leren van een
taal is het doornemen van een goed boek. Het is daarbij
nooit mijn bedoeling om deze van kaft tot kaft te lezen,
maar het helpt me een beeld te vormen van wat er in die taal
allemaal mogelijk is. Ik hoef dan van mezelf niet te
onthouden hoe alles werkt, maar zolang ik weet welke
taalconstructen ik kan toepassen kan ik deze later altijd
opzoeken. Voor Ada heb ik allereerst het Wikibook [2]
gelezen en later heb ik ook Programming in Ada 2012 van John
Barnes gekocht. Dit boek is wel vrij prijzig en aangezien
het Wikibook van hoge kwaliteit is, is dat best een aardig
begin. Er is ook nog een Apress boek: "Beginning Ada
Programming: From Novice to Professional". Naar wat ik heb
begrepen heeft die een iets langzamere opbouw, wat nuttig
kan zijn als je nog helemaal geen programmeerervaring hebt.
Als je eenmaal een beetje op gang bent met Ada dan heb je
veel baat bij de officiële Reference Manual [3]. Ik heb deze
ook op papier gekocht en vind het prettig om hier de werking
van de standaardbibliotheek in op te zoeken. Daarnaast vind
ik het handig om de Ada specificatiebestanden [bij de hand
te hebben [4]. Deze bestanden geven een gecondenseerd
overzicht van de standaardbibliotheek zoals hij beschreven
staat in de reference manual.
Mocht je overigens helemaal blanko het programmeerveld
betreden dan is het misschien ook aardig om eerst wat
algemene kennis op te doen. Ik heb zelf erg genoten van
Structure and Interpretation of Computer Programs (SICP)
[5]. Dit boek is een klassieker, maar wel een tikje formeel
en hij is duidelijk gericht op eerstejaars studenten.
Desalniettemin geeft het je een heel goed beeld van
programmeren in het algemeen. Het laat je ook daadwerkelijk
nadenken voordat je als een malle gaat typen en dat is vaak
toch wel zo handig :-). Naast het originele boek en een
voortreffelijke serie video's [6] van MIT is er nu ook een
JavaScriptversie [6]. Dit is een veel modernere en erg
populaire taal, maar persoonlijk geef ik de voorkeur aan de
taal Scheme uit het originaal.
Naast boeken zijn er natuurlijk ook een hoop tutorials te
vinden. De tutorials op learn.adacore.com zijn erg goed. Die
leiden je stapsgewijs door de taal en voegen steeds
geavanceerdere delen toe. Je kunt bij Ada al vrij snel
productief worden, dus je zult merken dat je al na een paar
onderdelen aan de slag kunt en je eigen code kunt gaan
schrijven. En het schrijven van daadwerkelijke code is wat
mij betreft de echte crux van het leren van een taal. Ik heb
altijd gemerkt dat ik een taal het best leer door tegen
praktische problemen aan te lopen en die dan te moeten
oplossen. Wacht dus nooit te lang met het beginnen met een
een of andere projectje, hoe simpel dan ook. Als je geen
inspiratie hebt voor een projectje dan kun je ook altijd wat
problemen uit Advent of Code oplossen.
Voor de doorgewinterde kijkbuiskinderen zijn er naast
allerhande tutorials [7] ook een hoop nuttige video's. Met
name de video's van de AdaCore University [8] zijn
zorgvuldig en goed verzorgd.
Mocht je een goedgespekt studiepotje hebben dan kun je ook
nog overwegen om de Pro Ada Training [9] bij AdaCore te
volgen. Verder is er ook nog een lijst van universiteiten
[10] waar Ada onderdeel van een curriculum is. In hoeverre
deze lijst up to date is weet ik niet, maar in Nederland zal
je in elk bot vangen. Je zult dan moeten uitwijken naar een
van onze buurlanden voor het betere academische onderricht.
Ten slot wil ik je nog afraden om teveel af te gaan op
antwoorden die je vindt op stackoverflow.com. Ik weet dat
dit een hele populaire site is en je treft er regelmatig
copy-pastebare code aan die min of meer doet wat je wil (met
nadruk op "min"), maar het grote nadeel van SO is dat de
antwoorden meestal niet ingaan op het onderliggende principe
waar het probleem van de vraagsteller aan ten grondslag
ligt. Het kan daarom wel nuttig zijn voor wat praktische
voorbeelden, maar als je iets niet snapt, is het altijd veel
beter om door te zoeken totdat je begrijpt waar je
vastloopt. Mocht je toch graag voorbeeldgestuurd willen
werken dan kan ik Rosetta Code [11] aanraden. Op deze site
worden allerhande algemene programmeerproblemen opgelost in
heel veel verschillende talen. Zo krijg je een goed
overzicht van de aanpak die her en der wordt gebruikt en kun
je ook kijken hoe een Ada-programmeur bepaalde dingen
aanpakt. Daarnaast is het altijd aardig om gewoon code te
gaan lezen. Er staan veel Ada-projecten van hoge kwaliteit
op Github [12].
Ik hoop dat dit een nuttig overzicht is voor aanstormende
Ada-programmeurs. Als je aan de slag gaat dan hoor ik heel
graag welke aanpak voor jou het beste heeft gewerkt.
Hyperlinks:
[1]:
https://www.adacore.com/uploads_gems/Ada_for_the_C++_or_Java_Developer-cc.pdf
[2]:
https://en.wikibooks.org/wiki/Ada_Programming
[3]:
http://ada-auth.org/arm.html
[4]:
https://github.com/reznikmm/adalib
[5]:
https://mitpress.mit.edu/sites/default/files/sicp/index.html
[6]:
https://mitpress.mit.edu/books/structure-and-interpretation-computer-programs-1
[7]:
http://blog.projectpolymath.org/ada-2012-tutorial_01/
[8]:
https://www.youtube.com/watch?v=f6wneklxryk&list=PLkoa8uxigENkneyEEeDWVPgpMhPc9IJ7o
[9]:
https://www.adacore.com/events/pro-ada-training-eu-mar-2022
[10]:
https://www.adaic.org/learn/academia/universities/
[11]:
http://rosettacode.org/wiki/Rosetta_Code
[12]:
https://github.com/search?q=language%3AAda&type=Repositories&ref=advsearch&l=Ada&l=
-----------------------------------------------------------
Tags: ada, nederlands