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