Functioneel programmeren (4091)

  
Coördinerend verantwoordelijke :Prof. dr. Kris AERTS 


Onderwijstaal : Nederlands


Studiepunten: 4,0
  
Periode: semester 2 (4sp)
  
2de Examenkans1: Ja
  
Eindcijfer2: Numeriek
 
Volgtijdelijkheid
 
   Geen volgtijdelijkheid

Begincompetenties

Interesse in algoritmisch denken en programmeervaardigheden in eender welke programmeertaal zijn vereist om plezier uit de opleidingsonderdeel te kunnen halen.



Inhoud

Traditionele, imperatieve programmeertalen staan dicht, zelfs te dicht, bij de hardware waar ze op draaien en botsen daardoor snel op hun beperkingen omdat ze te veel focussen op hoe iets moet gebeuren i.p.v. wat er moeten gebeuren. Het paradigma van het declaratief programmeren laat ontwikkelaars toe om zich enkel bezig te houden met het wat ipv het hoe en verhoogt daardoor de productiviteit van de ontwikkelaar. In dit opleidingsonderdeel leren we de belangrijkste component van het declaratief programmeren, met name het functioneel programmeren. Oordeelkundige toepassing hiervan resulteert in programma's met 10x minder regels code en 3x snellere ontwikkeling met minder fouten. We gebruiken in de eerste plaats de programmeertaal Haskell, een taal die in de academische wereld ontwikkeld is, maar we werpen ook een blik op het paradigma van Functional Reactive Programming (FRP) en laten zien hoe Rust, de populaire, opkomende programmeertaal geïnspireerd is door functioneel programmeren en Haskell in het bijzonder.

Inhoud:

  • Kennismaking met Haskell
  • Recursief programmeren en staartrecursie
  • Hogere orde functies
  • Luie evaluatie (lazy evaluation)
  • Monadic programmeren
  • Functional Reactive Programming
  • Kennismaking met Rust vanuit een functioneel-programmeren-bril.

Omdat functioneel programmeren bijzonder geschikt is voor het programmeren van algoritmes, komt dit prominent aan bod en kijken we ook naar de tijdscomplexiteit van de implementatie van recursieve algoritmes in Haskell.



Organisatie- / Werkvormen
Organisatievormen  
Applicatiecollege  
Werkvormen  
Demonstraties  
Huiswerktaken  
Oefeningen  
Onderwijsleergesprek  
Workshop  


Evaluatie

Semester 2 (4,00sp)

Evaluatievorm
Schriftelijke evaluatie tijdens onderwijsperiode50 %
Behoud van deelcijfer in academiejaar
Voorwaarde behoud van deelcijfer in academiejaarVanaf 12/20
Casus
Huiswerktaken
Mondelinge toelichting
Schriftelijk examen50 %
Behoud van deelcijfer in academiejaar
Voorwaarde behoud van deelcijfer in academiejaarVanaf 10/20
Gesloten-boek
Open-boek
Open vragen
Evaluatievoorwaarden (deelname en/of slagen)
VoorwaardenDe student moet op zowel de evaluatie tijdens het academiejaar als op het examen minstens een delibereerbaar cijfer halen (minstens 8,0/20).
GevolgIndien de student op een van de delen minder dan 8,0/20 haalt, bestaat het punt uit het gewogen gemiddelde van beide delen met een maximum van 9/20.
Extra info

De schriftelijke evaluatie tijdens de lesperiode bestaat uit een project met enkele deelopgaven. Deze moet mondeling toegelicht worden met een sterke focus op het begrijpen van de code en het kunnen uitleggen van de waaroms in de geschreven code. De opdracht gewoon door genAI laten genereren zonder eigen inzicht is (zwaar) onvoldoende.

De student mag kiezen of die mondelinge toelichting tijdens de lesperiode of tijdens blok- of examenperiode plaatsvindt.


Tweede examenkans

Evaluatievorm tweede examenkans verschillend van eerste examenkans
Neen
 

Verplicht studiemateriaal
 

Het cursusmateriaal wordt via het elektronisch leerplatform verspreid.

 

Opmerkingen
 

Situering binnen het leerdomein/curriculum

Dit opleidingsonderdeel neemt binnen het leerdomein IT/software engineering een unieke rol in doordat hier een totaal ander programmeerparadigma aangebracht wordt dan in de andere opleidingsonderdelen, nl. functioneel programmeren waarbij neveneffecten niet toegelaten zijn tenzij op een heel strikte manier geprogrammeerd. Dit klinkt redelijk fundamenteel/fundamentalistisch, maar zorgt wel voor een verfrissende blik op je dagdagelijke programmeerpraktijk, met blijvende impact, ook buiten dit opleidingsonderdeel.

