Programma Inf4all

Het aanbod voor informatica bestond uit acht cursussen van ieder 6 ec: twee cursussen op academisch basisniveau voor kandidaten met een hbo-vooropleiding, en zes cursussen op gevorderd niveau.
Vanaf het studiejaar 2018-19 worden een aantal van deze cursussen gesplitst in twee delen van elk 3 ec. Daardoor wordt het eenvoudiger om de studieplanning in te delen en wordt het ook mogelijk om een niet al te grote cursus over een specifiek ondwerwerp te volgen. Ook komt er een basiscursus OO-programmeren. In de tabel hieronder staat het voorlopige aanbod voor het studiejaar 2018-19. De vakken voor semester 1 liggen vast, aan het programma voor semester 2 wordt nog gewerkt.

 

Semester 1

Semester 2

Academisch  niveau

    Grondslagen (6 ec.)

x

 

    Algoritmiek (6 ec.)

 

x

Gevorderd algemeen

    Basis Object Oriented Programming (3 ec.)

x

 

    Advanced Object Oriented Programming (6 ec.)

 

x

    Netwerken (3 ec.)

 

x

    Databases en Information Retrieval

 

x

Gevorderd specialisatieonderwerpen

    Media, user experience (3 ec.)

x

 

    Game Design (3 ec.)

x

 

    Kunstmatige Intelligentie (3 ec.)

x

 

    Internet of Things

 

x

    Internet Security (3 ec.)

 

x

Jaarrooster

Alle cursusbijeenkomsten vinden plaats op vrijdagen. Download jaarrooster 2018-2019 (het rooster voor semester 2 is nog niet volledig).

De bijeenkomsten in het eerste semester zijn gepland van 11.00 tot 14.00 uur of van 14.00 tot 17.00 uur, beginnend op 1 september en doorlopend tot eind januari. Het tweede semester begint in week 6 van 2019 en wordt later vastgesteld.

Vakantie: de periode van kerst en oud & nieuw en goede vrijdag zijn onderwijsvrij. In de overige vakanties gaan de bijeenkomsten door.

 

Cursusbeschrijvingen

Worden nog aangepast wanneer een cursus gesplitst wordt.

Grondslagen

Inhoud

Deze cursus behandelt de principes die ten grondslag liggen aan de informatica als wetenschap, onafhankelijk van een specifieke technologie, toepassing, programmeertaal, of implementatie. Onderwerpen die behandeld worden zijn berekenbaarheid, logica, automaten en toestandsdiagrammen, programmeertalen, grammatica's, en algoritmes. Er zal op een abstracte manier naar informatica en de onderliggende theorie gekeken worden. In de cursus worden de cruciale ontdekkingen en concepten die de informatica bepaald hebben in een historische context geplaatst. Men leert ook om de principes toe te passen en te gebruiken, en de link te leggen met praktische toepassingen. Het uiteindelijke doel van het vak is om het geleerde instrumenteel in het onderwijs te gebruiken.

Onderwerpen

De cursus is gestructureerd als vier blokken van elk twee weken.

  1. Logica en redeneren.
  2. Programmeertalen en grammatica's.
  3. Eindige automaten en reguliere expressies.
  4. Berekenbaarheid en algoritmes.

 

Algoritmiek

Voorkennis

Goede kennis van en ervaring met programmeren, bijvoorbeeld door de Inf4All cursus "Advanced object georiënteerd programmeren".
Enige ervaring met het bewijzen van de correctheid van algoritmen en looptijd analyse van eenvoudige algoritmen, bijvoorbeeld door de Inf4All cursus "Grondslagen van de Informatica".

Inhoud

Literatuur

Voor deze module maken we gebruik van hoofdstukken 2 t/m 7 van het boek Algorithm Design van Jon Kleinberg & Éva Tardos (2005), Pearson. Verder materiaal komt beschikbaar via de online omgeving.

 

Basis Object Oriented Programming

Inhoud

Deze cursus behandelt een basis van het objectgeoriënteerd programmeren. We behandelen het ontwerpen en bouwen van klassen, beschrijving in UML. Bij het coderen komen zaken als objectreferenties, het construeren van objecten van een klasse, het aanroepen van methoden, zichtbaarheid aan de orde. We eindigen met overerving.

 

Voorkennis

Deze cursus is geen basiscursus programmeren, het bouwt voort op procedureel programmeren. Deelnemers dienen al vertrouwd te zijn met programmeren en het lezen van code, met zaken als het gebruik van variabelen, functies/procedures en controlestructuren.

Advanced Object Oriented Programming

In de cursus komen de volgende onderwerpen aan bod.

  1. Objectgeoriënteerd analyse en ontwerp. Hierin worden de beginselen van objectoriëntatie met behulp van de modeleertaal UML behandeld.
  2. Objectgeoriënteerd programmeren in Java. De taalconcepten en het typesysteem van Java wordt behandeld, zoals overerving en dynamische binding van methoden. Tevens komen abstracte klassen en interfaces aan de orde en een korte behandeling van generics: de uitbreiding van Java die het gebruik van typeparameters mogelijk maakt.
  3. Datastructuren, algoritmen en het Java collections framework. Datastructuren en de bijbehorende algoritmen zijn van groot belang bij het programmeren. Bijvoorbeeld, verschillende technieken voor het opslaan van gegevens, manieren om snel te zoeken en te sorteren of om op efficiënte wijze de weg te vinden in een netwerk. Na een inleiding over ontwerpprincipes en analysetechnieken, worden enkele basis datastructuren uit de informatica: onder andere stapels (stacks), wachtrijen (queues), rijen (sequences) en bomen met bijbehorende implementatie in Java behandeld.
  4. Design Patterns. Design Patterns zijn standaard oplossingen voor veelvoorkomende algemene ontwerpproblemen in object-georiënteerde applicaties. In deze cursus behandelen we de meest bruikbare design patterns en gaan we in op de manier waarop deze geïmplementeerd kunnen worden in Java.
  5. Inleiding JavaFX. JavaFX is het nieuwe platform voor het ontwikkelen van grafisch aantrekkelijke desktop-, web- en mobile applicaties. We gaan in op de basiscomponenten van JavaFX en behandelen enkele technieken waarmee eenvoudige grafische user interfaces kunnen worden samengesteld.
  6. Concurrency. In dit deel van de cursus gaan we in op de concepten in Java die het mogelijk maken om verschillende taken binnen één applicatie gelijktijdig uit te voeren. Ook gaan we in op de problematiek die met concurrency gepaard gaat en de manier waarop specifieke problemen (synchronisatie, race-conditions en deadlocks) kunnen worden opgelost.

Leerdoelen

  1. OO analyse en ontwerp.
    • Je kunt uitleggen wat de toestand van een object is en wat bedoeld wordt met het gedrag van een object
    • Je weet wat het begrip inkapseling inhoudt en kunt aangeven welke voordelen dat heeft
    • Je kunt uitleggen wat een object, wat een klasse en wat een attribuut is
    • Je bent in staat om de UML-constructies voor object, klasse en attribuut toe te passen
  2. OO in Java.
    • Je weet wat overerving inhoudt
    • Je kunt (abstracte) klassen en interfaces toepassen
    • Je bent in staat om eenvoudige generieke klassen te definiëren
    • Je kent de verschillende manieren kent waarop persistentie van gegevens gerealiseerd kan worden en kunt twee daarvan (streams, sql) ook toepassen
  3. Datastructuren.
    • Je hebt inzicht in standaard datastructuren (stacks, queues, sequences, trees, ...) en de bijbehorende algoritmen daarop
    • Je bent vertrouwd met het gebruik van recursie om bepaalde categorieën van algoritmen te begrijpen en zelf te beschrijven en te implementeren
    • Je begrijpt de essentie van- en de technieken onderliggend aan de verschillende algoritmen die aan bod zijn gekomen
  4. Design Patterns
    • Je kunt de belangrijkste design patterns aangeven
    • Je begrijpt welk design pattern welk probleem oplost
    • Je kunt een aangegeven pattern zelf te implementeren in Java
  5. JavaFX
    • Je begrijpt de globale opbouw van een JavaFX applicatie
    • Je kent de concepten die nodig zijn voor het bouwen van een eenvoudige GUI en weet die te gebruiken om zelf een GUI te implementeren

