Specialisatie Software Languages en Software Engineering

Over

De SOFT-specialisatie dekt de programmeertalen, ontwikkeltools, en de abstractie- en compositiemechanismen die nodig zijn voor het bouwen en onderhouden van grootschalige toepassingen. De vakken variëren van theoretische grondslagen (bv. typetheorie in Haskell, formele bewijzen in Agda), over programmeertaal-paradigma's (bv. multi-core en gedistribueerd programmeren in Clojure en Scala) en implementatietechnieken (bv. compilers en virtuele machines) tot geavanceerde software engineering concepten (bv. quality assurance en security, meta-programmeren).

In Detail

De specialisatie "Software Languages & Software Engineering" (of kortweg SOFT) gaat helemaal over de kunst, wetenschap en techniek van software-ontwikkeling. Uiteraard hebben studenten die onze master betreden al uitstekende programmeervaardigheden. De SOFT specialisatie verbreedt en verdiept deze competentie tot het niveau van academische beheersing. Het is onze ambitie om eersteklas specialisten op te leiden op het gebied van "software-ontwikkelingstechnologie van de toekomst". Onze alumni hebben immers nog een carrière van meer dan 40 jaar voor de boeg! De SOFT-specialisatie richt zich daarom sterk op de wetenschappelijke aspecten van programmeertalen en software engineering, in plaats van de courante technologieën die vandaag trendy zijn, maar morgen misschien niet meer bestaan.