Relatie met het werkveld

De programmeertaal Haskell, die de hoofdmoot uitmaakt van dit opleidingsonderdeel wordt toegepast in een aantal hoog-innovatieve bedrijven, maar nog in te beperkte mate in Belgische bedrijven. De functionele programmeertechnieken hebben echter ook ingang gevonden in mainstreamtalen zoals C#, Java, C++, Javascript, Python, ... en daar is het al meer mainstream, maar dan vooral bij de betere programmeurs. In dit opleidingsonderdeel leren we hoe we de functionele stijl in Java kunnen toepassen, wat zeer relevant is voor het werkveld.

Relatie met onderzoek

Haskell is dé functionele taal binnen de academische wereld en wordt dus ook in dit opleidingsonderdeel behandeld. Verschillende van de bevindingen uit het functioneel programmeren zijn al doorgesijpeld naar de 'gewone' programmeertalen, maar er is nog steeds behoefte aan een vertaalslag naar bedrijven, en zeker in België. De onderzoeksgroep ACRO in Diepenbeek zet sterk in op deze vertaalslag en werkt ook aan het gebruik van (reactive) functionele talen als programmeertaal voor robotica-toepassingen.



Eindcompetenties
master in de industriële wetenschappen: informatica
  •  EC 
  • EC1 - De master in de industriële wetenschappen informatica kan in eigen professioneel denken en handelen -- met een gepaste ingenieursattitude en met continue aandacht voor de eigen vorming -- adequaat communiceren, effectief samenwerken, en rekening houden met de duurzame, economische, ethische, maatschappelijke en/of internationale context en is zich hierbij bewust van de impact op de omgeving. [people, data literacy and essential software skills]

     
  •  DC 
  • DC-M8 - kan kennis en vaardigheden kritisch evalueren om op basis hiervan eigen denken en handelen bij te sturen. (kritisch reflecteren)

      
  •  BC 
  • kan zijn denkwijze aanpassen om de overgang te maken van zijn 'oude' imperatieve vaardigheden naar het functioneel paradigma. 

     
  •  DC 
  • DC-M12 - geeft blijkt van een gepaste ingenieursattitude. (ingenieursattitude)

      
  •  BC 
  • verkiest een efficiënte codeerstijl
  •  EC 
  • EC3 - De master in de industriële wetenschappen informatica heeft gevorderde kennis en inzicht in principes en toepassingen van software engineering waaronder software development processen, software architecturen en software life cycle, en kan deze toepassen in complexe en praktijkgerichte probleemdomeinen en dit met aandacht voor de actuele technologische ontwikkelingen. [software engineering]

     
  •  DC 
  • DC-M1 - heeft kennis van de basisbegrippen, structuur en samenhang. (kennis bezitten)

      
  •  BC 
  • kent de fundamentele concepten van het functionele programmeerparadigma

    kent de syntax van Haskell en van de functionel e stijl van de andere programmeertalen die behandeld worden.
     
  •  DC 
  • DC-M2 - heeft inzicht in de basisbegrippen en methodes. (begrijpen)

      
  •  BC 
  • ziet in dat bepaalde keuzes van Rust geïnspireerd zijn door functioneel programmeren

     

     
  •  DC 
  • DC-M4 - kan informatie opzoeken, meten of verzamelen en correct refereren. (data verwerven)

      
  •  BC 
  • kan de tijdscomplexiteit van een algoritme of een implementatie berekenen
     
  •  DC 
  • DC-M5 - kan problemen analyseren, logisch structureren en interpreteren. (analyseren)

      
  •  BC 
  • kan een probleem zo (her)structureren, waar nodig in deelproblemen, zodat het handig via de functionele stijl opgelost kan worde n.
     
  •  DC 
  • DC-M6 - kan methodes selecteren en gefundeerde keuzes maken om problemen op te lossen of oplossingen te ontwerpen. (oplossen en ontwerpen)

      
  •  BC 
  • kan een ontwerp maken voor een probleem met inachtname van de filosofie van het functioneel paradigma

    kan de gepaste functionele structuren selecteren op gebied van gegevensstructuren, het evaluatiemechanisme als wat betreft slimme functie-compositie om een probleem doelgericht op te lossen.

    kan een functioneel reactief systeem ontwerpen.

     
  •  DC 
  • DC-M7 - kan geselecteerde methodes en hulpmiddelen aanwenden om oplossingen en ontwerpen te implementeren. (implementeren en operationaliseren)

      
  •  BC 
  • kan een werkende implementatie uitwerken in Haskell en in de andere programmeertalen die behandeld worden.
  •  EC 
  • EC5 - De master in de industriële wetenschappen informatica beheerst een geheel van gespecialiseerde kennis en vaardigheden voor het ontwerpen van modulaire, geïntegreerde software-systemen die op basis van data-verwerving en data-analyse intelligente beslissingen kunnen nemen, die resilient zijn (veilig, robuust en schaalbaar) en dit binnen een multidisciplinair project met een toegepaste onderzoeks- en/of innovatiecomponent. [intelligent & resilient systems]

     
  •  DC 
  • DC-M2 - heeft inzicht in de basisbegrippen en methodes. (begrijpen)

      
  •  BC 
  • begrijpt hoe de functionele stijl tot preciezere code kan leiden met een kleiner foutenrisico.

    begrijpt dat functioneel programmeren een rol kan spelen in doelgerichter aantonen van eigenschappen van algoritmes
     
  •  DC 
  • DC-M5 - kan problemen analyseren, logisch structureren en interpreteren. (analyseren)

      
  •  BC 
  • kan de werking van lazy evaluation in het algemeen en in concrete voorbeelden uitleggen.

    kan analyseren hoe een problee m opgelost kan worden volgens de methodiek van het functioneel paradigma.

    kan de geldigheid van de wetten van functors en applicative in concrete situaties aantonen.
     
  •  DC 
  • DC-M6 - kan methodes selecteren en gefundeerde keuzes maken om problemen op te lossen of oplossingen te ontwerpen. (oplossen en ontwerpen)

      
  •  BC 
  • kan hogere orde functies inzetten om een hoger niveau van abstractie en hergebruik van code te bekomen
     
  •  DC 
  • DC-M7 - kan geselecteerde methodes en hulpmiddelen aanwenden om oplossingen en ontwerpen te implementeren. (implementeren en operationaliseren)

      
  •  BC 
  • kan functioneel reactieve code schrijven.
 

