Functioneel programmeren in het inleidend informatica-onderwijs aan de Universiteit Twente

Auteur(s): 
ir. K.G. van den Berg, universitair docent, Universiteit Twente, faculteit Informatica
dr.ir. H.J.A. op den Akker, Universiteit Twente, faculteit Informatica
Samenvatting: 

Aan de Universiteit Twente wordt Functioneel Programmeren geïntroduceerd in het eerste trimester van het eerste jaar voor studenten in de opleidingen Informatica (INF) en BedrijfsInformatieTechnologie (BIT) van de faculteit Informatica. Als voorkennis wordt verondersteld een standaard VWO-pakket maar geen verdere programmeerervaring. Doelstelling van het vak is het leren ontwerpen van algoritmen voor de oplossing van praktische problemen en het aantonen dat de oplossing voldoet aan de specificatie. De programmeertaal in het vak is Miranda. Belangrijke kenmerken van het programmeren in deze functionele programmeertaal zijn:
. er zijn hogere orde functies: functies als argument en als functieresultaat
. de substitutie-eigenschap geldt zoals in de wiskunde
. er is een luie evaluatie strategie: expressies worden pas berekend wanneer de resultaten nodig zijn
. de taal heeft een type-systeem met polymorfe typen: het type van functies wordt afgeleid en (eventueel) vergeleken met het type dat door de programmeur is opgegeven
. er is een bibliotheek met een aantal krachtige standaard functies
. de syntax is eenvoudig: een grote expressieve kracht wordt gecombineerd met een grote leesbaarheid
. er wordt veelvuldig gebruik gemaakt van recursie
. abstracte data typen zijn eenvoudig te definiëren.
Het vak Functioneel Programmeren wordt in het tweede trimester gevolgd door Imperatief Programmeren, waarbij Modula-2 als programmeertaal is gekozen. Procedurele abstractie en data-abstractie worden uitstekend ondersteund in deze taal. Expliciet komt aan de orde het verschil met functioneel programmeren dat waarde-georiënteerd is, terwijl bij imperatief programmeren de geheugentoestand centraal staat met de toestandsveranderingen. Miranda expressies worden in pre- en postcondities gebruikt voor de specificatie van procedures in Modula-2. In het derde trimester worden (alleen voor studenten in de opleiding Informatica) in het vak Programmeertechnieken een aantal algoritmen behandeld, zoals back tracking en graaf-algoritmen, in zowel de functionele als imperatieve programmeertaal.
De typische verschillen van beide benaderingen worden expliciet gemaakt. In het eerste trimester van het tweede studiejaar worden in het vak Software Engineering opnieuw beide formalismen gebruikt voor het hele traject van de ontwikkeling van software. Miranda programma's worden gebruikt als executeerbare specificatie van de software en voor het maken van prototypes. Uiteindelijk worden Modula-2 programma's geschreven met een sterk modulair karakter, waarbij veelvuldig gebruik wordt gemaakt van abstracte data typen die in het prototype reeds zijn gedefinieerd. Voor beide soorten programma's worden testen uitgevoerd: unit tests en integratietests. De vakken zijn onderwijskundig uitvoerig geëvalueerd. De aanpak blijkt succesvol *). Eveneens is er onderzoek uitgevoerd naar de verschillen tussen het programmeren in een functionele en imperatieve programmeertaal. Op sommige punten blijken er verschillen te zijn in de resultaten voor studenten Informatica en BedrijfsInformatieTechnologie.

*)
Joosten, S.M.M. (Ed.), K.G. van den Berg, G.F. van der Hoeven (1993), Teaching Functional Programming to First-Year Students, Journal of Functional Programming, 3(1), 49 - 65.

Doelgroep: