RSS

Hoe begin je met Ada?

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 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 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. 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. 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). 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 van MIT is er nu ook een JavaScriptversie. 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 ook een hoop nuttige video’s. Met name de video’s van de AdaCore University zijn zorgvuldig en goed verzorgd.

Mocht je een goedgespekt studiepotje hebben dan kun je ook nog overwegen om de Pro Ada Training bij AdaCore te volgen. Verder is er ook nog een lijst van universiteiten 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 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.

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.