bachelor in de industriële wetenschappen
  •  EC 
  • EC1 - De Bachelor in de industriële wetenschappen bezit algemeen wetenschappelijke en technologisch toepassingsgerichte kennis van de basisbegrippen, structuur en samenhang van het specifieke domein. (kennis bezitten)

     
  •  DC 
  • EA-INF 1.1 De student kent ontwerpprincipes en architecturen om software op een gestructureerde manier te ontwerpen en ontwikkelen.

      
  •  BC 
  • kent de fundamentele concepten van het functionele programmeerparadigma

    kent de syntax van Haskell en van de functionele stijl van de andere programmeertalen die behandeld worden.
  •  EC 
  • EC2 - De Bachelor in de industriële wetenschappen bezit algemeen wetenschappelijk en ingenieurstechnisch disciplinegebonden inzicht in de basisbegrippen, methodes, denkkaders en onderlinge relaties van het specifieke domein. (begrijpen)

     
  •  DC 
  • EA-INF 2.1 De student begrijpt waarom het nodig is om gepaste ontwerpprincipes en architecturen te gebruiken bij het ontwerp en de ontwikkeling van software.

      
  •  BC 
  • begrijpt hoe de functionele stijl tot preciezere code kan leiden met een kleiner foutenrisico.

    begrijpt dat functioneel programmeren een rol kan spelen in doelgerichter aantonen van eigenschappen van algoritmes
  •  EC 
  • EC4 - De Bachelor in de industriële wetenschappen kan doelgericht relevante wetenschappelijke en/of technische informatie opzoeken en verzamelen of efficiënt en nauwgezet de benodigde informatie meten en correct refereren. (data verwerven)

     
  •  DC 
  • 4.2 De student kan op gestructureerde wijze meetresultaten verzamelen.

      
  •  BC 
  • kan de tijdscomplexiteit van een algoritme of een implementatie berekenen
  •  EC 
  • EC5 - De Bachelor in de industriële wetenschappen kan niet-vertrouwde, domeinspecifieke problemen analyseren, opsplitsen in deelproblemen, logisch structureren, de randvoorwaarden bepalen en de gegevens op een wetenschappelijke manier interpreteren. (analyseren)

     
  •  DC 
  • EA-INF 5.1 De student kan voor een specifieke probleemstelling of toepassing analyseren op welke manieren de software ontworpen en gebouwd kan worden en alternatieven afwegen op basis van relevante criteria.

      
  •  BC 
  • kan een probleem zo (her)structureren, waar nodig in deelproblemen, zodat het handig via de functionele stijl opgelost kan worden.

    kan de werking van lazy evaluation in het algemeen en in concrete voorbeelden uitleggen.

    kan analyseren hoe een probleem opgelost kan worden volgens de methodiek van het functioneel paradigma.

    kan de geldigheid van de wetten van functors en applicative in concrete situaties aantonen.

  •  EC 
  • EC6 - De Bachelor in de industriële wetenschappen kan adequate oplossingsmethodes selecteren om niet-vertrouwde, domeinspecifieke problemen op te lossen en kan methodologisch te werk gaan in ontwerp en hierin gefundeerde keuzes maken. (oplossen en ontwerpen)

     
  •  DC 
  • 6.7 De student kan een modulair en onderhoudbaar ontwerp van software maken.

      
  •  BC 
  • kan een ontwerp maken voor een probleem met inachtname van de filosofie van het functioneel paradigma.

    kan de gepaste f unctionele structuren selecteren op gebied van gegevensstructuren, het evaluatiemechanisme als wat betreft slimme functie-compos itie om een probleem doelgericht op te lossen.

    kan een functioneel reactief systeem ontwerpen.

    kan hogere orde functies inzetten om een hoger niveau van abstractie en hergebruik van code te bekomen
  •  EC 
  • EC7 - De Bachelor in de industriële wetenschappen kan de geselecteerde methodes en hulpmiddelen innovatief aanwenden om domeinspecifieke oplossingen en ontwerpen planmatig te implementeren met aandacht voor de praktische en economische randvoorwaarden en bedrijfsgebonden implicaties. (implementeren en operationaliseren)

     
  •  DC 
  • 7.3 De student kan correcte en kwaliteitsvolle code schrijven aan de hand van een gepaste ontwikkel-, test- en onderhoudsstrategie. 

      
  •  BC 
  • kan een werkende implementatie uitwerken in Haskell en in de functionele stijl van de andere programmeertalen die behandeld worden.

    kan functioneel reactieve code schrijven.
  •  EC 
  • EC8 - De Bachelor in de industriële wetenschappen kan (onvolledige) resultaten interpreteren, kan omgaan met onzekerheden en beperkingen en kan kennis en vaardigheden kritisch evalueren om op basis hiervan eigen denken en handelen bij te sturen. (kritisch reflecteren)

     
  •  DC 
  • 8.3 De student kan door kritische reflectie eigen denken en handelen bijsturen.

      
  •  BC 
  • kan zijn denkwijze aanpassen om de overgang te maken van zijn 'oude' imperatieve vaardigheden naar het functioneel paradigma.
  •  EC 
  • EC12 - De Bachelor in de industriële wetenschappen kan toepassings- en oplossingsgericht, met het vereiste doorzettingsvermogen, professioneel en academisch handelen met oog voor realisme en efficiëntie en geeft blijk van een onderzoekende houding tot levenslang leren. (ingenieursattitude)

     
  •  DC 
  • 12.3 De student eigent zich een gepaste ingenieursattitude toe (nauwkeurig, efficiënt, veilig, resultaatgericht,...).

      
  •  BC 
  • verkiest een efficiënte codeerstijl.
 

