{"id":67801,"date":"2026-08-31T08:54:46","date_gmt":"2026-08-31T08:54:46","guid":{"rendered":"https:\/\/academy.xebia.com\/training\/67801\/"},"modified":"2026-09-01T14:04:16","modified_gmt":"2026-09-01T14:04:16","slug":"67801","status":"publish","type":"course","link":"https:\/\/academy.xebia.com\/nl\/training\/67801\/","title":{"rendered":"Scala Advanced Developer"},"content":{"rendered":"\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"e366c4cb\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-group-hero js-group-hero\" data-id=\"26e82618\">\n\t\t<div class=\"block-group-hero__background\">\n\t\t<div class=\"hero-theme block-group-hero__hero-theme\" data-id=\"76ae3b6a\">\n\t\n\t<div class=\"hero-theme__background\">\n\t\t\t\t\t<div class=\"hero-theme__background--data-white\">\n\t\t\t\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='46' height='55' viewBox='0 0 46 55' fill='none'><ellipse cx='23' cy='36.7998' rx='22.5' ry='18' fill='url(#d735639f-d453-471a-801b-0657b2eb7a67)'\/><ellipse cx='23' cy='18.7998' rx='22.5' ry='18' fill='url(#4c1d66b0-2ce8-4afa-9d6a-39f96de62a0f)'\/><path fill-rule='evenodd' clip-rule='evenodd' d='M3.51 27.8c3.891-5.38 11.162-9 19.49-9 8.329 0 15.6 3.62 19.49 9-3.89 5.38-11.161 9-19.49 9-8.328 0-15.599-3.62-19.49-9Z' fill='url(#49b6e6d5-70ad-4f46-bf58-c0f7e50be95b)'\/><defs><linearGradient id='d735639f-d453-471a-801b-0657b2eb7a67' x1='23' y1='18.7998' x2='23' y2='54.7998' gradientUnits='userSpaceOnUse'><stop stop-color='#F3F3F3' stop-opacity='0.5'\/><stop offset='1' stop-color='#84117C'\/><\/linearGradient><linearGradient id='4c1d66b0-2ce8-4afa-9d6a-39f96de62a0f' x1='23' y1='0.799805' x2='23' y2='36.7998' gradientUnits='userSpaceOnUse'><stop stop-color='#F3F3F3' stop-opacity='0.5'\/><stop offset='1' stop-color='#84117C'\/><\/linearGradient><linearGradient id='49b6e6d5-70ad-4f46-bf58-c0f7e50be95b' x1='23.0006' y1='18.7998' x2='23.0006' y2='36.7998' gradientUnits='userSpaceOnUse'><stop stop-color='#84117C'\/><stop offset='0.9999' stop-color='#A80C9E'\/><stop offset='1' stop-color='#84117C' stop-opacity='0'\/><\/linearGradient><\/defs><\/svg>\t\t\t<\/div>\n\t\t\n\t<\/div>\n<\/div>\t<\/div>\n\t<div class=\"block-group-hero__content\">\n\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"b8e661eb\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-course-hero\">\n\t<div class=\"block-course-hero__row\">\n\t\t<div class=\"block-course-hero block-course-hero__title\">\n\t\t\t<div class=\"block-course-hero__title-container\">\n\t\t\t\t<h1\tclass=\"heading\"\n\tdata-id=\"4d2287ff\"\n>\n\t<strong>Scala Advanced Developer<\/strong><\/h1>\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"block-course-hero__row\">\n\t\t<div class=\"block-course-hero\">\n\t\t\t<div class=\"block-course-hero__content\">\n\t\t\t\t<p class=\"block-course-hero__date-location\">\n\t\t\t\t\t<span data-training-meta-p-date>\n\t\t\t\t\t<\/span>   <span data-training-meta-p-address>\t\t\t\t\t<\/span>\n\t\t\t\t<\/p>\n\t\t\t\t<div class=\"course-tags block-course-hero__course-tags\" data-id=\"f778d4f2\">\n\t<div class=\"tags course-tags__tags js-tags\">\n\t\n\t\t<div class=\"tags__tag tags__tag-dark js-tags-tag tags__tag-show js-tags-tag-show\">\n\t\t\t<span >\t\t\tBack-end ontwikkeling\t\t\t<\/span>\n\t\t<\/div>\n\n\t\n\t\t<div class=\"tags__tag tags__tag-dark js-tags-tag\">\n\t\t\t<span >\t\t\tScala\t\t\t<\/span>\n\t\t<\/div>\n\n\t\n\t\t<div class=\"tags__tag tags__tag-dark js-tags-tag\">\n\t\t\t<span >\t\t\tSoftware Development\t\t\t<\/span>\n\t\t<\/div>\n\n\t\t<button\tclass=\"btn tags__show-more js-tags-show-more\"\n\tdata-id=\"907181ee\">\n\t<i class=\"icon btn__show-more\" data-id=\"f23d9195\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' fill='none' viewBox='0 0 25 24'><path stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 12h10M12 7v10'\/><\/svg><\/i>\n\t\n\t<\/button>\t<div class=\"tags__tippy-template js-tags-tippy-template\">\n\t\t<div class=\"tags__head\">\n\t\t\t<span><\/span>\n\t\t\t<button\tclass=\"btn tags__close js-tags-close\"\n\tdata-id=\"efe86e0c\">\n\t<i class=\"icon btn__close\" data-id=\"3c6b14a5\"  aria-hidden=\"true\">\n\t<svg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M15 5L5.00103 14.999' stroke='#6A1D57' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'\/><path d='M15 14.998L5.00103 4.99907' stroke='#6A1D57' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'\/><\/svg><\/i>\n\t\n\t<\/button>\t\t<\/div>\n\t<\/div>\n<\/div><\/div><p class=\"paragraph block-course-hero__description\" data-id=\"d6447cf9\">\n\tLeer in drie intensieve dagen functioneel programmeren in Scala 3 onder de knie te krijgen. De leidende principes zijn daarbij \u2018lokaal redeneren\u2019 \u2014 het vermogen om elk stukje code te begrijpen zonder de rest van het systeem te kennen \u2014 en \u2018compositie\u2019 \u2014 het bouwen van grotere systemen uit kleine, goed getypeerde onderdelen die op voorspelbare wijze samengaan. Maak een reis van algebra\u00efsche datatypes en het Cats-ecosysteem via concurrente en streamingtoepassingen met Cats Effect en FS2, naar event-sourced systemen met Pekko, waarbij je alles samenbrengt in een productie-klaar afstudeerproject. Gebaseerd op \u2018Training from the Back of the Room\u2019 (TBR)-technieken combineert elke sessie interactieve lezingen met REPL-gestuurde live-codering, praktische oefeningen en quizonderdelen. En in het tijdperk van AI zijn dit de vaardigheden waarmee je gegenereerde code met vertrouwen kunt controleren en verifi\u00ebren.    <\/p>\t\t\t\t<div class=\"block-course-hero__trainers-list\" aria-hidden=\"true\">\n\t\t\t\t\t<a href=\"https:\/\/example.com\" class=\"author-meta block-course-hero__author-meta author-meta__make-flex author-meta__link author-meta__make-flex\" rel=\"nofollow noopener\" target=\"_blank\">\n\t\t<picture class=\"image author-meta__image\" data-id=\"8be13a2e\">\n\n\t\n\t\n\t<img\n\t\tsrc=\"https:\/\/example.com\"\n\t\talt=\"\"\n\t\tclass=\"image__img author-meta__image-img\"\n\t\/>\n<\/picture><h2\tclass=\"heading author-meta__heading\"\n\tdata-id=\"69b93828\"\n>\n\tTrainer Title<\/h2>\t<\/a>\t\t\t\t<\/div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"block-course-hero__review-widget block-course-hero__review-widget-spacing\"\n\t\t\t\t\taria-hidden=\"true\">\n\t\t\t\t\t<div class=\"springest-review-widget springest-review-widget-width:300 springest-review-widget-bg:FFFFFF\">\n\t<a href=\"\">\n\t\t\t<\/a>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"block-course-hero__booking-container\">\n\t\t\t\t<div class=\"booking js-booking block-course-hero__booking booking__single-column\" id=\"booking-c89d4321\" data-id=\"c89d4321\">\n\t\t<div class=\"booking__info\">\n\t\t<h2\tclass=\"heading booking__heading\"\n\tdata-id=\"59127196\"\n>\n\t<strong>Heb je een vraag over de training?<\/strong><\/h2><p class=\"paragraph booking__paragraph\" data-id=\"6ea86993\">\n\tStel deze aan Melchior! Hij helpt je graag met het vinden van de juiste oplossing voor jou, jouw team of organisatie.<\/p><div class=\"author-meta booking__author-meta\">\n\t\t<picture class=\"image author-meta__image\" data-id=\"f671c453\">\n\n\t\n\t\n\t<img\n\t\tsrc=\"\/wp-content\/uploads\/2025\/09\/profielfoto-Xebia-Melchior.jpeg\"\n\t\talt=\"\"\n\t\tclass=\"image__img author-meta__image-img\"\n\t\/>\n<\/picture>\t\t<h2\tclass=\"heading author-meta__heading\"\n\tdata-id=\"d8d31312\"\n>\n\t<strong>Melchior Schimmel<\/strong> <br\/><strong>Chief Sales<\/strong><\/h2>\t\t<p class=\"paragraph author-meta__paragraph\" data-id=\"5ce76c93\">\n\t<a href=\"tel:0031636156602\" target=\"_blank\" rel=\"noreferrer noopener\">+31 6 36 15 66 02<\/a> <br\/><a href=\"mailto:melchior.schimmel@xebia.com\" target=\"_blank\" rel=\"noreferrer noopener\">melchior.schimmel@xebia.com<\/a> <br\/><a href=\"https:\/\/www.linkedin.com\/in\/melchior-schimmel-9a6aa5a6\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">linkedin.com\/in\/melchior-schimmel\/<\/a><\/p>\t<\/div><a class=\"btn booking__contact\" title=\"Neem contact op\" data-id=\"e4bda312\" href=\"https:\/\/academy.xebia.com\/contact\/\">\n\t\n\t\t\t<span>Neem contact op<\/span>\n\t\n\t<\/a>\t<\/div>\n<\/div>\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t<\/div>\n<\/div>\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"aa1a8214\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-course-stats\" \n\tdata-id=\"cadcf943\" \n\taria-hidden=\"1\"\n\t>\n\t\n\t<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"7733e8e3\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-columns\" data-id=\"bd45ce56\">\n\t\n\n<div class=\"block-column\" data-id=\"554c4f31\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"5611a1ab\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"8cf272be\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"08c13407\"\n>\n\tWat ga je leren?<\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"f0ce8c46\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"3eb8008d\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"da100028\">\n\tJe leert hoe je op een puur functionele manier kunt denken en ontwerpen met behulp van Scala 3. Beginnend bij algebra\u00efsche datatypes en patroonherkenning bouw je dit op naar geavanceerde typeklassen, monadische compositie en higher-kinded types \u2014 waardoor je de tools in handen krijgt om code te schrijven waarin elke functie afzonderlijk begrepen kan worden en zonder verrassingen met andere functies kan worden gecombineerd.   <br><br>Ontdek hoe Cats Effect de manier waarop u omgaat met bijwerkingen, gelijktijdigheid en het beheer van bronnen verandert. U leert programma&#8217;s te schrijven met behulp van de IO-monade, gebruik te maken van op fibers gebaseerde gelijktijdigheid voor grootschalige parallelliteit, en primitieven zoals Ref, Deferred en Queue te gebruiken om gelijktijdige workflows te co\u00f6rdineren \u2014 en dat alles zonder de valkuilen van traditionele, op threads gebaseerde programmering. Omdat IO referentieel transparant is, kan elke uitdrukking lokaal worden begrepen \u2014 waardoor gelijktijdige code net zo begrijpelijk wordt als sequenti\u00eble code.    <br><br>Je leert de verwerking van streaminggegevens met FS2 en Pekko Streams onder de knie te krijgen en begrijpt wanneer je welke moet gebruiken. Van pull-gebaseerde \u2018lazy\u2019 pijplijnen tot reactieve streams met tegendruk: je leert robuuste gegevensverwerkingssystemen te bouwen die werkelijke werklasten aankunnen. Pipes en streamoperatoren kunnen net als functies worden samengesteld, waardoor je complexe verwerkingspijplijnen kunt bouwen uit kleine, testbare en herbruikbare stappen.    <br><br>De training behandelt event sourcing en CQRS met Pekko Persistence, en leert je hoe je domeinentiteiten kunt modelleren als event-sourced actors, hoe je command- en event-handlers implementeert en hoe je read-side projecties bouwt. Je leert ook hoe je pure domeinlogica kunt scheiden van de infrastructuur \u2014 zodat command-handlers klein, lokaal testbaar en combineerbaar blijven naarmate het systeem groeit.   <br><br>Ten slotte integreer je al deze tools in een gelaagde, productieklaar architectuur \u2014 die teststrategie\u00ebn, configuratiebeheer, dependency injection, observability en implementatie omvat. Tagless final en Resource bieden je samenstelbare applicatielagen waarin elke component afzonderlijk kan worden begrepen. Het afstudeerproject biedt je de kans om alles wat je hebt geleerd toe te passen op een echt probleem. In een tijdperk waarin AI steeds meer code genereert, verschuift de nadruk van het schrijven van code naar het zelfverzekerd beoordelen en verifi\u00ebren ervan \u2014 lokale redenering en sterke typen zorgen ervoor dat door AI gegenereerde code betrouwbaar is.   <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n\n\n<div class=\"block-column\" data-id=\"c539c902\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"4f08a94e\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-group\" data-id=\"79cbb8eb\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"14a015d3\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"539e94ac\">\n\t<h3\tclass=\"heading block-heading__heading\"\n\tdata-id=\"001d29ca\"\n>\n\tBelangrijkste leerdoelen<\/h3><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"73d1cb09\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"dccd28f9\">\n\t<ol\tclass=\"lists block-lists__lists\"\n\tdata-id=\"b6a86370\"\n>\n\t<li><span class=\"lists__marker\" aria-hidden=\"true\">01<\/span>Pas twee basisprincipes toe \u2014 lokale redenering en compositie \u2014 die functionele Scala-code standaard leesbaar, testbaar en onderhoudbaar maken<\/li><li><span class=\"lists__marker\" aria-hidden=\"true\">02<\/span>Leer het Cats-ecosysteem (Cats, Cats Effect, FS2) grondig kennen voor functioneel Scala van productiekwaliteit<\/li><li><span class=\"lists__marker\" aria-hidden=\"true\">03<\/span>Ontwikkel gelijktijdige, op fibers gebaseerde applicaties die schaalbaar zijn zonder de complexiteit van threads<\/li><li><span class=\"lists__marker\" aria-hidden=\"true\">04<\/span>Ontwerp en implementeer event-sourced systemen met CQRS met behulp van Pekko Persistence<\/li><li><span class=\"lists__marker\" aria-hidden=\"true\">05<\/span>Ontwikkel streaming-datapijplijnen met zowel FS2 als Pekko Streams<\/li><li><span class=\"lists__marker\" aria-hidden=\"true\">06<\/span>Pas geavanceerde functies van het typesysteem \u2014 typeklassen, monaden, types van hogere orde en contextuele abstracties \u2014 vol vertrouwen toe<\/li><li><span class=\"lists__marker\" aria-hidden=\"true\">07<\/span>Rond je opleiding af met een praktijkgericht afstudeerproject waarin de concepten van alle drie de dagen tot uiting komen<\/li><\/ol><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"fbe04f17\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-columns\" data-id=\"84273ab2\">\n\t\n\n<div class=\"block-column\" data-id=\"b02718b2\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"b344fdd9\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"c03dfa83\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"eebf6bc3\"\n>\n\tProgramma<\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n\n\n<div class=\"block-column\" data-id=\"f5edeb03\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"bf34d952\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div\n\tclass=\"block-accordion js-block-accordion\"\n\tdata-close-adjacent=\"false\"\n>\n\t\t\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"true\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"Dag 1: Functionele basisprincipes\" \n\t\taria-controls=\"d6ce223c\" \n\t\taria-expanded=\"true\" \n\t\tid=\"0538f322\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"26318b30\"\n>\n\tDag 1: Functionele basisprincipes<\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"f43963a7\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"false\" \n\t\taria-labelledby=\"0538f322\" \n\t\tid=\"d6ce223c\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"59bda218\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"9e073224\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"071bfec9\">\n\tLeg een stevige basis in puur functioneel Scala 3. Je leert alles over algebra\u00efsche gegevenstypen, patroonherkenning en structurele recursie, waarna je verdergaat met functionele foutafhandeling met Option, Either en Validated. Ontdek het typeklassepatroon met behulp van contextuele abstracties in Scala 3, en werk met de belangrijkste Cats-typeklassen: Semigroup, Monoid, Functor, Applicative en Monad. De dag wordt afgesloten met geavanceerde monadische compositie: Reader-, Writer-, State- en Eval-monaden, monad-transformatoren (OptionT, EitherT), Traverse, Sequence en types van hogere orde (F[_]) \u2014 hiermee krijg je de tools in handen om code te schrijven waarbij elk onderdeel lokaal kan worden begrepen en zonder verrassingen kan worden samengesteld.   <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"Dag 2: Effecten, streaming en event sourcing\" \n\t\taria-controls=\"2b57de52\" \n\t\taria-expanded=\"false\" \n\t\tid=\"b20c8723\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"c2fdbb6b\"\n>\n\tDag 2: Effecten, streaming en event sourcing<\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"327b3afa\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"b20c8723\" \n\t\tid=\"2b57de52\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"cf110495\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"46387801\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"8085d74f\">\n\tKrijg grip op bijwerkingen en gelijktijdigheid met Cats Effect. Je leert over de IO-monade en referenti\u00eble transparantie, beheert resources met `bracket` en `Resource.make`, en bouwt op fibers gebaseerde gelijktijdige programma\u2019s met behulp van `parMapN`, `parTraverse`, `Ref`, `Deferred` en `Queue`. Vervolgens leer je alles over streaming met FS2 \u2014 op pull gebaseerde pijplijnen, pipes, chunking, gelijktijdige streams en resourceveiligheid. Daarna verken je Pekko Streams: Source, Flow, Sink, materialisatie, de Graph DSL en backpressure-strategie\u00ebn. De dag wordt afgesloten met event sourcing en CQRS met behulp van Pekko Persistence \u2014 EventSourcedBehavior, de Effect-API, snapshots, het taggen van events, herstel en streaming-projecties aan de leeszijde.    <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"Dag 3: Integratie, productie en afsluitend project\" \n\t\taria-controls=\"bcc2ec66\" \n\t\taria-expanded=\"false\" \n\t\tid=\"724e5c75\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"d0a31251\"\n>\n\tDag 3: Integratie, productie en afsluitend project<\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"62321363\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"724e5c75\" \n\t\tid=\"bcc2ec66\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"7acc1900\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"ea570d89\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"5dddaf7f\">\n\tBreng alles samen in een gelaagde architectuur die geschikt is voor productieomgevingen. Je combineert Cats, Cats Effect, FS2 en Pekko in \u00e9\u00e9n enkele applicatie, slaat een brug tussen IO en Future op systeemgrenzen en past tagless final toe voor samenstelbare, testbare lagen. Onderwerpen zijn onder meer teststrategie\u00ebn (pure functietests, IO-tests, tagless final test doubles), configuratiebeheer, dependency injection, gestructureerde logboekregistratie, op Ref gebaseerde metrics en graceful shutdown met IOApp en Deferred. De dag wordt afgesloten met presentaties van afstudeerprojecten, architectuurdoorlopen, groepsmatige codereviews, een terugblik op patronen en antipatronen, en een overzicht van verdere geavanceerde onderwerpen, waaronder optics en programmeren op typeniveau.   <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"Programma-onderwerpen\" \n\t\taria-controls=\"453d8443\" \n\t\taria-expanded=\"false\" \n\t\tid=\"e2f3ec69\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"1279288c\"\n>\n\tProgramma-onderwerpen<\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"01e1a3c0\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"e2f3ec69\" \n\t\tid=\"453d8443\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"7e89667c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"61c618dd\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"ba49d6c9\">\n\t<strong>Sessie 1 \u2014 Functionele basisbeginselen en ADT\u2019s<\/strong><\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"b7d4f5c4\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"5d270460\">\n\t<ul\tclass=\"lists block-lists__lists\"\n\tdata-id=\"b5c5afb1\"\n>\n\t<li>Functies van hogere orde, closures en onveranderlijkheid<\/li><li>Recursie en staartrecursie met @tailrec<\/li><li>Patroonherkenning en uitputtende controle<\/li><li>Producttypen (case-klassen) en somtypen (enums)<\/li><li>ADT-ontwerppatronen, structurele recursie en fold<\/li><li>Persistente verzamelingen: List, Vector, Map<\/li><li>LazyList en luie evaluatie<\/li><li>Live coderen: Domeinmodellering met ADT\u2019s<\/li><\/ul><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"29c62d87\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"e31bfda5\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"c73c84aa\">\n\t<strong>Sessie 2 \u2014 Foutafhandeling en typeklassen<\/strong><\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"dbac32d0\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"6a93c566\">\n\t<ul\tclass=\"lists block-lists__lists\"\n\tdata-id=\"3428c3bc\"\n>\n\t<li>Optie voor ontbrekende waarden, ofwel voor \u2018fail-fast\u2019-fouten<\/li><li>Gevalideerd voor het optellen van fouten met mapN<\/li><li>Foutafhandeling opstellen met for-comprehensions<\/li><li>Het typeklassepatroon in Scala 3: traits, given, using<\/li><li>Semigroep, mono\u00efde, functor \u2014 theorie en praktijk<\/li><li>Inleiding tot de Cats-bibliotheek en de bijbehorende syntaxisuitbreidingen<\/li><li>Live coderen: validatiepijplijn voor formulieren met Validated<\/li><li>Aangepaste typeklasse-instanties implementeren en afleiden<\/li><\/ul><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"b0aad91f\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"203c815c\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"6f2cf3c2\">\n\t<strong>Sessie 3 \u2014 Monaden en geavanceerde typen<\/strong><\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"487f08b3\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"966e4481\">\n\t<ul\tclass=\"lists block-lists__lists\"\n\tdata-id=\"a3ea9826\"\n>\n\t<li>Basisbegrippen van monaden: flatMap, pure en de monadewetten<\/li><li>For-comprehensions als monadische sequenti\u00ebring<\/li><li>Reader-monade voor afhankelijkheidsinjectie<\/li><li>Writer-monade voor logboekregistratie en audittrajecten<\/li><li>Staatsmonade voor berekeningen met toestandsinformatie<\/li><li>Eval voor stapelveilige lazy-evaluatie<\/li><li>Monad-transformatoren: OptionT, EitherT<\/li><li>Applicative versus monade: onafhankelijke versus afhankelijke berekeningen<\/li><li>Traverse en Sequence: geneste containers omdraaien<\/li><li>Typen van hogere orde (F[_]) en variantie<\/li><\/ul><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"c0699e3c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"6699011b\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"1489b10e\">\n\t<strong>Sessie 4 \u2014 Cats Effect &#038; Concurrency<\/strong><\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"43c5d13e\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"fd915dab\">\n\t<ul\tclass=\"lists block-lists__lists\"\n\tdata-id=\"a211b667\"\n>\n\t<li>Het JVM-threadmodel en de beperkingen daarvan voor grootschalige parallelliteit<\/li><li>Futures &#038; Promises: voordelen, nadelen en referenti\u00eble transparantie<\/li><li>De IO-monade: pure, delay, suspend en lazy evaluatie<\/li><li>Foutafhandeling bij I\/O: attempt, handleErrorWith, recoverWith<\/li><li>Beheer van bronnen met `bracket` en `Resource.make`<\/li><li>Concurrency op basis van vezels: starten, deelnemen, annuleren<\/li><li>Parallelle samenstelling: parMapN, parTraverse, parTupled<\/li><li>Parallelle primitieven: Ref, Deferred, Queue<\/li><li>Live coderen: gelijktijdige webscraper met fibers<\/li><\/ul><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"2bfe4bc4\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"221feb7c\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"0e145ecf\">\n\t<strong>Sessie 5 \u2014 Streamen met FS2<\/strong><\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"008395d5\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"673797de\">\n\t<ul\tclass=\"lists block-lists__lists\"\n\tdata-id=\"aef858f4\"\n>\n\t<li>Waarom streaming? Batchverwerking versus incrementele verwerking <\/li><li>Stream[F, O]: de kernabstractie en het op \u2018pull\u2019 gebaseerde model<\/li><li>Streams aanmaken: emit, emits, range, iterate, eval<\/li><li>Transformeren: map, filter, flatMap, scan, take, drop<\/li><li>Chunking voor effici\u00ebnte batchverwerking<\/li><li>Effectieve streaming: evalMap, evalTap, evalFilter<\/li><li>Pipes: samenstelbare, herbruikbare streamtransformatoren<\/li><li>Veiligheid van bronnen in streams met bracket en Stream.resource<\/li><li>Parallelle streams: merge, parJoin, parEvalMap<\/li><li>Foutafhandeling: herstel-, herhalings- en uitwijkpatronen<\/li><li>Live coderen: realtime gegevenspijplijn<\/li><\/ul><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"c1cbd3a4\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"beb71ef1\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"6b40c692\">\n\t<strong>Sessie 6 \u2014 Pekko Streams &#038; Event Sourcing<\/strong><\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"22a77aa0\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"d18157c9\">\n\t<ul\tclass=\"lists block-lists__lists\"\n\tdata-id=\"6aaacc95\"\n>\n\t<li>De Reactive Streams-specificatie en tegendruk<\/li><li>De kern van Pekko Streams: bron, stroom, bestemming en materialisatie<\/li><li>Stream-bewerkingen: map, filter, mapAsync, grouped, sliding<\/li><li>Graph DSL: Broadcast, Merge en complexe topologie\u00ebn<\/li><li>Tegenstroomstrategie\u00ebn en buffering<\/li><li>FS2 versus Pekko Streams: wanneer gebruik je welke?<\/li><li>Basisprincipes van het actormodel met Pekko-getypeerde acteurs<\/li><li>Concepten van event sourcing: levenscyclus van commando \u2192 gebeurtenis \u2192 toestand<\/li><li>EventSourcedBehavior met de Effect API<\/li><li>Momentopnames, het labelen van gebeurtenissen en herstel<\/li><li>CQRS: het scheiden van schrijf- en leesmodellen<\/li><li>Streaming van projecties aan de leeszijde<\/li><li>Live coderen: Een op gebeurtenissen gebaseerd winkelwagentje met CQRS-projectie<\/li><\/ul><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"6a35f18c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"d33e2f0b\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"e2fe7556\">\n\t<strong>Sessie 7 \u2014 Integratie- en productiepatronen<\/strong><\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"cf8876c5\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"42214003\">\n\t<ul\tclass=\"lists block-lists__lists\"\n\tdata-id=\"63266d8c\"\n>\n\t<li>Cats + Cats Effect + FS2 + Pekko combineren in \u00e9\u00e9n toepassing<\/li><li>Een brug slaan tussen IO en Future op systeemgrenzen<\/li><li>Instanties van typeklassen voor domeintypen (Monoid, Show, Order)<\/li><li>Schaalbaarheid van op gebeurtenissen gebaseerde opdrachtverwerkers: op status gebaseerde afhandeling, zuivere domeinlagen, uitgebreide statustypen<\/li><li>Gelaagde architectuur met tagloze finale (F[_])<\/li><li>Foutafhandeling tussen lagen: Either, Validated, EitherT<\/li><li>Samenstelling van hulpbronnen en levenscyclusbeheer<\/li><li>Teststrategie\u00ebn: tests van zuivere functies, IO-tests, tagloze definitieve testdoubles<\/li><li>Configuratiebeheer met case-klassen<\/li><li>Afhankelijkheidsinjectie in FP: constructorparameters, Reader, tagless final, Resource-koppeling<\/li><li>Gestructureerde logboekregistratie en op referenties gebaseerde statistieken<\/li><li>Vlotte afsluiting met IOApp en Deferred<\/li><li>Overwegingen bij de implementatie: JVM-tuning, containerisatie, statuscontroles<\/li><li>Live coderen: ge\u00efntegreerde pijplijn voor gebeurtenisverwerking<\/li><li>Verfijning van het afstudeerproject en vraag-en-antwoordronde<\/li><\/ul><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"0c8576fc\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"3cc3bfe1\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"6277ce61\">\n\t<strong>Sessie 8 \u2014 Workshop afstudeerproject<\/strong><\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"41b23fcc\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"06257bbe\">\n\t<ul\tclass=\"lists block-lists__lists\"\n\tdata-id=\"974329f6\"\n>\n\t<li>Projectpresentaties (elk 10\u201315 min.)<\/li><li>Rondleiding door de architectuur en live demo<\/li><li>Groepsbeoordeling van de code en bespreking van best practices<\/li><li>Terugblik op veelvoorkomende patronen en antipatronen<\/li><li>Overzicht van geavanceerde onderwerpen: optica, programmeren op typeniveau<\/li><li>Aanvullende leermiddelen en volgende stappen<\/li><\/ul><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"5391ef73\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"73399d94\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"d990d2e2\"\n>\n\tVoor wie is deze training?<\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"6aaf266c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-columns\" data-id=\"37927d0e\">\n\t\n\n<div class=\"block-column\" data-id=\"81a12071\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"d1ca2027\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"0aed6a74\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"7f88f927\">\n\tDeze training is bedoeld voor elke ontwikkelaar of architect die:<\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"8a2fcf7e\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-lists\" data-id=\"1560fdb2\">\n\t<ul\tclass=\"lists block-lists__lists\"\n\tdata-id=\"4c0fd3df\"\n>\n\t<li>Scala schrijven dat lokaal gemakkelijk te begrijpen is en zich op een overzichtelijke manier laat samenstellen \u2014 van afzonderlijke functies tot een volledige systeemarchitectuur<\/li><li>ga verder dan de basissyntaxis van Scala en verdiep je in geavanceerde functies van het typesysteem en het Cats-ecosysteem<\/li><li>leer hoe je gelijktijdige, streaming- en event-based applicaties op functionele wijze bouwt<\/li><li>de vaardigheden en werkwijzen verwerven die nodig zijn om leiding te geven aan een team dat functionele Scala-systemen ontwikkelt<\/li><li>afstuderen met een afstudeerproject dat direct in je portfolio kan worden opgenomen en waarin je laat zien hoe functioneel programmeren in de praktijk wordt toegepast<\/li><\/ul><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n\n\n<div class=\"block-column\" data-id=\"eed44b1d\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"f2a37602\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-bullet-list\">\n\t\t\t<p class=\"paragraph block-bullet-list__paragraph\" data-id=\"f6d218ce\">\n\tVereisten<\/p>\t<div class=\"block-bullet-list__columns\">\n\t\t\n\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"57b1516c\">\n\t<i class=\"icon block-bullet-item__icon\" data-id=\"7e544873\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><p class=\"paragraph block-bullet-item__paragraph\" data-id=\"e8ad3124\">\n\tBasiskennis van de Scala-syntaxis en -collecties, of ruime ervaring met een andere JVM-taal, zoals Java of Kotlin<\/p><\/div>\n\n\n\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"88946fbc\">\n\t<i class=\"icon block-bullet-item__icon\" data-id=\"0188b25a\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><p class=\"paragraph block-bullet-item__paragraph\" data-id=\"557c492a\">\n\tBasisbegrippen van OOP<\/p><\/div>\n\n\n\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"c2163173\">\n\t<i class=\"icon block-bullet-item__icon\" data-id=\"330bd48a\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><p class=\"paragraph block-bullet-item__paragraph\" data-id=\"8f113232\">\n\tBereidheid om tijd te investeren in voorbereidende leesopdrachten en oefeningen na de sessies, inclusief het stapsgewijs werken aan een afsluitend project<\/p><\/div>\n\n\n\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"c58cafaf\">\n\t<i class=\"icon block-bullet-item__icon\" data-id=\"cbe0a288\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><p class=\"paragraph block-bullet-item__paragraph\" data-id=\"cd9510da\">\n\tJe moet je eigen laptop meenemen.<\/p><\/div>\n\n\t<\/div>\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"65fa683d\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"16d3455b\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"5add9c58\"\n>\n\tWaarom zou ik deze training volgen?<\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"ec848558\" \n\tdata-bg-on-inner=\"true\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-columns\" data-id=\"0916ce43\">\n\t\n\n<div class=\"block-column\" data-id=\"a63ca20c\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"9a34ce16\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-icon\">\n\t<i class=\"icon block-icon__icon\" data-id=\"49498220\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"88289f00\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"5f8f6fbd\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"4cf0bf5a\"\n>\n\t<strong>Leer code te schrijven waarbij elk onderdeel afzonderlijk kan worden begrepen en op voorspelbare wijze kan worden samengevoegd<\/strong><\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"34b3460f\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"06f35828\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"8efce563\">\n\tBeheers lokaal redeneren en structureren als basisprincipes \u2014 van zuivere functies tot volledige systeemarchitectuur \u2014 zodat je code standaard leesbaar, testbaar en onderhoudbaar is.<\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n\n\n<div class=\"block-column\" data-id=\"09bb678b\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"3b062832\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-icon\">\n\t<i class=\"icon block-icon__icon\" data-id=\"c6171da0\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"ec0ad5b6\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"b687024f\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"2fd2c286\"\n>\n\t<strong>Leer het volledige Cats-ecosysteem en Pekko beheersen in \u00e9\u00e9n samenhangend programma<\/strong><\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"626cfecf\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"5819054c\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"89145593\">\n\tVan typeklassen tot gelijktijdige streaming tot event sourcing \u2014 Cats, Cats Effect, FS2 en Pekko worden van begin tot eind behandeld in \u00e9\u00e9n gestructureerde training.<\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n\n\n<div class=\"block-column\" data-id=\"9c39bea1\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"e1ada51d\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-icon\">\n\t<i class=\"icon block-icon__icon\" data-id=\"225c493e\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"ffbe9117\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"43f64117\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"48a9767b\"\n>\n\t<strong>Rond je opleiding af met een praktijkgericht afstudeerproject waarmee je je vaardigheden aantoont<\/strong><\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"4c47f30c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"5635d67c\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"eb6f11c8\">\n\tPas alles wat je hebt geleerd toe op een concreet probleem en neem een project mee dat klaar is voor je portfolio en waarin je laat zien dat je functioneel Scala op productieniveau beheerst.<\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n\n\n<div class=\"block-column\" data-id=\"7e4eb775\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"d6485f30\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-icon\">\n\t<i class=\"icon block-icon__icon\" data-id=\"0bcebe67\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"21e9f855\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"f2ec6bf2\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"09698e6c\"\n>\n\t<strong>Blijf onmisbaar in het tijdperk van AI<\/strong><\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"fe9655d9\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"ca794fa4\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"a23daefe\">\n\tAI verplaatst het knelpunt van het schrijven van code naar het controleren en verifi\u00ebren ervan. Lokale redenering, compositie en een krachtig typesysteem zorgen ervoor dat door AI gegenereerde code controleerbaar en veilig is \u2014 de compiler vangt op wat een mens zou missen bij het vluchtig doorlezen van de AI-uitvoer. <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n\n\n<div class=\"block-column\" data-id=\"cd9842b4\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"cc9777ef\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-icon\">\n\t<i class=\"icon block-icon__icon\" data-id=\"a6b1cda1\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"4081dad8\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"a943e753\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"4efb7e43\"\n>\n\t<strong>Pragmatisch en functioneel Scala, geen ivoren-toren-theorie<\/strong><\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"4cb0ce35\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"10b8565e\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"c736d194\">\n\tBen je bang dat functioneel programmeren te academisch is? Elk concept verdient zijn plaats door een echt probleem op te lossen \u2014 geen categorietheorie omwille van de categorietheorie zelf. Je leert net genoeg theorie om deze op een pragmatische manier toe te passen, en past deze vervolgens toe op praktijkgerichte zaken zoals testen, configuratie, observeerbaarheid en implementatie.  <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n\n\n<div class=\"block-column\" data-id=\"f9ad7e9f\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"f4eedb3c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-icon\">\n\t<i class=\"icon block-icon__icon\" data-id=\"bdb2c3f0\"  aria-hidden=\"true\">\n\t<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z'\/><\/svg><\/i><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"9dced2a1\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"b94c48a5\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"c9a5716e\"\n>\n\t<strong>Leer van een ervaren professional<\/strong><\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"264b5638\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"881366fa\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"f0955dc9\">\n\tDe cursus wordt gegeven door een trainer die al meer dan tien jaar ervaring heeft met het bouwen van uitgebreide, productieve JVM-backendsystemen en gecertificeerd is in \u2018Training from the Back of the Room\u2019 \u2014 je leert beproefde patronen van iemand die ze daadwerkelijk in de praktijk heeft toegepast.<\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"e36d6f98\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"45a1f923\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"6e049ce7\"\n>\n\tMaak kennis met de trainer<\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"c1812be1\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-columns\" data-id=\"df3be899\">\n\t\n\n<div class=\"block-column\" data-id=\"77649082\">\n\t\n<div class=\"card-trainer\" data-id=\"ae8f39a3\">\n\t<picture class=\"image card-trainer__image\" data-id=\"71becce3\">\n\n\t\n\t\n\t<img\n\t\tsrc=\"\/wp-content\/uploads\/2026\/07\/robert-thurnher-1-768x1024.jpg\"\n\t\talt=\"\"\n\t\tclass=\"image__img card-trainer__image-img\"\n\t\/>\n<\/picture>\n\t<div class=\"card-trainer__content\">\n\t\t<h2\tclass=\"heading card-trainer__heading\"\n\tdata-id=\"e21bf277\"\n>\n\tRobert Thurnher<\/h2><p class=\"paragraph card-trainer__paragraph\" data-id=\"020b8dfd\">\n\tRobert is a seasoned software craftsman with roughly 20 years of experience building web, mobile, and backend systems. Full-stack with a strong backend focus, he brings deep expertise in the JVM ecosy<\/p>\t\t<div class=\"card-trainer__button-container\">\n\t\t\t<div class=\"card-trainer__socials\">\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<a class=\"btn card-trainer__btn\" title=\"View profile\" data-id=\"cb4d342d\" href=\"https:\/\/academy.xebia.com\/trainer\/robert-thurnher\/\">\n\t\n\t\t\t<span>View profile<\/span>\n\t\n\t<\/a>\t\t<\/div>\n\t<\/div>\n<\/div>\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"0972a18c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"868b033e\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"16e1b9d9\"\n>\n\tWat moet je nog meer weten?<\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"dd77fac0\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-columns\" data-id=\"6d2893a7\">\n\t\n\n<div class=\"block-column\" data-id=\"2f54d7f4\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"d3211a6c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"24c8b564\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"99f92830\">\n\tDe training bestaat uit drie intensieve dagen waarbij gebruik wordt gemaakt van de \u2018Training from the Back of the Room\u2019 (TBR)-technieken. Elke sessie combineert interactieve lezingen met REPL-gestuurde live-codering, praktische oefeningen en quizonderdelen. Elke dag bouwt voort op de vorige, dus het is belangrijk om alle drie de dagen bij te wonen om het maximale uit het programma te halen.  <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n\n\n<div class=\"block-column\" data-id=\"28e32ef9\">\n\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"da5e6877\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-bullet-list\">\n\t\t\t<p class=\"paragraph block-bullet-list__paragraph\" data-id=\"8ffa8500\">\n\tCursusinformatie<\/p>\t<div class=\"block-bullet-list__columns\">\n\t\t\n\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"08a463b7\">\n\t<i class=\"icon block-bullet-item__icon\" data-id=\"a3a2e254\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M11.25 11.25C11.4489 11.25 11.6397 11.329 11.7803 11.4697C11.921 11.6103 12 11.8011 12 12V15.75C12 15.9489 12.079 16.1397 12.2197 16.2803C12.3603 16.421 12.5511 16.5 12.75 16.5' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'\/><path d='M11.625 9C12.2463 9 12.75 8.49632 12.75 7.875C12.75 7.25368 12.2463 6.75 11.625 6.75C11.0037 6.75 10.5 7.25368 10.5 7.875C10.5 8.49632 11.0037 9 11.625 9Z' fill='currentColor'\/><\/svg><\/i><p class=\"paragraph block-bullet-item__paragraph\" data-id=\"c3447ca7\">\n\tHoofdleerboek: \u2018Functional Programming Strategies in Scala with Cats\u2019. Alle codevoorbeelden, oefeningen en oplossingen zijn beschikbaar in een speciale Git-repository. <\/p><\/div>\n\n\n\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"5e1729af\">\n\t<i class=\"icon block-bullet-item__icon\" data-id=\"20a106e9\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M11.25 11.25C11.4489 11.25 11.6397 11.329 11.7803 11.4697C11.921 11.6103 12 11.8011 12 12V15.75C12 15.9489 12.079 16.1397 12.2197 16.2803C12.3603 16.421 12.5511 16.5 12.75 16.5' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'\/><path d='M11.625 9C12.2463 9 12.75 8.49632 12.75 7.875C12.75 7.25368 12.2463 6.75 11.625 6.75C11.0037 6.75 10.5 7.25368 10.5 7.875C10.5 8.49632 11.0037 9 11.625 9Z' fill='currentColor'\/><\/svg><\/i><p class=\"paragraph block-bullet-item__paragraph\" data-id=\"6651dc5b\">\n\tNeem je eigen laptop mee waarop Java 21 of hoger en sbt zijn ge\u00efnstalleerd. Aanbevolen editors: VS Code met Metals, IntelliJ IDEA met de Scala-plug-in of Neovim. <\/p><\/div>\n\n\n\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"2e16b20a\">\n\t<i class=\"icon block-bullet-item__icon\" data-id=\"d0a00e69\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M11.25 11.25C11.4489 11.25 11.6397 11.329 11.7803 11.4697C11.921 11.6103 12 11.8011 12 12V15.75C12 15.9489 12.079 16.1397 12.2197 16.2803C12.3603 16.421 12.5511 16.5 12.75 16.5' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'\/><path d='M11.625 9C12.2463 9 12.75 8.49632 12.75 7.875C12.75 7.25368 12.2463 6.75 11.625 6.75C11.0037 6.75 10.5 7.25368 10.5 7.875C10.5 8.49632 11.0037 9 11.625 9Z' fill='currentColor'\/><\/svg><\/i><p class=\"paragraph block-bullet-item__paragraph\" data-id=\"caf39bfa\">\n\tElke sessie omvat oefeningen en werk aan een afstudeerproject om de behandelde concepten tussen de lesdagen door te verankeren.<\/p><\/div>\n\n\n\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"9a892c03\">\n\t<i class=\"icon block-bullet-item__icon\" data-id=\"bea0a444\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M11.25 11.25C11.4489 11.25 11.6397 11.329 11.7803 11.4697C11.921 11.6103 12 11.8011 12 12V15.75C12 15.9489 12.079 16.1397 12.2197 16.2803C12.3603 16.421 12.5511 16.5 12.75 16.5' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'\/><path d='M11.625 9C12.2463 9 12.75 8.49632 12.75 7.875C12.75 7.25368 12.2463 6.75 11.625 6.75C11.0037 6.75 10.5 7.25368 10.5 7.875C10.5 8.49632 11.0037 9 11.625 9Z' fill='currentColor'\/><\/svg><\/i><p class=\"paragraph block-bullet-item__paragraph\" data-id=\"8ec3f33e\">\n\tTijdens de sessies wordt gebruikgemaakt van TBR-technieken: interactieve colleges, REPL-gestuurd live coderen, praktische oefeningen en quizonderdelen om de betrokkenheid en het leerbehoud te maximaliseren.<\/p><\/div>\n\n\t<\/div>\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"f4091334\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-heading\" data-id=\"b870f47b\">\n\t<h2\tclass=\"heading block-heading__heading\"\n\tdata-id=\"ee8bb9d1\"\n>\n\t<strong>Veelgestelde vragen<\/strong><\/h2><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n<div \n\tclass=\"wrapper\" \n\tdata-id=\"ad7b5ad7\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div\n\tclass=\"block-accordion js-block-accordion\"\n\tdata-close-adjacent=\"false\"\n>\n\t\t\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"&lt;strong&gt;V: Moet ik al ervaring hebben met Scala om deel te nemen?&lt;\/strong&gt;\" \n\t\taria-controls=\"2423a1e9\" \n\t\taria-expanded=\"false\" \n\t\tid=\"9dd373be\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"b52cbecc\"\n>\n\t<strong>V: Moet ik al ervaring hebben met Scala om deel te nemen?<\/strong><\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"b3bbd347\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"9dd373be\" \n\t\tid=\"2423a1e9\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"f15253b1\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"e2872bc9\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"95f421a6\">\n\t<strong>A: <\/strong>Er wordt <strong>basiskennis van <\/strong>de Scala-syntaxis en -collecties verwacht \u2014 of ruime ervaring met een andere JVM-taal, zoals Java of Kotlin. De training begint bij de basisbeginselen van functioneel programmeren, dus je hebt geen eerdere ervaring nodig met functioneel programmeren of het Cats-ecosysteem. <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"&lt;strong&gt;V: Welke versie van Scala wordt er tijdens de training gebruikt?&lt;\/strong&gt;\" \n\t\taria-controls=\"a9a97954\" \n\t\taria-expanded=\"false\" \n\t\tid=\"1de59627\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"5333b865\"\n>\n\t<strong>V: Welke versie van Scala wordt er tijdens de training gebruikt?<\/strong><\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"2f8688b8\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"1de59627\" \n\t\tid=\"a9a97954\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"d9473f19\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"0b29d8c2\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"7a7fda12\">\n\t<strong>A: De <\/strong>training maakt gebruik van Scala 3 en profiteert daarbij van de moderne syntaxis ervan: enum voor ADT\u2019s, given\/using voor typeklassen, uitbreidingsmethoden en controlestructuren zonder accolades. Als je ervaring hebt met Scala 2, komen de verschillen gaandeweg aan bod. <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"&lt;strong&gt;V: Hoeveel tijd moet ik buiten de sessies om ongeveer uittrekken?&lt;\/strong&gt;\" \n\t\taria-controls=\"66c4ead4\" \n\t\taria-expanded=\"false\" \n\t\tid=\"171dab53\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"854df3fb\"\n>\n\t<strong>V: Hoeveel tijd moet ik buiten de sessies om ongeveer uittrekken?<\/strong><\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"6b9852ab\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"171dab53\" \n\t\tid=\"66c4ead4\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"29a16d8c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"fd0fad6f\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"9f255707\">\n\t<strong>A: Houd er rekening mee dat je <\/strong>elke dag voorafgaand aan de les tekst <strong>moet <\/strong>lezen en na afloop van de sessie oefeningen <strong>moet <\/strong>maken om de geleerde stof te verankeren. Ook voor het afstudeerproject moet je tussen de lesdagen door extra werk verrichten. Regelmatig oefenen is essentieel om het progressieve lesprogramma bij te kunnen houden.  <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"&lt;strong&gt;V: Wat is het afstudeerproject en wanneer begint het?&lt;\/strong&gt;\" \n\t\taria-controls=\"23a2a7ab\" \n\t\taria-expanded=\"false\" \n\t\tid=\"b4da2ab8\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"dfb9d621\"\n>\n\t<strong>V: Wat is het afstudeerproject en wanneer begint het?<\/strong><\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"28932789\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"b4da2ab8\" \n\t\tid=\"23a2a7ab\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"c6df6442\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"26c49cc3\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"f081e1bc\">\n\t<strong>A: Het <\/strong>afstudeerproject is een productieklaar programma dat je tijdens de opleiding stapsgewijs ontwikkelt. Je kunt kiezen uit drie projectopties: een op gebeurtenissen gebaseerde microservice, een realtime streamingplatform of een processor voor gelijktijdige gegevensverwerking. Je presenteert het op dag 3.  <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"&lt;strong&gt;V: Welke bibliotheken en hulpmiddelen komen aan bod?&lt;\/strong&gt;\" \n\t\taria-controls=\"c4f052cf\" \n\t\taria-expanded=\"false\" \n\t\tid=\"d964466e\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"6e6132b5\"\n>\n\t<strong>V: Welke bibliotheken en hulpmiddelen komen aan bod?<\/strong><\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"b3cbaa81\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"d964466e\" \n\t\tid=\"c4f052cf\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"7551e99c\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"951a804a\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"cac547f5\">\n\t<strong>A: De <\/strong>kernstack bestaat uit Cats, Cats Effect, FS2 en Pekko (Streams, Persistence, getypeerde actoren). Voor het testen wordt gebruikgemaakt van het Weaver-testframework, in combinatie met Pekko TestKit voor op actoren gebaseerde tests. De buildtool is sbt.  <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"&lt;strong&gt;V: Is de training geschikt voor teams die met Scala aan de slag gaan?&lt;\/strong&gt;\" \n\t\taria-controls=\"da0b6741\" \n\t\taria-expanded=\"false\" \n\t\tid=\"ba12a89a\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"821f59a9\"\n>\n\t<strong>V: Is de training geschikt voor teams die met Scala aan de slag gaan?<\/strong><\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"695dd86f\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"ba12a89a\" \n\t\tid=\"da0b6741\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"0dd510ec\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"170490c6\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"48eb6bd4\">\n\t<strong>A: Ja <\/strong>. Het programma is zo opgezet dat ontwikkelaars in drie intensieve dagen van basiskennis van Scala naar functioneel Scala op productieniveau worden begeleid. Het behandelt niet alleen taalfuncties, maar ook architectuur, testen en implementatiepatronen \u2014 waardoor het uitermate geschikt is voor teams die overstappen op Scala of hun gebruik ervan willen verdiepen.  <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"&lt;strong&gt;V: Waarin verschilt deze training van het louter bestuderen van de Cats-bibliotheek?&lt;\/strong&gt;\" \n\t\taria-controls=\"5fccb1bf\" \n\t\taria-expanded=\"false\" \n\t\tid=\"67975fbd\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"c2953b23\"\n>\n\t<strong>V: Waarin verschilt deze training van het louter bestuderen van de Cats-bibliotheek?<\/strong><\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"924cfb5e\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"67975fbd\" \n\t\tid=\"5fccb1bf\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"64529576\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"967f00f1\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"d5d3c401\">\n\t<strong>A: De <\/strong>training is geen rondleiding door de bibliotheek. Elke techniek is gebaseerd op twee principes \u2014 lokaal redeneren en compositie \u2014 die ervoor zorgen dat je code leesbaar, testbaar en onderhoudbaar is. Je leert waarom elke abstractie bestaat en wanneer je deze moet toepassen, en niet alleen de API-interface.  <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"&lt;strong&gt;V: Is het nog steeds de moeite waard om functioneel Scala te leren in het tijdperk van AI?&lt;\/strong&gt;\" \n\t\taria-controls=\"3f7c76f2\" \n\t\taria-expanded=\"false\" \n\t\tid=\"afe81a19\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"8d6b23a0\"\n>\n\t<strong>V: Is het nog steeds de moeite waard om functioneel Scala te leren in het tijdperk van AI?<\/strong><\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"98a22f89\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"afe81a19\" \n\t\tid=\"3f7c76f2\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"d6f59b79\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"0317d172\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"09bd0a7e\">\n\t<strong>A: Meer <\/strong>dan ooit. AI-codeerassistenten genereren grote hoeveelheden code, waardoor je werk niet langer bestaat uit het schrijven ervan, maar uit het lezen, controleren en verifi\u00ebren ervan. Dankzij \u2018local reasoning\u2019 kun je een gegenereerde functie begrijpen zonder het hele systeem te hoeven doorlopen, dankzij \u2018composition\u2019 kun je erop vertrouwen dat goed getypeerde onderdelen correct worden gecombineerd, en het typesysteem van Scala vangt hele categorie\u00ebn fouten op tijdens het compileren \u2014 nog voordat ze de beoordelingsfase bereiken. De vaardigheden die je tijdens deze training opdoet, zijn precies wat je tot een effectieve, betrouwbare beoordelaar van door AI gegenereerde code maakt.   <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"block-accordion-item js-block-accordion-item\" \n\taria-expanded=\"false\"\n>\n\t<button class=\"block-accordion-item__trigger js-block-accordion-item-trigger\" \n\t\taria-label=\"&lt;strong&gt;V: Kan de training in-house worden gegeven of op maat worden samengesteld?&lt;\/strong&gt;\" \n\t\taria-controls=\"b73c4860\" \n\t\taria-expanded=\"false\" \n\t\tid=\"5699148d\"\n\t>\n\t\t<h2\tclass=\"heading block-accordion-item__title\"\n\tdata-id=\"d6a3df81\"\n>\n\t<strong>V: Kan de training in-house worden gegeven of op maat worden samengesteld?<\/strong><\/h2>\t\t\n\t\t<span class=\"block-accordion-item__wrap-icon\" aria-hidden=\"true\">\n\t\t\t<i class=\"icon block-accordion-item__icon\" data-id=\"d9280c36\"  aria-hidden=\"true\">\n\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'><path d='M13 5.5a1 1 0 1 0-2 0h2Zm-1.707 13.707a1 1 0 0 0 1.414 0l6.364-6.364a1 1 0 0 0-1.414-1.414L12 17.086l-5.657-5.657a1 1 0 0 0-1.414 1.414l6.364 6.364ZM11 5.5v13h2v-13h-2Z' fill='currentColor'\/><\/svg><\/i>\t\t<\/span>\n\t<\/button>\n\n\t<div role=\"region\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" \n\t\taria-hidden=\"true\" \n\t\taria-labelledby=\"5699148d\" \n\t\tid=\"b73c4860\"\n\t>\n\t\t<div class=\"block-accordion-item__content\">\n\t\t\t\n\n<div \n\tclass=\"wrapper wrapper--simple\" \n\tdata-id=\"0414bf81\" \n\tdata-bg-on-inner=\"false\" \n\t>\n\t\t\n\t\t\t<div class=\"wrapper__inner\">\n\t\t\t\n<div class=\"block-paragraph\" data-id=\"804e7030\">\n\t<p class=\"paragraph block-paragraph__paragraph\" data-id=\"98138b9c\">\n\t<strong>A: Het <\/strong>programma kan worden aangepast voor in-company-uitvoering \u2014 ter plaatse, volledig op afstand of in een hybride vorm \u2014 met op maat gemaakte voorbeelden, een aangepast tempo en aandachtsgebieden die zijn afgestemd op de behoeften van uw team en de bestaande codebase. Neem contact met ons op om de mogelijkheden te bespreken. <\/p><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":30,"featured_media":0,"template":"","tags":[387,386,324],"class_list":["post-67801","course","type-course","status-publish","hentry","tag-back-end-ontwikkeling","tag-scala","tag-software-development-nl"],"acf":{"field_BrokersfeedIntroduction":"Leer in drie intensieve dagen functioneel programmeren in Scala 3 onder de knie te krijgen. De leidende principes zijn daarbij \u2018lokaal redeneren\u2019 \u2014 het vermogen om elk stukje code te begrijpen zonder de rest van het systeem te kennen \u2014 en \u2018compositie\u2019 \u2014 het bouwen van grotere systemen uit kleine, goed getypeerde onderdelen die op voorspelbare wijze samengaan. Maak een reis van algebra\u00efsche datatypes en het Cats-ecosysteem via concurrente en streamingtoepassingen met Cats Effect en FS2, naar event-sourced systemen met Pekko, waarbij je alles samenbrengt in een productie-klaar afstudeerproject. Gebaseerd op \u2018Training from the Back of the Room\u2019 (TBR)-technieken combineert elke sessie interactieve lezingen met REPL-gestuurde live-codering, praktische oefeningen en quizonderdelen. En in het tijdperk van AI zijn dit de vaardigheden waarmee je gegenereerde code met vertrouwen kunt controleren en verifi\u00ebren.","field_BrokersfeedDescription":"<div class=\"wrapper wrapper--simple\" data-id=\"63ff4e06\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-heading\" data-id=\"f14ba1c4\">\r\n<h2 class=\"heading block-heading__heading\" data-id=\"993cab84\">Wat ga je leren?<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"cf2cc663\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"16bff64d\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"eae2cc73\">Je leert hoe je op een puur functionele manier kunt denken en ontwerpen met behulp van Scala 3. Beginnend bij algebra\u00efsche datatypes en patroonherkenning bouw je dit op naar geavanceerde typeklassen, monadische compositie en higher-kinded types \u2014 waardoor je de tools in handen krijgt om code te schrijven waarin elke functie afzonderlijk begrepen kan worden en zonder verrassingen met andere functies kan worden gecombineerd.\r\n\r\nOntdek hoe Cats Effect de manier waarop u omgaat met bijwerkingen, gelijktijdigheid en het beheer van bronnen verandert. U leert programma\u2019s te schrijven met behulp van de IO-monade, gebruik te maken van op fibers gebaseerde gelijktijdigheid voor grootschalige parallelliteit, en primitieven zoals Ref, Deferred en Queue te gebruiken om gelijktijdige workflows te co\u00f6rdineren \u2014 en dat alles zonder de valkuilen van traditionele, op threads gebaseerde programmering. Omdat IO referentieel transparant is, kan elke uitdrukking lokaal worden begrepen \u2014 waardoor gelijktijdige code net zo begrijpelijk wordt als sequenti\u00eble code.\r\n\r\nJe leert de verwerking van streaminggegevens met FS2 en Pekko Streams onder de knie te krijgen en begrijpt wanneer je welke moet gebruiken. Van pull-gebaseerde \u2018lazy\u2019 pijplijnen tot reactieve streams met tegendruk: je leert robuuste gegevensverwerkingssystemen te bouwen die werkelijke werklasten aankunnen. Pipes en streamoperatoren kunnen net als functies worden samengesteld, waardoor je complexe verwerkingspijplijnen kunt bouwen uit kleine, testbare en herbruikbare stappen.\r\n\r\nDe training behandelt event sourcing en CQRS met Pekko Persistence, en leert je hoe je domeinentiteiten kunt modelleren als event-sourced actors, hoe je command- en event-handlers implementeert en hoe je read-side projecties bouwt. Je leert ook hoe je pure domeinlogica kunt scheiden van de infrastructuur \u2014 zodat command-handlers klein, lokaal testbaar en combineerbaar blijven naarmate het systeem groeit.\r\n\r\nTen slotte integreer je al deze tools in een gelaagde, productieklaar architectuur \u2014 die teststrategie\u00ebn, configuratiebeheer, dependency injection, observability en implementatie omvat. Tagless final en Resource bieden je samenstelbare applicatielagen waarin elke component afzonderlijk kan worden begrepen. Het afstudeerproject biedt je de kans om alles wat je hebt geleerd toe te passen op een echt probleem. In een tijdperk waarin AI steeds meer code genereert, verschuift de nadruk van het schrijven van code naar het zelfverzekerd beoordelen en verifi\u00ebren ervan \u2014 lokale redenering en sterke typen zorgen ervoor dat door AI gegenereerde code betrouwbaar is.<\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>","field_BrokersfeedFormat":"<h2 class=\"heading block-accordion-item__title\" data-id=\"8202ac42\">Programma-onderwerpen<\/h2>\r\n<div id=\"c90e234c\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" role=\"region\" aria-hidden=\"false\" aria-labelledby=\"0ab48399\">\r\n<div class=\"block-accordion-item__content\">\r\n<div class=\"wrapper wrapper--simple\" data-id=\"4938edd4\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"eb89183c\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"1f495379\"><strong>Sessie 1 \u2014 Functionele basisbeginselen en ADT\u2019s<\/strong><\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"1c9c5457\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"fb7bd49b\">\r\n<ul class=\"lists block-lists__lists\" data-id=\"eea9bb14\">\r\n \t<li>Functies van hogere orde, closures en onveranderlijkheid<\/li>\r\n \t<li>Recursie en staartrecursie met @tailrec<\/li>\r\n \t<li>Patroonherkenning en uitputtende controle<\/li>\r\n \t<li>Producttypen (case-klassen) en somtypen (enums)<\/li>\r\n \t<li>ADT-ontwerppatronen, structurele recursie en fold<\/li>\r\n \t<li>Persistente verzamelingen: List, Vector, Map<\/li>\r\n \t<li>LazyList en luie evaluatie<\/li>\r\n \t<li>Live coderen: Domeinmodellering met ADT\u2019s<\/li>\r\n<\/ul>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"49a3093e\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"a0744b50\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"4d025d80\"><strong>Sessie 2 \u2014 Foutafhandeling en typeklassen<\/strong><\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"62ffbf80\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"fca21429\">\r\n<ul class=\"lists block-lists__lists\" data-id=\"ab645441\">\r\n \t<li>Optie voor ontbrekende waarden, ofwel voor \u2018fail-fast\u2019-fouten<\/li>\r\n \t<li>Gevalideerd voor het optellen van fouten met mapN<\/li>\r\n \t<li>Foutafhandeling opstellen met for-comprehensions<\/li>\r\n \t<li>Het typeklassepatroon in Scala 3: traits, given, using<\/li>\r\n \t<li>Semigroep, mono\u00efde, functor \u2014 theorie en praktijk<\/li>\r\n \t<li>Inleiding tot de Cats-bibliotheek en de bijbehorende syntaxisuitbreidingen<\/li>\r\n \t<li>Live coderen: validatiepijplijn voor formulieren met Validated<\/li>\r\n \t<li>Aangepaste typeklasse-instanties implementeren en afleiden<\/li>\r\n<\/ul>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"0592a63a\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"449ea50a\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"45bc7946\"><strong>Sessie 3 \u2014 Monaden en geavanceerde typen<\/strong><\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"129ac798\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"3d4734a8\">\r\n<ul class=\"lists block-lists__lists\" data-id=\"4d6346e7\">\r\n \t<li>Basisbegrippen van monaden: flatMap, pure en de monadewetten<\/li>\r\n \t<li>For-comprehensions als monadische sequenti\u00ebring<\/li>\r\n \t<li>Reader-monade voor afhankelijkheidsinjectie<\/li>\r\n \t<li>Writer-monade voor logboekregistratie en audittrajecten<\/li>\r\n \t<li>Staatsmonade voor berekeningen met toestandsinformatie<\/li>\r\n \t<li>Eval voor stapelveilige lazy-evaluatie<\/li>\r\n \t<li>Monad-transformatoren: OptionT, EitherT<\/li>\r\n \t<li>Applicative versus monade: onafhankelijke versus afhankelijke berekeningen<\/li>\r\n \t<li>Traverse en Sequence: geneste containers omdraaien<\/li>\r\n \t<li>Typen van hogere orde (F[_]) en variantie<\/li>\r\n<\/ul>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"cee9ab01\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"cdfb4f46\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"a03f149a\"><strong>Sessie 4 \u2014 Cats Effect &amp; Concurrency<\/strong><\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"c7763d0a\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"0fca01e7\">\r\n<ul class=\"lists block-lists__lists\" data-id=\"0eaee8ef\">\r\n \t<li>Het JVM-threadmodel en de beperkingen daarvan voor grootschalige parallelliteit<\/li>\r\n \t<li>Futures &amp; Promises: voordelen, nadelen en referenti\u00eble transparantie<\/li>\r\n \t<li>De IO-monade: pure, delay, suspend en lazy evaluatie<\/li>\r\n \t<li>Foutafhandeling bij I\/O: attempt, handleErrorWith, recoverWith<\/li>\r\n \t<li>Beheer van bronnen met `bracket` en `Resource.make`<\/li>\r\n \t<li>Concurrency op basis van vezels: starten, deelnemen, annuleren<\/li>\r\n \t<li>Parallelle samenstelling: parMapN, parTraverse, parTupled<\/li>\r\n \t<li>Parallelle primitieven: Ref, Deferred, Queue<\/li>\r\n \t<li>Live coderen: gelijktijdige webscraper met fibers<\/li>\r\n<\/ul>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"8a8be515\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"eaa234ed\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"2ead723f\"><strong>Sessie 5 \u2014 Streamen met FS2<\/strong><\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"00b42fad\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"f44f77c9\">\r\n<ul class=\"lists block-lists__lists\" data-id=\"d41db24c\">\r\n \t<li>Waarom streaming? Batchverwerking versus incrementele verwerking<\/li>\r\n \t<li>Stream[F, O]: de kernabstractie en het op \u2018pull\u2019 gebaseerde model<\/li>\r\n \t<li>Streams aanmaken: emit, emits, range, iterate, eval<\/li>\r\n \t<li>Transformeren: map, filter, flatMap, scan, take, drop<\/li>\r\n \t<li>Chunking voor effici\u00ebnte batchverwerking<\/li>\r\n \t<li>Effectieve streaming: evalMap, evalTap, evalFilter<\/li>\r\n \t<li>Pipes: samenstelbare, herbruikbare streamtransformatoren<\/li>\r\n \t<li>Veiligheid van bronnen in streams met bracket en Stream.resource<\/li>\r\n \t<li>Parallelle streams: merge, parJoin, parEvalMap<\/li>\r\n \t<li>Foutafhandeling: herstel-, herhalings- en uitwijkpatronen<\/li>\r\n \t<li>Live coderen: realtime gegevenspijplijn<\/li>\r\n<\/ul>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"a3c6bd20\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"27906b63\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"297bd864\"><strong>Sessie 6 \u2014 Pekko Streams &amp; Event Sourcing<\/strong><\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"4050859b\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"29ce4985\">\r\n<ul class=\"lists block-lists__lists\" data-id=\"008f7b99\">\r\n \t<li>De Reactive Streams-specificatie en tegendruk<\/li>\r\n \t<li>De kern van Pekko Streams: bron, stroom, bestemming en materialisatie<\/li>\r\n \t<li>Stream-bewerkingen: map, filter, mapAsync, grouped, sliding<\/li>\r\n \t<li>Graph DSL: Broadcast, Merge en complexe topologie\u00ebn<\/li>\r\n \t<li>Tegenstroomstrategie\u00ebn en buffering<\/li>\r\n \t<li>FS2 versus Pekko Streams: wanneer gebruik je welke?<\/li>\r\n \t<li>Basisprincipes van het actormodel met Pekko-getypeerde acteurs<\/li>\r\n \t<li>Concepten van event sourcing: levenscyclus van commando \u2192 gebeurtenis \u2192 toestand<\/li>\r\n \t<li>EventSourcedBehavior met de Effect API<\/li>\r\n \t<li>Momentopnames, het labelen van gebeurtenissen en herstel<\/li>\r\n \t<li>CQRS: het scheiden van schrijf- en leesmodellen<\/li>\r\n \t<li>Streaming van projecties aan de leeszijde<\/li>\r\n \t<li>Live coderen: Een op gebeurtenissen gebaseerd winkelwagentje met CQRS-projectie<\/li>\r\n<\/ul>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"4fe620a6\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"6463a321\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"47c914c4\"><strong>Sessie 7 \u2014 Integratie- en productiepatronen<\/strong><\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"7240d8b1\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"ee027fef\">\r\n<ul class=\"lists block-lists__lists\" data-id=\"f556a308\">\r\n \t<li>Cats + Cats Effect + FS2 + Pekko combineren in \u00e9\u00e9n toepassing<\/li>\r\n \t<li>Een brug slaan tussen IO en Future op systeemgrenzen<\/li>\r\n \t<li>Instanties van typeklassen voor domeintypen (Monoid, Show, Order)<\/li>\r\n \t<li>Schaalbaarheid van op gebeurtenissen gebaseerde opdrachtverwerkers: op status gebaseerde afhandeling, zuivere domeinlagen, uitgebreide statustypen<\/li>\r\n \t<li>Gelaagde architectuur met tagloze finale (F[_])<\/li>\r\n \t<li>Foutafhandeling tussen lagen: Either, Validated, EitherT<\/li>\r\n \t<li>Samenstelling van hulpbronnen en levenscyclusbeheer<\/li>\r\n \t<li>Teststrategie\u00ebn: tests van zuivere functies, IO-tests, tagloze definitieve testdoubles<\/li>\r\n \t<li>Configuratiebeheer met case-klassen<\/li>\r\n \t<li>Afhankelijkheidsinjectie in FP: constructorparameters, Reader, tagless final, Resource-koppeling<\/li>\r\n \t<li>Gestructureerde logboekregistratie en op referenties gebaseerde statistieken<\/li>\r\n \t<li>Vlotte afsluiting met IOApp en Deferred<\/li>\r\n \t<li>Overwegingen bij de implementatie: JVM-tuning, containerisatie, statuscontroles<\/li>\r\n \t<li>Live coderen: ge\u00efntegreerde pijplijn voor gebeurtenisverwerking<\/li>\r\n \t<li>Verfijning van het afstudeerproject en vraag-en-antwoordronde<\/li>\r\n<\/ul>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"e2d94979\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"4972e3a7\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"510caaa8\"><strong>Sessie 8 \u2014 Workshop afstudeerproject<\/strong><\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"cbaaca6c\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"75391b57\">\r\n<ul class=\"lists block-lists__lists\" data-id=\"6adc848a\">\r\n \t<li>Projectpresentaties (elk 10\u201315 min.)<\/li>\r\n \t<li>Rondleiding door de architectuur en live demo<\/li>\r\n \t<li>Groepsbeoordeling van de code en bespreking van best practices<\/li>\r\n \t<li>Terugblik op veelvoorkomende patronen en antipatronen<\/li>\r\n \t<li>Overzicht van geavanceerde onderwerpen: optica, programmeren op typeniveau<\/li>\r\n \t<li>Aanvullende leermiddelen en volgende stappen<\/li>\r\n<\/ul>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>","field_BrokersfeedSubjects":"<h2 class=\"heading block-accordion-item__title\" data-id=\"44bfdcd6\">Dag 1: Functionele basisprincipes<\/h2>\r\n<div id=\"fc7f7222\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" role=\"region\" aria-hidden=\"false\" aria-labelledby=\"8bee21a4\">\r\n<div class=\"block-accordion-item__content\">\r\n<div class=\"wrapper wrapper--simple\" data-id=\"887cd462\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"be33442d\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"eec4cf23\">Leg een stevige basis in puur functioneel Scala 3. Je leert alles over algebra\u00efsche gegevenstypen, patroonherkenning en structurele recursie, waarna je verdergaat met functionele foutafhandeling met Option, Either en Validated. Ontdek het typeklassepatroon met behulp van contextuele abstracties in Scala 3, en werk met de belangrijkste Cats-typeklassen: Semigroup, Monoid, Functor, Applicative en Monad. De dag wordt afgesloten met geavanceerde monadische compositie: Reader-, Writer-, State- en Eval-monaden, monad-transformatoren (OptionT, EitherT), Traverse, Sequence en types van hogere orde (F[_]) \u2014 hiermee krijg je de tools in handen om code te schrijven waarbij elk onderdeel lokaal kan worden begrepen en zonder verrassingen kan worden samengesteld.<\/p>\r\n\r\n<h2 class=\"heading block-accordion-item__title\" data-id=\"99cafbf3\">Dag 2: Effecten, streaming en event sourcing<\/h2>\r\n<div id=\"76014320\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" role=\"region\" aria-hidden=\"false\" aria-labelledby=\"ee1c611b\">\r\n<div class=\"block-accordion-item__content\">\r\n<div class=\"wrapper wrapper--simple\" data-id=\"3f75995f\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"6a4394cd\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"f566b268\">Krijg grip op bijwerkingen en gelijktijdigheid met Cats Effect. Je leert over de IO-monade en referenti\u00eble transparantie, beheert resources met `bracket` en `Resource.make`, en bouwt op fibers gebaseerde gelijktijdige programma\u2019s met behulp van `parMapN`, `parTraverse`, `Ref`, `Deferred` en `Queue`. Vervolgens leer je alles over streaming met FS2 \u2014 op pull gebaseerde pijplijnen, pipes, chunking, gelijktijdige streams en resourceveiligheid. Daarna verken je Pekko Streams: Source, Flow, Sink, materialisatie, de Graph DSL en backpressure-strategie\u00ebn. De dag wordt afgesloten met event sourcing en CQRS met behulp van Pekko Persistence \u2014 EventSourcedBehavior, de Effect-API, snapshots, het taggen van events, herstel en streaming-projecties aan de leeszijde.<\/p>\r\n\r\n<h2 class=\"heading block-accordion-item__title\" data-id=\"017e93aa\">Dag 3: Integratie, productie en afsluitend project<\/h2>\r\n<div id=\"94650104\" class=\"block-accordion-item__panel js-block-accordion-item-panel\" role=\"region\" aria-hidden=\"false\" aria-labelledby=\"4c05c86e\">\r\n<div class=\"block-accordion-item__content\">\r\n<div class=\"wrapper wrapper--simple\" data-id=\"3e0e50a6\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"1c51b511\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"4341b483\">Breng alles samen in een gelaagde architectuur die geschikt is voor productieomgevingen. Je combineert Cats, Cats Effect, FS2 en Pekko in \u00e9\u00e9n enkele applicatie, slaat een brug tussen IO en Future op systeemgrenzen en past tagless final toe voor samenstelbare, testbare lagen. Onderwerpen zijn onder meer teststrategie\u00ebn (pure functietests, IO-tests, tagless final test doubles), configuratiebeheer, dependency injection, gestructureerde logboekregistratie, op Ref gebaseerde metrics en graceful shutdown met IOApp en Deferred. De dag wordt afgesloten met presentaties van afstudeerprojecten, architectuurdoorlopen, groepsmatige codereviews, een terugblik op patronen en antipatronen, en een overzicht van verdere geavanceerde onderwerpen, waaronder optics en programmeren op typeniveau.<\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>","field_BrokersfeedTakeaways":"<div class=\"wrapper wrapper--simple\" data-id=\"35445f18\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-heading\" data-id=\"86a0ce3c\">\r\n<h3 class=\"heading block-heading__heading\" data-id=\"c24a84e3\">Belangrijkste leerdoelen<\/h3>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"45c1e840\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"fd3f1c8e\">\r\n<ol class=\"lists block-lists__lists\" data-id=\"5b8cd76c\">\r\n \t<li>Pas twee basisprincipes toe \u2014 lokale redenering en compositie \u2014 die functionele Scala-code standaard leesbaar, testbaar en onderhoudbaar maken<\/li>\r\n \t<li>Leer het Cats-ecosysteem (Cats, Cats Effect, FS2) grondig kennen voor functioneel Scala van productiekwaliteit<\/li>\r\n \t<li>Ontwikkel gelijktijdige, op fibers gebaseerde applicaties die schaalbaar zijn zonder de complexiteit van threads<\/li>\r\n \t<li>Ontwerp en implementeer event-sourced systemen met CQRS met behulp van Pekko Persistence<\/li>\r\n \t<li>Ontwikkel streaming-datapijplijnen met zowel FS2 als Pekko Streams<\/li>\r\n \t<li>Pas geavanceerde functies van het typesysteem \u2014 typeklassen, monaden, types van hogere orde en contextuele abstracties \u2014 vol vertrouwen toe<\/li>\r\n \t<li>Rond je opleiding af met een praktijkgericht afstudeerproject waarin de concepten van alle drie de dagen tot uiting komen<\/li>\r\n<\/ol>\r\n<\/div>\r\n<\/div>\r\n<\/div>","field_BrokersfeedTargetAudience":"<div class=\"wrapper\" data-id=\"f7d7e42a\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-heading\" data-id=\"c4a1cb4d\">\r\n<h2 class=\"heading block-heading__heading\" data-id=\"6b2bbee1\">Voor wie is deze training?<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper\" data-id=\"3e48ce20\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-columns\" data-id=\"621f1a48\">\r\n<div class=\"block-column\" data-id=\"b547d7e1\">\r\n<div class=\"wrapper wrapper--simple\" data-id=\"7ae7c7a9\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"914e4857\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"4c732d2f\">Deze training is bedoeld voor elke ontwikkelaar of architect die:<\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper wrapper--simple\" data-id=\"9ebb88ba\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-lists\" data-id=\"3ae5aa80\">\r\n<ul class=\"lists block-lists__lists\" data-id=\"155ae540\">\r\n \t<li>Scala schrijven dat lokaal gemakkelijk te begrijpen is en zich op een overzichtelijke manier laat samenstellen \u2014 van afzonderlijke functies tot een volledige systeemarchitectuur<\/li>\r\n \t<li>ga verder dan de basissyntaxis van Scala en verdiep je in geavanceerde functies van het typesysteem en het Cats-ecosysteem<\/li>\r\n \t<li>leer hoe je gelijktijdige, streaming- en event-based applicaties op functionele wijze bouwt<\/li>\r\n \t<li>de vaardigheden en werkwijzen verwerven die nodig zijn om leiding te geven aan een team dat functionele Scala-systemen ontwikkelt<\/li>\r\n \t<li>afstuderen met een afstudeerproject dat direct in je portfolio kan worden opgenomen en waarin je laat zien hoe functioneel programmeren in de praktijk wordt toegepast<\/li>\r\n<\/ul>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>","field_BrokersfeedPrerequisites":"<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"a8bb0cf9\">\r\n<p class=\"paragraph block-bullet-item__paragraph\" data-id=\"cf282a2c\">Basiskennis van de Scala-syntaxis en -collecties, of ruime ervaring met een andere JVM-taal, zoals Java of Kotlin<\/p>\r\n\r\n<\/div>\r\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"33aea3a1\"><i class=\"icon block-bullet-item__icon\" data-id=\"e9b5aa87\" aria-hidden=\"true\"><\/i>\r\n<p class=\"paragraph block-bullet-item__paragraph\" data-id=\"53426651\">Basisbegrippen van OOP<\/p>\r\n\r\n<\/div>\r\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"e41ebd48\"><i class=\"icon block-bullet-item__icon\" data-id=\"b3e5bcf4\" aria-hidden=\"true\"><\/i>\r\n<p class=\"paragraph block-bullet-item__paragraph\" data-id=\"9a4ae38b\">Bereidheid om tijd te investeren in voorbereidende leesopdrachten en oefeningen na de sessies, inclusief het stapsgewijs werken aan een afsluitend project<\/p>\r\n\r\n<\/div>\r\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"a53fdb17\"><i class=\"icon block-bullet-item__icon\" data-id=\"aab2dba1\" aria-hidden=\"true\"><\/i>\r\n<p class=\"paragraph block-bullet-item__paragraph\" data-id=\"3add77b7\">Neem je eigen laptop mee.<\/p>\r\n\r\n<\/div>","field_BrokersfeedCertificationValue":"-","field_BrokersfeedNextSteps":"<div class=\"wrapper\" data-id=\"e72271ea\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-heading\" data-id=\"0c5f1d84\">\r\n<h2 class=\"heading block-heading__heading\" data-id=\"b8ec203f\">Wat moet je nog meer weten?<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"wrapper\" data-id=\"41c52c78\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-columns\" data-id=\"2806a9f5\">\r\n<div class=\"block-column\" data-id=\"91df0124\">\r\n<div class=\"wrapper wrapper--simple\" data-id=\"e716fd73\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-paragraph\" data-id=\"925cc726\">\r\n<p class=\"paragraph block-paragraph__paragraph\" data-id=\"d3cebe7c\">De training bestaat uit drie intensieve dagen waarbij gebruik wordt gemaakt van de \u2018Training from the Back of the Room\u2019 (TBR)-technieken. Elke sessie combineert interactieve lezingen met REPL-gestuurde live-codering, praktische oefeningen en quizonderdelen. Elke dag bouwt voort op de vorige, dus het is belangrijk om alle drie de dagen bij te wonen om het maximale uit het programma te halen.<\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"block-column\" data-id=\"c939c188\">\r\n<div class=\"wrapper wrapper--simple\" data-id=\"fb3e291d\" data-bg-on-inner=\"false\">\r\n<div class=\"wrapper__inner\">\r\n<div class=\"block-bullet-list\">\r\n<p class=\"paragraph block-bullet-list__paragraph\" data-id=\"ddbfad86\">Hoofdleerboek: \u2018Functional Programming Strategies in Scala with Cats\u2019. Alle codevoorbeelden, oefeningen en oplossingen zijn beschikbaar in een speciale Git-repository.<\/p>\r\n\r\n<div class=\"block-bullet-list__columns\">\r\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"adc9e816\"><i class=\"icon block-bullet-item__icon\" data-id=\"930aa7c2\" aria-hidden=\"true\"><\/i>\r\n<p class=\"paragraph block-bullet-item__paragraph\" data-id=\"99d63ba9\">Neem je eigen laptop mee waarop Java 21 of hoger en sbt zijn ge\u00efnstalleerd. Aanbevolen editors: VS Code met Metals, IntelliJ IDEA met de Scala-plug-in of Neovim.<\/p>\r\n\r\n<\/div>\r\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"7e3da151\"><i class=\"icon block-bullet-item__icon\" data-id=\"513dc626\" aria-hidden=\"true\"><\/i>\r\n<p class=\"paragraph block-bullet-item__paragraph\" data-id=\"939a8e1f\">Elke sessie omvat oefeningen en werk aan een afstudeerproject om de behandelde concepten tussen de lesdagen door te verankeren.<\/p>\r\n\r\n<\/div>\r\n<div class=\"block-bullet-item js-block-bullet-item\" data-id=\"3a6bd66b\"><i class=\"icon block-bullet-item__icon\" data-id=\"3fceb8d7\" aria-hidden=\"true\"><\/i>\r\n<p class=\"paragraph block-bullet-item__paragraph\" data-id=\"882a866f\">Tijdens de sessies wordt gebruikgemaakt van TBR-technieken: interactieve colleges, REPL-gestuurd live coderen, praktische oefeningen en quizonderdelen om de betrokkenheid en het leerbehoud te maximaliseren.<\/p>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>","field_BrokersfeedBanner":67535,"field_BrokersfeedImages":"","course_xebia_event_ids":"","course_xebia_event_group_id":"","course_xebia_discipline":"","course_xebia_sorting_order":5},"raw_content":null,"_links":{"self":[{"href":"https:\/\/academy.xebia.com\/nl\/wp-json\/wp\/v2\/courses\/67801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/academy.xebia.com\/nl\/wp-json\/wp\/v2\/courses"}],"about":[{"href":"https:\/\/academy.xebia.com\/nl\/wp-json\/wp\/v2\/types\/course"}],"author":[{"embeddable":true,"href":"https:\/\/academy.xebia.com\/nl\/wp-json\/wp\/v2\/users\/30"}],"version-history":[{"count":2,"href":"https:\/\/academy.xebia.com\/nl\/wp-json\/wp\/v2\/courses\/67801\/revisions"}],"predecessor-version":[{"id":67804,"href":"https:\/\/academy.xebia.com\/nl\/wp-json\/wp\/v2\/courses\/67801\/revisions\/67804"}],"wp:attachment":[{"href":"https:\/\/academy.xebia.com\/nl\/wp-json\/wp\/v2\/media?parent=67801"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/academy.xebia.com\/nl\/wp-json\/wp\/v2\/tags?post=67801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}