Als student in de SOFT-specialisatie bestudeer, gebruik en ontwerp je de modernste programmeertalen, krachtige tools voor softwareontwikkeling, en zeer innovatieve software frameworks. Afhankelijk van je persoonlijke interesses kan je ze bestuderen op conceptueel niveau, op technisch niveau of ––voor de diehards–– op theoretisch en / of implementatieniveau. Ons departement is goed uitgerust met state-of-the-art hardware om eender welke academische interesse diepgaand te verkennen (een gedistribueerde cluster, enkele many-core machines, smartphones, micro-controllers, Arduinos, Raspberry Pis, GPU's, ... ).

De SOFT-specialisatie bestaat uit drie verplichte vakken en een uitgebreide lijst keuzevakken waarmee studenten een persoonlijke nadruk op hun studies kunnen leggen. Studenten met interesse in fundamentele wetenschappelijke kennis over programmeertalen kunnen zich verdiepen in de semantiek van of in de implementatie van programmeertalen. 
Studenten die geïnteresseerd zijn in de kunst van programmeren kunnen expert worden in geavanceerde paradigma’s zoals gedistribueerd en multi-core programmeren. Studenten met interesse in de ontwikkeling van grootschalige systemen kunnen cursussen volgen over het analyseren van repositories en over softwarekwaliteit. Tot slot kunnen studenten met een brede interesse kiezen uit elk van deze cursussen.

 

Software Languages en Software Engineering is een specialisatie in onze 2 jaar durende masteropleiding in Computerwetenschappen van 120 ECTS. Studenten van deze specialisatie moeten slagen voor de zorgvuldig ontworpen kern van 30 ECTS die alle vier de specialisaties gemeen hebben, de 18 ECTS van vier verplichte vakken binnen deze specialisatie, minstens 12 ECTS van keuzevakken binnen de specialisatie, nog eens 30 ECTS van keuzevakken uit deze of een van de andere specialisaties, en voor een onderzoeksopleiding van 6 ECTS en een masterscriptie van 24 ECTS.

Hieronder volgt de lijst met verplichte cursussen:

Functional Programming (kern, 6 ECTS, sem 2)
Deze cursus is een geavanceerde cursus functioneel programmeren. De voertaal is Haskell. Het begin van de cursus gaat in sneltempo over de Haskell-taalfeatures en gaat ervan uit dat studenten reeds voldoende hoog niveau in een taal als Scheme halen. Studenten die geen bachelorcursussen aan de VUB hebben afgelegd dienen eerst Higher Order Programming te volgen. Topics uit de cursus zijn o.m. monads, applicative functors, STM, Hindley-Milner typering, IO, inductiebewijzen en parsercombinators.
Meta Programming and Reflection (kern, 6 ECTS, sem 2)
Deze cursus introduceert de verschillende principes en technieken van metaprogrammeren (d.w.z. programma's die programma's manipuleren). De cursus bespreekt een historisch perspectief van metaprogrammeren en reflectie, en stelt studenten bloot aan een aantal compile-time en runtime technieken voor metaprogrammeren. Hierbij komen twee belangrijke talen aan bod: Smalltalk en CLOS.
Cloud Computing and Big Data Processing (verdiepend, 6 ECTS, sem 1)
Cloud Computing en Big Data Processing is een geavanceerde tweedelige cursus die de basisconcepten en -technieken van deze domeinen introduceert en het gebruik ervan binnen gerelateerde raamwerken en hulpmiddelen motiveert en illustreert. Onderwerpen voor cloud computing zijn beveiliging, consistentie, reactiviteit en decentralisatie (blockchain). Big Data Processing-onderwerpen omvatten cluster computing, fouttolerantie en gegevenslocaliteit, partitionering en streaming. Kennis van JavaScript en Scala is een pluspunt.

Software Languages en Software Engineering is een specialisatie in onze 2 jaar durende masteropleiding in Computerwetenschappen van 120 ECTS. Studenten van deze specialisatie moeten slagen voor de zorgvuldig ontworpen kern van 30 ECTS die alle vier de specialisaties gemeen hebben, de 18 ECTS van vier verplichte vakken binnen deze specialisatie, minstens 12 ECTS van keuzevakken binnen de specialisatie, nog eens 30 ECTS van keuzevakken uit deze of een van de andere specialisaties, en voor een onderzoeksopleiding van 6 ECTS en een masterscriptie van 24 ECTS.

Hieronder volgt de lijst met keuzevakken binnen deze specialisatie:

Multicore Programming (verbredend, 6 ECTS, sem 2)
Of je nu een laptop, smartphone, of server in de cloud gebruikt, je machine bevat waarschijnlijk een multicore processor. Om deze hardware efficiënt te gebruiken zal je moeten leren hoe parallelle programma’s te schrijven. In het vak “Multicore Programming” bestuderen we verschillende programmeermodellen en -technieken voor parallellisme en concurrency, inclusief technieken die gebruikmaken van message passing zoals actors, geheugen dat veilig gedeeld wordt via transacties, en parallellisme op grote schaal op een GPU.
Software Quality Analysis (verdiepend, 6 ECTS, sem 2)
Deze cursus behandelt algoritmes die programma’s als data voorstellen en op die manier redeneren over hun kwaliteit. Tot de onderwerpen behoren statische analyses voor het detecteren van bugs, symbolische executie voor het genereren van tests, abstractie interpretatie voor het voorspellen van informatielekken, en programma-transformatie voor het moderniseren van programma’s. De hoorcolleges dekken de formele fundamenten van deze algoritmes, terwijl de werkcolleges rond concrete implementaties in Scala werken.
Distributed and Mobile Programming Paradigms (verbredend, 6 ECTS, sem 1)
Dit is een geavanceerde cursus voor gedistribueerde systemen, waarbij verschillende programmeermodellen en -technieken worden bestudeerd, met een focus op gedistribueerde applicaties die op mobiele hardware draaien (inclusief technieken voor message-passing, tuple-spaces, enz). De cursus gaat ook in op fundamentele concepten van gedistribueerde systemen zoals gedistribueerde synchronisatie, consistentie en replicatie. Studenten passen de verworven kennis toe door een mobiele applicatie voor Android te bouwen. De cursus veronderstelt een basiskennis van parallellisme en distributie.
Next Generation User Interfaces (verbredend, 6 ECTS, sem 2)
Na het volgen van deze cursus heeft de student inzicht in de interactieprincipes van nieuwe apparaten zoals smartphones, multi-touch tafels of op gebaren-interfaces, evenals de theoretische achtergrond voor deze interactieprincipes. De student kan reflecteren over de kwaliteiten en tekortkomingen van verschillende interactiestijlen, met de gebruiker als centrale component van het ontwerpproces van de interface. De theorie wordt toegepast in een groepsproject waarbij studenten hun individuele gebruikersinterface van de volgende generatie ontwerpen en ontwikkelen.
Compilers (verbredend, 6 ECTS, sem 2)
Na een algemeen overzicht waarin de diverse componenten van een compiler worden geillustreerd wordt dieper ingegaan op o.a. 1) Lexicale analyse d.m.v. reguliere expressies, eindige automaten, optimisatie van automata en scanner generatoren (flex); 2) Syntax analyse met behulp van LL en LR(1) parsers, en parser generatoren (bison); 3) Intermediate code generatie en optimisatie (basic block en globaal dmv answer set programma's), en code generatie en run-time organisatie.
Programming Language Engineering (verdiepend, 6 ECTS, sem 1)
Deze cursus overbrugt de kloof tussen conceptuele benaderingen van programmeertaalontwikkeling en hun praktische toepassingen in termen van efficiënte taalprocessoren. Deze cursus bestudeert een familie van virtuele machines die vertrekken van een eenvoudige mapping van een referentie-implementatie in Scheme naar een C-implementatie en behandelt geleidelijk aan zaken als geautomatiseerd geheugenbeheer, lexicale adressering, gedeeltelijke evaluatie, runtime-pools en optimalisatie in het algemeen.
Fundamentals of Programming Languages (verdiepend, 6 ECTS, sem 1)
Deze cursus gaat over theoretische aspecten van geavanceerde programmeertalen (typetheorie, Hoare-logica, afhankelijke types, ...) en het bewijzen van hun eigenschappen in de proof assistant Coq. De cursus wordt officieel gedoceerd aan de Universiteit Gent door een professor die vroeger aan de VUB werkte. We hebben één van de teleklaslokalen van de VUB geboekt zodat de VUB-studenten niet naar Gent hoeven te reizen. De cursus wordt in het Nederlands gegeven met Engelse cursusnota's en oefeningen.
Capita Selecta of Software Engineering (verbredend, 6 ECTS, sem 1+2)
Deze cursus gaat over het creëren van echt intelligente ontwikkeltools door geavanceerde machinale leer- en datamining-algoritmes toe te passen op software-engineeringgegevens. Onderwerpen zijn onder andere het voorspellen van de locatie van defecten in de broncode met behulp van classifiers zoals Support Vector Machines, het prioriteren van testgevallen met behulp van Genetische Algoritmen, en het blootleggen van herhaling in commit histories met behulp van Pattern Mining.
Capita Selecta of Programming Languages (verdiepend, 6 ECTS, sem 1+2)
In dit vak leren studenten werken met Agda, een dependent-getypeerde functionele programmeertaal die gebruikt kan worden om rigoureuze bewijzen te geven van eigenschappen van programma’s en zelfs van algemene wiskundige stellingen. Deze kennis wordt vervolgens toegepast in de studie van geverifieerde en veilige compilers. Het vak wordt gegeven op een hands-on manier en wordt geëvalueerd met een project.
Security in computing (verdiepend)
De student verwerft inzicht in de eigenschappen van bouwstenen voor beveiliging en kan deze toepassen om beveiligingsprotocollen te bouwen. De student leert cryptografische bibliotheken toe te passen om software beveiligingsproblemen aan te pakken. De student kan ook redeneren over de beveiligingskwetsbaarheden in geavanceerde softwaresystemen. De student verwerft inzicht in state-of-the art mechanismen om applicaties te beveiligen.

Software Languages en Software Engineering is een specialisatie in onze 2 jaar durende masteropleiding in Computerwetenschappen van 120 ECTS. Studenten van deze specialisatie moeten slagen voor de zorgvuldig ontworpen kern van 30 ECTS die alle vier de specialisaties gemeen hebben, de 18 ECTS van vier verplichte vakken binnen deze specialisatie, minstens 12 ECTS van keuzevakken binnen de specialisatie, nog eens 30 ECTS van keuzevakken uit deze of een van de andere specialisaties, en voor een onderzoeksopleiding van 6 ECTS en een masterscriptie van 24 ECTS.

Klik hier voor het officiële overzicht van dit programma met een volledige lijst van keuzevakken.

Het onderstaande keuzevak uit het bachelorprogramma kan enkel worden gekozen met goedkeuring van de examencommissie. Het is bedoeld als een "boost"-cursus voor studenten die een bachelorprogramma afwerkten aan een instelling met minder aandacht voor functioneel programmeren.

Higher Order Programming (boosting, 6ECTS, sem 1)
Dit is een ondersteunende cursus in functioneel programmeren die speciaal is ontworpen voor studenten die al goed kunnen programmeren in een mainstream taal met beperkte functionele kenmerken (bijv. Java, C #, Python, ...). We raden dit vak aan voor alle studenten van de specialisatie Software Languages ​​& Software Engineering met een niet-VUB BA achtergrond. Het vak kan in eenzelfde semester worden gecombineerd met Functional Programming.