Voorkennis

Deze cursus is geen basiscursus programmeren, het bouwt voort op een goede kennis van procedureel programmeren. Dit houdt in:

Algemene vaardigheden

Onderwerpen

 

Databases en Information Retrieval

Voorkennis

Gedegen kennis van de vraagtaal SQL en SQL-DDL. Verder wordt van cursisten verwacht dat ze bekend zijn met de principes van het relationele model.

Inhoud

In de cursus wordt de voorkennis uitgebreid door in diepte normalisatie en de normaalvormen te behandelen. We bekijken ook de taal (UML) voor het beschrijven van een datamodel, zonder in detail op datamodellering in te gaan. Verder gaan we in op zaken als constraints, concurrency en het transactiemodel. Vervolgens kijken we naar information retrieval. Hoe kunnen we uit een gegeven vraag, bijvoorbeeld een lijst van trefwoorden, een ranking maken in relevante bronnen? Een voorbeeld hiervan is de Google Page Rank. Kernwoorden hierbij zijn indexering en het vector space model.

 

Netwerken

Inhoud

Communicatienetwerken vormen een niet meer weg te denken component in hedendaagse ICT-systemen. Communicatie vormt een essentieel onderdeel van alles wat we met willen en kunnen doen. Denk aan de reclameslogan van Sun Microsystems (circa 2003): "the network is the computer", of aan Robin Milner's lecture "computation is communication".

In het keuzethema "netwerken" worden communicatiesystemen behandeld langs twee assen, te weten, de as van de generieke concepten en de as van het internet als operationeel network, als volgt:

1. vanuit een meer fundamenteel gezichtspunt worden de architectuur van gelaagde communicatiesystemen en de daarbijbehorende communicatieprotocollen bestudeerd; algemene principes en benodigde functionaliteiten worden behandeld;

2. daarnaast volgt telkens een illustratie van de behandelde principes aan de hand van het hedendaagse internet.

Het keuzethema zal bestaan uit 9 blokken, elk bestaande uit een hoorcollegedeel (2 uur) en een werkcollegedeel (2 uur); per week wordt een blok behandeld, mogelijk met uitzondering van blok 2. Hoorcollege en werkcollege lopen deels door elkaar ("colstructie"). Daarnaast zal een online lab worden aangeboden (gebruik makend van de publiek beschikbare tool Wireshark); hiervoor is een laptop met wireless access nodig.

Literatuur

Voor het college zal gebruik gemaakt worden van het veelgebruikte boek van Jim Kurose en Keith Ross: Computer Networking: A Top-Down Approach Featuring the Internet. Van dit boek is in mei 2016 een vernieuwde 7de editie verschenen. Editie 6 (2012), international paperback kost circa € 65,-; de nieuwe editie, in het eerste jaar veelal alleen als hardback, is wellicht duurder.

 

Kunstmatige intelligentie

Inhoud

In deze cursus worden essentiële vragen rond kunstmatige intelligentie onder de loep genomen. Het gaat om de representatie van kennis in een computersysteem (hoe leg je kennis vast in digitale data?) en machine learning (hoe kan een computer kennis vergaren?).

Een meer gedetailleerde beschrijving in het Engels:

This series of lectures aims to teach methods and techniques so that students, given a problem in the field of Artificial Intelligence, will be able to represent the problem in a suitable way and select a promising method of solving the problem. Each of the lectures will cover a different topic, each with its own problem representation and solution methods. The lectures will present both the theory behind the solution algorithm, practical examples of the algorithm in action, and exercises for students to put their understanding of the subject matter into practice. Special attention will be given to problem representation.

