De Masteropleiding Software Engineering aan de Universiteit van Amsterdam
De Studie De masteropleiding Software Engineering aan de Universiteit van Amsterdam is een Nederlandstalige, voltijdse opleiding van ´e´en jaar, die opleidt tot het Master of Science (MSc) diploma Software Engineering. Het doel van de opleiding is om studenten met de juiste vooropleiding in ´e´en jaar te leren om praktijkproblemen op het gebied van software engineering te analyseren en beoordelen, met behulp van actuele academische kennis. Aan het eind van de opleiding ben je in staat om de meest recente inzichten en best practices in software engineering toe te passen om complexe projecten tot een goed einde te brengen. Je bent ook in staat (als je dat zou willen) om als promovendus aan software engineering onderzoek bij te dragen. De studie richt zich op getalenteerde studenten met een Bachelor (WO of HBO) in de Informatiewetenschappen (in ruime zin) die bereid zijn zich gedurende een jaar volledig in te zetten voor een Master diploma. Als je kiest voor de ´e´enjarige Master Software Engineering kies je voor: 1
• een volwaardige Master of Science in ´e´en jaar, met een uitgekiend leermodel en zeer intensieve opleiding, • kennismaking met de belangrijkste technieken en best practices uit het vakgebied, • werken met innovatieve technologie, • begeleiding op maat door een zeer gemotiveerd docententeam met excellente wetenschappelijke reputatie en/of grote ervaring in het bedrijfsleven, • een interessant en bruikbaar programma dat je uitdaagt om het maximale uit jezelf te halen, • het doormaken van een enorme leercurve in ´e´en jaar. De studie is bedoeld voor mensen die een redelijke tot ruime ervaring hebben in het ontwikkelen van software. Basisvaardigheden wat betreft programmeren worden aanwezig verondersteld, dus als je nog moet leren programmeren is dit geen studie voor jou. De opleiding is wetenschappelijk beroepsgericht, hetgeen wil zeggen dat de stijl van werken academisch is, maar gericht op het leren onderzoeken en oplossen van concrete problemen uit het veld. Er wordt veel in groepen gewerkt, in per blok wisselende samenstelling. Het Master project dat de studie afsluit is echter individueel.
Ontstaan De masteropleiding Software Engineering is een gezamenlijke onderneming van de Universiteit van Amsterdam (UvA), de Hogeschool van Amsterdam (HvA) en de Vrije Universiteit, Amsterdam (VUA). De opleiding is in het cursusjaar 2003–2004 van start gegaan. In juli 2004 hebben de eerste twaalf studenten uit het eerste jaar de MSc titel behaald (waarvan twee cum laude). In augustus 2005 zwaaide de tweede lichting af: dertien studenten die in september 2004 aan de Masterstudie begonnnen waren kregen toen hun diploma (waarvan ´e´en cum laude). De huidige, derde, lichting (2005/2006) bestaat uit 27 voltijdstudenten en acht deeltijdstudenten. 2
Inhoud van de studie Software Engineering richt zich op het systematisch ontwerpen, bouwen en onderhouden van grote software systemen die op tijd en binnen de begroting opgeleverd worden, betrouwbaar en effici¨ent zijn, voldoen aan de wensen van de klant, en ook op langere termijn goed onderhoudbaar zijn. Als professioneel software engineer moet je ervoor zorgen dat het software systeem steeds wordt aangepast aan de veranderende wensen en eisen van de klant en dat de software parallel loopt, en blijft lopen, met de bedrijfsprocessen van de klant.
Vakkenpakket Het rooster voor het cursusjaar 2005/2006 is te vinden op http://www.science.uva.nl/onderwijs/studieprogramma/roosters2005/ index.htm. De cursussen die worden gegeven zijn: Software Evolution Hoe evolueert software over een aantal jaren, en hoe 3
kun je software die al een aantal jaren oud is analyseren en renoveren? Software Architecture Hoe maak je een goed design voor een groot systeem, en wat voor design principes zijn er? Het gaat hier met name om het communicatieproces met belanghebbenden bij het softwareontwikkeltraject, dat de vroegste beslissingen in het traject moet ondersteunen. Software Testing Hoe organiseer je het testen van een groot systeem? Requirements Engineering Hoe stel je het pakket van eisen op waar een op te leveren systeem aan zal moeten voldoen? Software Construction Hoe organiseer je het constructieproces van een groot systeem? Software Process Hoe hanteer je de managementsproblemen rond het produceren van een nieuw software systeem en het invoeren van dat systeem in een bedrijf? De omschrijvingen in de studiegids (hieronder overgenomen) geven een indruk van wat deze vakken inhouden: Software Evolution Het leerdoel van deze cursus is als volgt in kernwoorden samen te vatten: software maintenance, configuratie management, reverse engineering, re-engineering, software renovatie, maintenance processes. Wil een software systeem zijn waarde voor de gebruikers behouden, dan is het van groot belang dat het systeem mee kan evolueren met de veranderende eisen die de business en de technologie stellen. Vaak zal het gaan om veranderingen die plaats vinden terwijl het systeem al in productie is. In het vak software evolutie worden factoren behandeld die flexibiliteit en evolutie bemoeilijken, en technieken om starre systemen geschikt te maken voor verandering. Als je dit onderdeel hebt afgesloten ben je in staat om een keuze te maken uit verschillende technieken om systemen te analyseren en meer flexibel te maken. Inhoud van de cursus: In het practicum doe je ervaring op met technieken voor analyse en transformatie van software systemen. Bovendien word je geconfronteerd met een bestaand, groot systeem, om zo ervaring op te doen met 4
de reverse engineering technieken die je geleerd hebt. Open source projecten (Linux, Source Forge) dienen als voorbeeld. Daarnaast zul je door middel van een selectie van artikelen kennis nemen van de state of the art op onderzoeksgebied met betrekking tot software maintenance, reverse engineering, re-engineering en software renovatie. Software Architecture Leerdoel: Na dit onderdeel ben je in staat om: systeemeisen te vertalen in een systeemarchitectuur; afwegingen tussen conflicterende eisen zorgvuldig te maken en te motiveren; de kwaliteit van een voor een bepaald systeem gekozen architectuur te beoordelen; een architectuur te documenteren voor verschillende belanghebbenden, met verschillende prioriteiten. Inhoud in kernwoorden: product families, software product lines, architectural decisions, rationale behind architectural decisions, architecture trade-off analysis, viewpoints, architectural evolution. In dit vak wordt ingegaan op fundamentele ontwerpbeslissingen die er voor moeten zorgen dat een software systeem gedurende een lange periode in staat is te voldoen aan de gestelde eisen. Dit betreft de opdeling van een systeem in componenten, de relaties tussen deze componenten, de kwaliteitseisen die aan de individuele componenten en aan het systeem als geheel gesteld dienen te worden, en afwegingen die gemaakt dienen te worden tussen conflicterende eisen. Onderwijsvorm: In het practicum beschrijf je een gedistribueerde, gelaagde architectuur ten behoeve van uiteenlopende belanghebbenden. Tevens voer je een analyse uit van de mate waarin de architectuur aan verschillende kwaliteitseisen voldoet. Studiemateriaal: [2]. Software Testing Leerdoel: Als je dit onderdeel hebt afgesloten ben je in staat om: kwaliteitseisen op te stellen; een overzicht te geven van diverse testtechnieken (proces en produkt); een keuze te maken uit testtechnieken; testtechnieken in te voeren in een bestaande softwareontwikkellijn. Inhoud in kernwoorden: kwaliteitseisen, verbeterplan, test planning, test case reductie, coverage, black box testing,white box testing, unit and integratie testing, acceptatie testing, quality assurance, test-first design, test-first de5
velopment, dynamische en statische procesverbetermodellen. Het testen van software systemen is van groot belang om te verifi¨eren dat een systeem het gewenste gedrag vertoont en te valideren dat het systeem beantwoordt aan de requirements. Door het testen nauw te integreren met de overige stappen in het softwareontwikkelingsproces (van requirements analyse tot implementatie) is het mogelijk kwalitatief hoogwaardige software te ontwikkelen. Studiemateriaal: [23]. Achtergrond: [17]. Requirements Engineering Het succes van een software-systeem staat of valt met de correcte interpretatie van de wensen van de toekomstige systeemgebruikers. In dit vak wordt ingegaan op een aantal specifieke technieken om deze wensen te destilleren, te formuleren in use cases, en controleerbaar te maken middels functionele acceptatietests. Als je dit onderdeel hebt afgesloten ben je in staat om: in overleg met beoogde eindgebruikers systeemrequirements op te stellen in een Programme Of Requirements (POR); problemen in interpretatie, nauwkeurigheid en haalbaarheid van het POR vroegtijdig te herkennen en te onderscheppen; de plaatsing en het belang van het POR in een professioneel domein te herkennen en te implementeren. Aanbevolen literatuur: [13, 19]. Software Construction
Leerdoel: Als je dit onderdeel hebt afgesloten ben je in staat om: een audit uit te voeren van een software-systeem; coding standards te (be-)schrijven en in te voeren in een organisatie; adequate software constructie gereedschappen te selecteren en toe te passen (make, IDE’s, configure-scripts, etc); 6
programma generatoren te gebruiken om sneller nieuwe features in software te kunnen implementeren en de efficiency van het software ontwikkel proces te vergroten; component based software engineering. Inhoud in kernwoorden: inspecties, coding standaards, pair programming, build processes, configuratie management, software quality, reliability, design by contract, programma generatoren. Het vak software constructie houdt zich bezig met methoden en technieken die specifiek gericht zijn op de programmeer- en implementatie-activiteiten van een software engineering project. Het is de volgende fase in het programmeren. Voorbeelden van zulke activiteiten zijn coding en debugging, detailed design, unit testing, reviews op andermans code, optimalisaties, component integratie, enzovoort. Onderwijsvorm: In het practicum worden met name de aspecten van component based software engineering en programma generatoren belicht. Studiemateriaal: [9, 16]. Software Process Leerdoel: Na het volgen van dit vak ben je in staat om: een overzicht te geven van invloedrijke software proces modellen; een keuze te maken uit deze modellen voor een specifiek project; een proces aan te passen aan de specifieke eisen die in re¨ele projecten gesteld worden, en de effectiviteit van het in een lopend project gebruikte ontwikkelingsproces te beoordelen. Inhoud in kernwoorden: Software Development Methods, agile methods, extreme programming, software process improvement, project management, planning and estimation, software metrics. In dit vak wordt de nadruk gelegd op de samenhang tussen de eerder opgebouwde kennis. In het bijzonder wordt gekeken naar de manier waarop de eerder geleerde methoden en technieken gentegreerd kunnen worden tot een samenhangend software proces. Tevens worden de in de cursus behandelde onderwerpen in een bredere context geplaatst, gerelateerd aan de praktijk. Onderwijsvorm: In het practicum voer je projectvoorbereidingen uit, met verschillende methodes en parameters. Ook word je geconfronteerd met realistische probleemsituaties (situatieschetsen en rollenspellen). Studiemateriaal: [3, 4]. Aanbevolen: [14, 10, 15].
7
Studielast De studielast wordt uitgedrukt in ECTS (European Credit Transfer System) punten, waarbij ´e´en studiepunt overeenkomt met 28 uren studie. Een heel studiejaar kent in dit systeem 60 studiepunten. Het studiejaar is opgedeeld in twee semesters. Het eerste semester is opgedeeld in drie perioden van respectievelijk 8, 8, en 4 weken. Het tweede semester bestaat uit een onderwijsperiode van 8 weken gevolgd door een afstudeerproject van 12 weken. Een semester heeft een studielast van 30 studiepunten. In de praktijk blijkt dat deze studielast zodanig is dat bijbanen moeilijk met de studie vallen te combineren. Ook een eigen bedrijfje runnen naast de studie is bezwaarlijk. Het ´e´enjarige master-traject is echt een voltijdse opleiding; erbij werken is nauwelijks mogelijk. Voor degenen die de opleiding naast een deeltijdbaan willen volgen wordt er, vanaf 2005/6, ook een deeltijd-variant aangeboden, met een studieduur van twee jaar.
Leermodel Om je in ´e´en jaar te kunnen ontwikkelen tot Master Software Engineering is effectief studeren van groot belang. Sleutel daartoe is het verwerven van de juiste studiehouding en het verbeteren van je leervaardigheden. De opleiding hanteert hiertoe het leermodel dat in Figuur 1 is weergegeven. Het model bestaat uit een fase waarin gewerkt wordt aan de juiste studiehouding, een fase waarin basisvaardigheden worden aangeleerd, een automatiseringsfase waarin deze basisvaardigheden herhaald en geconsolideerd worden, en tenslotte een fase van zelfontplooiing waarin je de aangeleerde vaardigheden naar eigen inzicht dient toe te passen en verder te ontwikkelen. De begeleiding (in groepen en individueel) start zeer intensief en neemt geleidelijk af. Vaardigheden die je aanleert zijn onder meer: • Verwerven van relevante informatie, • analyseren en komen tot werkbare oplossingen, • theorie toepassen in de praktijk, 8
Figuur 1: Leermodel Masteropleiding Software Engineering • samenwerken, • helder schriftelijk communiceren, • effici¨ent werken met relevante technologie. Vaardigheden aanleren is een kwestie van trainen. Die training vindt deels plaats in groepsverband, deels individueel. De opleiding zorgt voor inzicht bevorderende en praktijkgerichte opdrachten op maat en voor directe feedback. Er wordt gewerkt in blokken van vier weken. In elk blok dient een minionderzoek te worden uitgevoerd waarover een verslag wordt geschreven. Doordat gewerkt wordt in kortlopende blokken breng je het geleerde direct in de praktijk, waarbij herhaling zorgt voor routine en goede feedback voor gelegenheid om je te verbeteren. In de loop van de maanden worden de opdrachten steeds vrijer, en verschuift de begeleiding van structurerend naar coachend. In de laatste fase werk je vooral individueel, bepaal je zelf de structuur en zorgt de opleiding voor feedback op ingeleverde documenten. Gezien de beperkte tijd wordt strikt de hand gehouden aan deadlines.
9
Curriculum-opzet In het eerste semester worden (in de voltijdse variant) per blok steeds twee vakken gegeven. In het laatste blok van het eerste semester wordt begonnen met de voorbereiding van het Master project en de daartoe benodigde literatuurstudie. Het is de bedoeling dat in deze periode het plan voor het Master project wordt opgesteld. Het tweede en het derde blok van het tweede semester zijn geheel gewijd aan het Master project. De meest vakken worden gegeven in de vorm van een hoorcollege (2 contacturen), prakticum (8 contacturen) en een werkcollege (2 contacturen) waarin recente literatuur of een leerboek bestudeerd wordt. Dit komt neer op 12 contacturen per vak. Reken in totaal (twee vakken per blok) op 24 contacturen en circa 12 uren zelfstudie en groepswerk per week, dus 36 uur per week. Als onderdeel van het studieprogramma wordt in aparte papersessies het kritisch verwerken van wetenschappelijke literatuur getraind, Ook is er elke week een voortgangsbespreking van een uur met alle studenten. In de deeltijd-variant wordt er per blok slechts ´e´en vak gevolgd. In de deeltijdvariant komt de studiebelasting per week neer op circa 12 contacturen en 6 uur zelfstudie. Algemeen dagschema Maandag: Vak 1 9.00 – 11.00 Hoorcollege 11.15 – 17.00 Werkcollege/practicum Dinsdag: Vervolg Vak 1 9.00 – 14.45 Werkcollege/practicum 15.00 – 17.00 Hoorcollege Woensdag: Vak 2 9.00 – 11.00 Hoorcollege 11.15 – 17.00 Werkcollege/practicum 10
Donderdag: Vervolg Vak 2 9.00 – 14.45 Werkcollege/practicum 15.00 – 17.00 Hoorcollege Vrijdag: Paper Sessies 9.00
– 11.00 Bespreking literatuur in groepen
Deeltijdstudenten volgen maar ´e´en van de twee vakken; al hun activiteiten zijn hetzij op de maandag en dinsdag, hetzij op de woensdag en donderdag geconcentreerd. Voortgangsbespreking voor voltijd-studenten: op dinsdag of donderdag, van 14.00 tot 14.45, v´o´or het hoorcollege. Voortgangsbespreking voor deeltijd-studenten: op een van de collegedagen, om 17.00 uur. Jaaroverzicht voltijdse opleiding, studiejaar 2005/6 Eerste semester weken 36–43 44-51 2–5
periode 5-9-05 – 28-10-05
dagen ma & di wo & do 31-10-05 – 23-12-05 ma & di wo & do 9-1-06 – 3-2-06 ma & di wo & do
vakken Software architectuur Software evolutie Requirements engineering Software testing Software construction Voorbereiding Master Project
Tweede semester weken periode dagen 6–13 6-2-66 – 31-3-06 ma & di wo do 14–25 3-4-06 – 23-6-06
11
vakken Software process Software construction Voorbereiding Master Project Stage en scriptie
Jaaroverzicht deeltijdopleiding (eerste jaar), studiejaar 2005/6 Eerste semester weken periode 36–43 5-9-05 – 28-10-05 44-51 31-10-05 – 23-12-05 2–5 9-1-06 – 3-2-06
dagen vakken ma & di Software architectuur ma & di Requirements engineering ma & di Software construction
Tweede semester weken 6–13 14–21 22–25
periode 6-2-66 – 31-3-06 3-4-06 – 26-5-06
dagen vakken ma & di Software process ma & di Software construction literatuuronderzoek 29-5-06 – 23-6-06 ma & di Voorbereiding Master Project
Vooruitblik naar 2006/7 voor deeltijdopleiding, tweede jaar Eerste semester aantal weken 8 8 4
vakken Software evolutie Software testing Voorbereiding Master Project Tweede semester
aantal weken vakken 20 Stage en scriptie Bij de stage en scriptie wordt de regel gehanteerd dat de stage niet in het eigen bedrijf kan plaatsvinden.
Het Master project De afsluiting van de studie wordt gevormd door het Master project. Dit project heeft vier weken voorbereidingstijd in het eerste semester (planning 12
en literatuurstudie), en wordt uitgevoerd in twaalf weken in het tweede semester. Het master project omvat altijd een onderzoeksstage bij een bedrijf of een kennisinstelling, en het wordt afgerond met een korte scriptie. Als master student zoek je zelf een stageplaats (waarbij de opleiding desgewenst bemiddelt) en schrijf je zelf een projectplan. Dit plan wordt apart beoordeeld, en het is niet mogelijk aan het Master project te beginnen zonder een vooraf goedgekeurd plan. Bedrijven en kennisinstellingen waar in 2003/2004 stages werden uitgevoerd zijn onder meer: Getronics, Ordina, het Centraal Bureau voor de Statistiek, AMB i.t. (een bedrijf dat timing en scoring systemen ontwikkelt voor race-sporten), het Centrum voor Wiskunde en Informatica, en de Hogeschool van Amsterdam. Een greep uit de stagebedrijven in 2004/2005: Shell, AMC, Technische Universiteit Delft, PinkRoccade Civility, Imtech ICT Information Technology, Philips Medical Systems, Geodan, en Het Glazen Huis Business Consultancy. Electronische versies van de Master scripties zijn te vinden op http://www. cwi.nl/~paulk/thesesMasterSoftwareEngineering/index.html.
Doelstellingen en eindtermen van de opleiding Algemene doelstellingen van de opleiding Software Engineering. Een software engineer met een master diploma: 1. heeft op het gebied van software engineering inzicht in de belangrijkste technologische ontwikkelingen en hieraan gerelateerde wetenschappelijke resultaten; 2. is in staat dit inzicht in te zetten ten behoeve van innovatie en modernisering van software engineering; 3. kan software engineering-problemen aanpakken met behulp van abstractie en modelvorming en is in staat de oplossingen zowel in algemene termen als in abstracte en technische termen te formuleren; 4. is getraind in best practices en methoden en technieken op het terrein van software engineering;
13
5. is in staat zich zowel mondeling als schriftelijk helder uit te drukken, is vaardig in het presenteren voor een groep mensen, en weet problemen en oplossingen op het juiste abstractieniveau uit te leggen; 6. kan goed in teamverband functioneren. De master is vaardig in het overleggen in kleine en grote groepen over technische thema’s en is goed in staat technische werkzaamheden te verdelen over een groep mensen en deze werkzaamheden op elkaar af te stemmen; 7. heeft zich rekenschap gegeven van de maatschappelijke, ethische en sociale aspecten van software engineering. Specifieke eindtermen van de opleiding Software Engineering. Een software engineer met een master diploma: 1. is vaardig in het exploreren (zoeken, lezen en beoordelen) van de vele vormen, zowel wat betreft inhoud als medium, van documentatie en literatuur op het gebied van de software engineering; 2. beheerst methoden en technieken om een software systeem mee te laten evolueren met de veranderende eisen die aan dat systeem worden gesteld; 3. is in staat kwalitatief hoogwaardige systemen te ontwikkelen door het systematisch gebruik van methoden en technieken voor validatie; 4. beheerst een scala aan testmethoden en technieken, weet wanneer welke techniek ingezet dient te worden, en heeft hiermee ook praktische ervaring opgedaan; 5. is in staat richtlijnen op het gebied van softwareconstructie op te stellen, bijvoorbeeld ten aanzien van coding standards, design patterns, herstructurering, configuratie management, en build processen; 6. is in staat systeemeisen te vertalen in een systeemarchitectuur en afwegingen tussen conflicterende eisen zorgvuldig te maken en te motiveren; 7. is in staat wensen van systeemgebruikers om te zetten in specifieke requirements, objectmodellen en acceptatietests;
14
8. is op de hoogte van diverse software procesmodellen en kent de vooren nadelen van deze. Hij is in staat een ontwikkelingsproces te kiezen voor een specifiek project, en het geselecteerde proces optimaal af te stemmen op de eisen die door dat project worden gesteld; 9. heeft voldoende technische kennis en intellectuele capaciteiten om na enige jaren en ervaring een leidinggevende rol in het werkveld van de software engineering te kunnen spelen; 10. is in staat een visie te ontwikkelen op het gebied van software engineering en zodoende bij te dragen aan de evolutie en innovatie van concrete software engineering projecten.
Toelating Voor toelating tot de masteropleiding Software Engineering komt in principe in aanmerking: 1. Iedere bachelor Informatica of Technische Informatica van een Nederlandse universiteit. 2. Eenieder die een buitenlandse kwalificatie vergelijkbaar met eis 1 heeft, op voorwaarde dat het Nederlands en Engels actief en passief voldoende worden beheerst. De beoordeling van buitenlands diploma’s zal geschieden aan de hand van criteria en procedures vastgesteld door het Nuffic. 3. Iedere HBO Bachelor Informatica (HIO), Technische Informatica, Information Engineering, of Elektrotechniek met afstudeerrichting Computerkunde, met eindcijfer gemiddeld 7 of hoger die een pakket heeft gevolgd dat de volgende of hiermee vergelijkbare vakken omvat: (a) Algoritmen en datastructuren, (b) Systeemarchitectuur, (c) Besturingssystemen, (d) Programmeertalen, (e) Software engineering. 4. Eenieder die (een substantieel deel van) een gerelateerde opleiding succesvol heeft afgerond en die tijdens een assessment procedure aantoont over voldoende kwaliteit, motivatie en voorkennis te beschikken om de opleiding succesvol af te ronden. De genoemde procedure is nader vast te stellen door de Toelatingscommissie. 15
5. Elke aanvraag tot toelating wordt getoetst door de Toelatingscommissie. Zonder toestemming van de Toelatingscommissie heeft een kandidaat geen toegang tot de opleiding Om het gestelde in 4 en 5 nog eens te parafraseren: Bij twijfel over het vakkenprogramma van de vooropleiding vindt een gesprek plaats tussen kandidaten voor de opleiding en opleidingsco¨ordinatoren, om na te gaan of de opleiding een goede keuze is voor de kandidaat. Hierbij kan de kandidaat gevraagd worden voorafgaand aan dit intake gesprek programmacode op te sturen ter bespreking.
Noodzakelijke achtergrondkennis Er bestaan plannen om in de nabije toekomst een schakelprogramma aan te gaan bieden om defici¨enties in de vooropleidingen aan te vullen, maar zover is het nog niet. Hier volgt een beknopte samenvatting van de achtergrondkennis die voor de opleiding wordt verondersteld, met literatuurverwijzingen, bedoeld voor wie op eigen houtje kennislacunes wil dichten. Wie bij deze zelfstudie graag begeleiding heeft gelieve contact op te nemen met prof. dr. Jan van Eijck, email
[email protected]. Basis discrete wiskunde Kennis van verzamelingen, relaties, eenvoudige combinatoriek. Zie bij voorbeeld [22]. Basis logica Kennis van propositie- en predikatenlogica. Zie bij voorbeeld [5], dat in electronische vorm kan worden opgehaald van www.cwi.nl/ ~jve/lai/. Basis formele taaltheorie Reguliere talen, eindige automaten, contextvrije regelsystemen, ontleden, ontleder-generatie. Zie bij voorbeeld [1] (eerste vier hoofdstukken). Basis datastructuren en algoritmiek Elementair begrip van arrays, gelinkte lijsten, dubbel gelinkte lijsten, stapels, wachtrijen, bomen, enzovoort, en van bewerkingen daarop. Zie bij voorbeeld www.informatics. susx.ac.uk/courses/dats/dats.html voor een behandeling van datastructuren en algoritmen in Java. Of voor wie liever een echt boek 16
heeft: [12] of (moeilijker) [8]. Je wordt ook geacht iets te weten van (eenvoudige) complexiteitsanalyse van algoritmen. Zie daarvoor bij voorbeeld [8] of [18]. Compilerbouw Scannen, bouwen van ontleedbomen, type checking, code generatie. Zie bij voorbeeld [1] (hoofdstukken vijf tot en met negen). Inleiding software engineering Basiskennis over architectuur, programmeerstijlen, ontwerp aan de hand van een pakket van eisen, enzovoort. Zie bij voorbeeld [21] of [20]. Ontwerp patronen ‘Design patterns’ geven een matrijs voor de standaard code in een object ge-ori¨enteerd programma, ten behoeve van hergebruik en code-generatie. Zie [7]. Modelleren Basiskennis modelleren met gebruikmaking van een of andere modelleeromgeving, bij voorbeeld UML (Unified Modelling Language, zie www.uml.org). Een indicatie van de programmeervaardigheden die we veronderstellen: Java Programma’s geschreven hebben van (zeg) minstens 3000 regels. C Programma’s geschreven hebben van (zeg) minstens 1000 regels Unix/Linux Ervaring hebben met de Unix/Linux shell, met het installeren van software pakketten, en met software engineering tools zoals make, CVS en configure. Zie bij voorbeeld [6]. Ontwikkelervaring Ervaring hebben met het ontwikkelen van software in een professionele omgeving (IDE, Integrated Development Environment) is wenselijk, bij voorbeeld met Eclipse (zie www.eclipse.org) of met JBuilder (zie www.borland.com/jbuilder/). Deze indicatie is alleen globaal. Wie ervaring heeft met andere programmeertalen en -omgevingen komt zeker ook in aanmerking. Vaardigheden waarop een sterk beroep zal worden gedaan tijdens de opleiding zijn: 17
Schrijven Het vermogen om heldere, goed gestructureerde teksten te schrijven in het Nederlands en (in mindere mate) in het Engels. Een goed naslagwerk voor het Nederlands is [11]. Presenteren Het vermogen om een onderwerp over het voetlicht te brengen voor een groep. Samenwerken Het vermogen om constructief in een team te werken aan specifieke opdrachten.
Toelatingsprocedure Heb je interesse voor deze masteropleiding? Meld je dan aan voor de toelatingsprocedure. Deze toelatingsprocedure dient ervoor om te bepalen of je voldoende voorkennis bezit om te worden toegelaten tot een masterprogramma. Verder wordt bepaald welke kennis je nog mist en hoe deze achterstand zou kunnen worden ingehaald. (Let op: De aanmelding voor de toelatingsprocedure is niet hetzelfde als de inschrijving voor het masterprogramma.) De toelatingsprocedure verloopt als volgt: 1. Haal het aanmeldingsformulier voor de opleiding van het web (www. cwi.nl/~jve/se/formulier_aanmelding_se1.pdf) en vul het in. Dien deze aanvraag inclusief alle vereiste documenten in bij de studieadviseur dr. Andrea Haker Onderwijsinstituut Informatiewetenschappen Universiteit van Amsterdam Nieuwe Achtergracht 166 1018 WV Amsterdam. 2. Zodra we alles in goede orde hebben ontvangen krijg je een ontvangstbevestiging van de aanvraag toegestuurd. 3. De aanvraag wordt vervolgens beoordeeld door de masterco¨ordinator. Die nodigt je eventueel uit voor een toelatingsgesprek.
18
4. De masterco¨ordinator beslist in overleg met de examencommissie over toelating en eventuele voorwaarden voor toelating (weg te werken defici¨enties en vrijstelling wiskunde). 5. Je ontvangt het definitief besluit van toelating (inclusief voorwaarden daartoe en te volgen procedure) toegestuurd per brief. 6. Op basis van deze informatie kun je al dan niet aan de masteropleiding beginnen.
Inschrijvingsprocedure Als je bericht hebt ontvangen dat je tot de masteropleiding bent toegelaten dien je je vervolgens, voor de start van de masteropleiding, in te schrijven als student bij de centrale studentenadministratie van de UvA en bij het Onderwijsinstituut Informatiewetenschappen van de UvA.
Master en dan . . . Met het behalen van het masterdiploma heb je laten zien dat je de capaciteiten hebt om een leidinggevende of richtinggevende rol in de software engineering te gaan spelen. Je hebt een visie op het gebied van software engineering en je kunt daarmee bijdragen aan de evolutie en innovatie van concrete software engineering projecten. Dat zijn eigenschappen waarmee je op veel plaatsen aan de slag kan: van kleine innovatieve bedrijven tot onderzoekslabs van grote bedrijven als Philips en Shell. Om de relatie met het werkveld te versterken is een partnergroep opgericht waarin toonaangevende bedrijven en onderzoeksinstellingen meedenken over de opleiding, projecten en stages aandragen, en kennis maken met de studenten. Het masterdiploma geeft uiteraard ook toegang tot een academisch promotietraject. De gebruikelijke gang van zaken daarbij is: solliciteren op een AIO (Assistent in Opleiding) project aan een universiteit of kennisinstelling. Daarmee verwerf je een betaalde onderzoeksplaats die je in de gelegenheid moet stellen in zo’n vier jaar een academisch proefschrift te produceren.
19
Alumnivereniging Contacten tussen afgestudeerden van de opleiding worden in stand gehouden via de alumnivereniging. Contactpersoon van deze vereniging is Hans Dekkers, MSc, email
[email protected]. Hans is een van de eerste afgestudeerden van de opleiding; je kunt hem dus raadplegen als ervaringsdeskundige wat betreft de studie.
Meer informatie Voor meer informatie kun je contact opnemen met de studieadviseur dr. Andrea Haker (
[email protected]) of met een van de opleidingsco¨ordinatoren prof. dr. Jan van Eijck (
[email protected]) of dr. Jurgen Vinju (
[email protected]).
Referenties [1] A. Aho, R. Sethi, and J Ullman. Compilers: Principles, Techniques, Tools. Addison Wesley, 1988. [2] L. Bass, P. Clements, and R. Kazman. Software Architecture in Practice. Addison-Wesley, 2003. second edition. [3] Kent Beck. Extreme Programming explained. Addison-Wesley, 2000. [4] Alan Cooper. The Inmates are running the Asylum. Sams Publishing, 1999. [5] Jan van Eijck and Elias Thijsse. Logica voor alfa’s en informatici. Academic Service, 1989. [6] Stephen Figgins, Jessica P. Hekman, Ellen Siever, and Stephen Spainhour. Linux in a nutshell. O’Reilly, 2000. [7] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley Professional, 1995. 20
[8] Michael T. Goodrich and Roberto Tamassia. Data Structures and Algorithms in Java. Wiley, 2004 (third edition). [9] J. Herrington. Code Generation in Action. Manning Publications Company, 2003. [10] A. Hunt and D. Thomas. The Pragmatic Programmer. Addison Wesley, 2000. [11] Liesbeth Koenen and Rik Smits. Handboek Nederlands. Erven J. Bijleveld, 2004. [12] Robert Lafore. Data Structures and Algorithms in Java (2nd Edition). Sams, 2002. [13] Soren Lauesen. Software requirements — styles and technique. AddisonWesley, 2002. [14] Steve Maguire. Debugging the Development Process. Microsoft Press, 1994. [15] Steve McConnell. After the Goldrush. Microsoft Press, 1999. [16] Steve McConnell. Code Complete 2. Microsoft Press, 2004 (second edition). [17] Martin Pol, Erik van Veendendaal, and Ruud Teunissen. Testen volgens TMap. Tutein Nolthenius, 2000. [18] G.J.E. Rawlins. Compared to What? — An Introduction to the Analysis of Algorithms. W.H. Freeman, 1992. [19] S. Robertson and J. Robertson. Mastering the Requirements Process. Addison-Wesley, 1999. [20] Ian Sommerville. Software Engineering. Addison-Wesley, 2004 (7th edition). [21] Hans van Vliet. Software Engineering: Principles and Practice. Wiley, 2000 (second edition). [22] E.M. van de Vrie, R.J. Beerends, et al. Discrete Wiskunde. Academic Service, 1999. 21
[23] Andreas Zeller. Why Programs Fail; A Guide to Systematic Debugging. Morgan Kaufmann and Dpunkt Verlag, Amsterdam and Heidelberg, 2005.
22