master in de industriële wetenschappen: elektronica-ICT
  •  EC 
  • EC1 - De Master in de industriële wetenschappen: elektronica-ICT kan in eigen professioneel denken en handelen -- met een gepaste ingenieursattitude en met continue aandacht voor de eigen vorming -- adequaat communiceren, effectief samenwerken, en rekening houden met de duurzame, economische, ethische, maatschappelijke en/of internationale context en is zich hierbij bewust van de impact op de omgeving.

     
  •  DC 
  • DC-M8 - kan kennis en vaardigheden kritisch evalueren om op basis hiervan eigen denken en handelen bij te sturen. (kritisch reflecteren)

      
  •  BC 
  • kan zijn denkwijze aanpassen om de overgang te maken van zijn 'oude' imperatieve vaardigheden naar het functioneel paradigma.


     
  •  DC 
  • DC-M12 geeft blijkt van een gepaste ingenieursattitude. (ingenieursattitude)

      
  •  BC 
  • verkiest een efficiënte codeerstijl

  •  EC 
  • EC2 - De Master in de industriële wetenschappen: elektronica-ICT beheerst een geheel van kennis en vaardigheden omtrent het ontwerpen van software en analoge en digitale systemen en kan deze creatief concipiëren, plannen en uitvoeren als geïntegreerd deel van een methodologisch en projectmatig geordende reeks van handelingen binnen een multidisciplinair project met een belangrijke onderzoeks- en/of innovatiecomponent

     
  •  DC 
  • DC-M1 - heeft kennis van de basisbegrippen, structuur en samenhang. (kennis bezitten)

      
  •  BC 
  • kent de fundamentele concepten van het functionele programmeerparadigma.

    kent de syntax van Haskell en van de functionele stijl in de andere programmeertalen die behandeld worden.

     
  •  DC 
  • DC-M5 - kan problemen analyseren, logisch structureren en interpreteren. (analyseren)

      
  •  BC 
  • kan analyseren hoe een probleem opgelost kan worden volgens de methodiek van het functioneel paradigma.

     
  •  DC 
  • DC-M6 - kan methodes selecteren en gefundeerde keuzes maken om problemen op te lossen of oplossingen te ontwerpen. (oplossen en ontwerpen)

      
  •  BC 
  • kan een ontwerp maken voor een probleem met inachtname van de filosofie van het functioneel paradigma

     
  •  DC 
  • DC-M7 - kan geselecteerde methodes en hulpmiddelen aanwenden om oplossingen en ontwerpen te implementeren. (implementeren en operationaliseren)

      
  •  BC 
  • kan een werkende implementatie uitwerken in Haskell en in de andere programmeertalen die behandeld worden.

    kan functioneel reactieve code schrijven.


  •  EC 
  • EC7 - De Master in de industriële wetenschappen: elektronica-ICT heeft gespecialiseerde kennis en inzicht in principes en toepassingen binnen de domeinen van computertechnieken en algoritmen van programmeertalen, en kan hierin initiëren, plannen, kritisch analyseren en gefundeerd oplossen met oog voor dataverwerving en implementatie en met behulp van simulatietechnieken of geavanceerde tools, bewust van mogelijk fouten, praktische beperkingen en met aandacht voor actuele technologische ontwikkelingen.

     
  •  DC 
  • DC-M2 - heeft inzicht in de basisbegrippen en methodes. (begrijpen)

      
  •  BC 
  • begrijpt hoe de functionele stijl tot preciezere code kan leiden met een kleiner foutenrisico

    begrijpt dat functioneel programmeren een rol kan spelen in doelgerichter aantonen van eigenschappen van algoritmes.

    kan uitleggen hoe Rust geïnspireerd is door het functionele paradigma

     
  •  DC 
  • DC-M4 - kan informatie opzoeken, meten of verzamelen en correct refereren. (data verwerven)

      
  •  BC 
  • kan de tijdscomplexiteit van een algoritme of een implementatie berekenen.
     
  •  DC 
  • DC-M5 - kan problemen analyseren, logisch structureren en interpreteren. (analyseren)

      
  •  BC 
  • kan een probleem zo (her)structureren, waar nodig in deelproblemen, zodat het handig via de functionele stijl opgelost kan worde n.

    kan de werking van lazy evaluation in het algemeen en in concrete voorbeelden uitleggen.

    kan de geldigheid van de wetten van functors en applicative in concrete situaties aantonen.

     
  •  DC 
  • DC-M6 - kan methodes selecteren en gefundeerde keuzes maken om problemen op te lossen of oplossingen te ontwerpen. (oplossen en ontwerpen)

      
  •  BC 
  • kan de gepaste functionele structuren selecteren op gebied van gegevensstructuren, het evaluatiemechanisme als wat betreft slimme functie-compositie om een probleem doelgericht op te lossen

    kan hogere orde functies inzetten om een hoger niveau van abstractie en hergebruik van code te bekomen.

    kan een functioneel reactief systeem ontwerpen

 

  EC = eindcompetenties      DC = deelcompetenties      BC = beoordelingscriteria  
Aangeboden inTolerantie3
3de bachelor in de industriële wetenschappen - informatica J
master in de industriële wetenschappen: elektronica-ICT: verbreding J
master in de industriële wetenschappen: informatica: specialisatie J



1   Onderwijs-, examen- en rechtspositieregeling art. 12.2, lid 2.
2   Onderwijs-, examen- en rechtspositieregeling art. 15.1, lid 3.
3   Onderwijs-, examen- en rechtspositieregeling art. 16.9, lid 2.