The lectures will cover a variety of topics from the field of Articial Intelligence, including:

  1. Problem-solving using informed and uninformed search
  2. Algorithms for efficient game playing
  3. Deduction, reasoning, and problem solving using formal logic
  4. Knowledge bases
  5. Planning
  6. Statistical and symbolic learning
  7. Neural networks
  8. Data mining and knowledge discovery
  9. Intelligent agents

 

Internet Security

Inhoud

In de cursus Internet Security wordt onderzocht hoe computers kunnen worden aangevallen en hoe je je daartegen kunt verdedigen. Er is bijzondere aandacht voor web hacking.

 

Internet Security - Attack and Defense
In the press and in popular movies we hear and see that hackers break into critical systems, get access to classified information and trace your network activities with just a few clicks of a button. But are such scenarios real? How do attacks look like, how can we protect against such attacks and how can we securely exchange data over the Internet?
Internet Security – Web
Web applications are most likely the most pervasive systems and the one closer to our daily Internet experience. They are also a very likely target for attackers, and a likely entry point to compromise a system or network. In this course you will gain practical experience about web security and you will have the possiblity to try first hand how to gain access to a system.
Requirements
This course is intended for students with a solid understanding of networking who want to learn about network attacks, how those attacks can be measured and what can be done in terms of mitigation and defense. To follow this course, some basic programming skills (C, Java, ...) are required. In addition, you should be able to use Linux systems and set-up and maintain Virtual Machines (VirtualBox, Vagrant, Ubuntu).

 

In deze cursus wordt samengewerkt met de Universiteit Twente. Men neemt deel aan hun gelijknamige cursus, die via een MOOC wordt aangeboden. Afsluiting gebeurt door middel van het maken van opdrachten, er is geen toets/tentamen. De sessies in Utrecht zijn ingepland als (samen)werksessies, mogelijk met begeleiding.
Om deze reden is de cursus ook verzet naar blok 3. Mensen die graag eerder deze cursus willen doen, zouden dat in blok1 kunnen doen. Vanwege deze vorm wordt het cursusgeld mogelijk verlaagd.

 

Internet of things

Inhoud

Deze cursus gaat over de technische kant van informatica en heeft het 'internet of things' als toepassingscasus. We bekijken de verwerking van data uit sensoren en het aansturen van apparaten vanuit de computer. Er is daardoor ook een link met de robotica.

 

Media, games en user experience

Inhoud

Bijna alle software wordt uiteindelijk bediend door een menselijke gebruiker. Slechte ontwerpen en onverwachte problemen tijdens het gebruik vormen regelmatig een bron van ergernis, en kunnen oorzaak zijn van ernstige fouten. In deze cursus staat de wisselwerking tussen deze gebruiker en interactieve technologie centraal en hoe dit meegenomen kan worden in het ontwerp. Een centraal begrip is user experience (UX), de gehele ervaring die een product of service brengt, wat een groter geheel is dan alleen gebruiksvriendelijkheid en intuïtieve bediening.

We behandelen dit begrip in de context van interactieve producten en services zoals standaard software, websites en apps, maar ook hoe dit gebeurt bij games, wat goed aangeeft waarom UX meer is dan werkende software alleen. Informatica is veel breder geworden dan de traditionele scherm-muis-keyboard interactie, en daarom komt in deze cursus ook een aantal nieuwe ontwikkelingen aan bod met (alternatieve) media en toepassingen waar zowel UX en games goed samen komen. Denk hierbij aan serious games met "nieuwe" types feedback (AR/VR/haptics) of input (Motion Capture/Tangibles).

We behandelen methodes die beschikbaar zijn om bruikbaarheid en beleving van (digitale) systemen te evalueren en te optimaliseren. Vaak worden hierin gebruikers vanaf het begin betrokken worden bij het ontwikkelproces. Verder behandelen we de onderliggende theorieën en tonen tool(s) zoals Unity waarmee deze cursus een toepasselijke link heeft met de interesses van de middelbare scholier.

 

Vanaf het cursusjaar 2018/19 zijn van deze cursus de twee delen - user experience en games - als aparte cursus te volgen.