Welcome

Intro

Welcome to Software Develop at Saxion! Let's get you up to speed...

Linux

Install Manjaro Linux on your laptop and get comfortable with it, as that's the operating system we'll be using for the rest of the programme.

Life as a Developer

Software is usually developed in teams. This can be a lot of fun, but it also brings some challenges... This module provides you with some theory about working as part of a professional development team, as part of a larger company. You'll also practice your presentation skills.

Learning goals:

  • Know what it means to be an employee in terms of expectations, procedures, the law, contracts and salary.
  • Employ personal time management techniques in order to be happier, healthier and more effective.
  • Reflect on the use of various software project management models and their differences.
  • Understand the function of and interaction between employee roles within software companies.
  • Create simple software in a small, informally managed team.

5 days
Forty-two Sessions

Every week we'll take an hour of your time to discuss an important topic with your study coaching group.

Pair programming

Do pair programming on at least three assignments with at least two different fellow students.

3 days
Coding Sessions

Watch and think along as you'll be building an application a bit above your current skill level in a small group lead by a teacher.

Business safari

Experience life at a software company!

Business safari

Experience life at a software company!

2 days
End-of-quarter project

A two-day team project.

2 days
End-of-quarter project

A two-day team project.

2 days
End-of-quarter project

A two-day team project.

5 ects
0 days
Grading

The previous assignments will make up your grade.

Python programming 1&3

Python is a programming language that is relatively easy to use for beginners, but commonly used by experts as well. It is a general purpose language, meaning it can be used to create many types of computer programs. It is often used for quickly automating tasks, data analysis, artificial intelligence and for creating web applications. In this module, we'll learn the basics of imperative programming using Python.

Learning goals:

  • Declare and assignment variables.
  • Output text and read user input.
  • Branch using if, elif and else.
  • Use loops.
  • Use comments and whitespace to improve readability.
  • Define and use functions that take arguments and return a value.
  • Give variables and functions concise but descriptive names.
  • Convert other types to string, concatenate strings and take substrings.
  • Create, search, modify and iterate lists.
  • Find and solve bugs in a program using a debugger.
  • Use dictionaries to model relations.
  • Read and write files.
  • Use modules to split a program into logical parts.
  • Gracefully handle errors by throwing and catching exceptions.
Depends on linux

Introduction to Python

Implement your first interactive application.

Loops

Implement your first loopy application.

Functions & string manipulation

Define and use functions that take arguments and return a value. Convert other types to string, concatenate strings and take substrings. Give variables and functions concise but descriptive names.

pair
Lists

Implement your first interactive application.

Debugging & exceptions

Use a debugger to find bugs in your code faster.

Dictionaries

Use dictionaries to model relations.

Working with files

Read and write files.

Modules

Use modules to split a program into logical parts.

Practice exam

Implement a well-known board game as a terminal application.

5 ects
Exam

Implement a well-known board game as a terminal application.

Websites 1&3

At its core, the world wide web consists of a collection of documents that link to each other. The documents are written using HTML and styled using CSS. Both are languages intended to be understood by computers, but are not programming languages. We will learn these languages to be able to create decent-looking web pages. Later on, we'll build on this knowledge to create web applications.

Learning goals:

  • Write valid and semantic HTML.
  • Apply styling to a site using plain CSS.
  • Apply basic graphical design principles for fonts, colors, spacing and alignment.
  • Create web sites that look and work well on any screen size.
  • Use icons and fonts.
  • Construct HTML forms to collect user input.
Depends on linux

HTML

Write valid and semantic HTML.

2 days
pair
CSS basics

Apply styling to a site using plain CSS.

Graphics design basics

Apply basic graphical design principles for fonts, colors, spacing and alignment.

Web forms, fonts & icons

Construct HTML forms to collect user input. Use icons and fonts. Apply basic graphical design principles for fonts, colors, spacing and alignment.

2 days
pair
Responsive layouts

Create web sites that look and work well on any screen size. Apply styling to a site using plain CSS. Write valid and semantic HTML.

Advanced CSS

Pseudo classes, transitions, animations, opacity, shadows, gradients and background images.

Practice exam

Based on a description, create a decent-looking responsive static web site.

5 ects
Exam

Based on a description, create a decent-looking responsive static web site.

SQL databases

Applications usually work on (large amounts of) information. Such information is often stored in a database that is controlled by a database management system. The system we'll be working with is PostgreSQL. Like other well-known database systems (such as Oracle, MySQL and Microsoft SQL Server) one can interact with it using the SQL computer language in order to store and retrieve data. We will be learning how to represent real-world objects as an SQL database, and how to efficiently generate all kinds of useful reports from this data.

Learning goals:

  • Use SQL select queries to read, search, write, update and delete records.
  • Write SQL queries involving joins.
  • Describe real-world objects using Entity Relationship Diagrams.
  • Use GROUP BY and aggregate functions to calculate statistics.
  • Use subqueries.
  • Create normalized database tables based on an Entity Relationship Diagram.
  • Use indexes to enhance query performance.
  • Use foreign keys to guarantee data consistency.
  • Use views to simplify complicated database queries.
Depends on linux

Queries

Use SQL select queries to read, search, write, update and delete records.

Join the fun

Write SQL queries involving joins.

Aggregate functions

Use GROUP BY and aggregate functions to calculate statistics.

pair
Modifying data and subqueries

Use subqueries. Use SQL select queries to read, search, write, update and delete records.

Data modeling

Describe real-world objects using Entity Relationship Diagrams. Use foreign keys to guarantee data consistency.

Schemas

Create normalized database tables based on an Entity Relationship Diagram. Use foreign keys to guarantee data consistency.

pair
Indexes & views

Use indexes to enhance query performance. Use views to simplify complicated database queries.

Practice exam

Based on a description, create a schema and write a series of well-performing queries.

5 ects
Exam

Based on a description, create a schema and write a series of well-performing queries.

Object-Oriented Programming

Object-Oriented Programming (OOP) is a way of programming using objects that contain data as well as code. This can make it easier to organize larger computer programs. We'll learn how to apply the various OOP concepts in the C# language.

Learning goals:

  • Create and use simple classes with a constructor, methods and instance variables.
  • Create inheritance hierarchies to model real-world objects.
  • Use static methods and class variables.
  • Utilize third-party libraries.
  • Create well-described interfaces that hide underlying details.
  • Decompose a larger program into logical parts.
  • Effectively use a documentation generator to document a public interface.
  • Use refactoring to improve code quality.
  • Implement design based on class diagrams.
  • Understand and implement event-based programming.
Depends on python-exam

Hello C#

Learning the C# programming language by making an RPG game.

Class Magic

Creating your first classes, objects, properties and methods.

Encapsulation

Private parts and uniform access.

Inheritance

Create inheritance hierarchies to model real-world objects.

Class diagrams

Implement design based on class diagrams.

Abstraction

Building a game using abstraction

Event Based Programming

Event Based Programming

Dynamic Applications

Building a dynamic game using Avalonia

2 days
NOT READY Practice exam

Implement a library and two OOP applications that use it.

5 ects
2 days
NOT READY Exam

Implement a library and two OOP applications that use it.

Web Applications 2&4

In period 1.1 we learned how to create a static (non-interactive) web page. In this module, we'll learn how to add interactivity by adding a dynamic backend consisting of Python, the Flask framework and an SQL database. We'll also learn about the use of a test plan, to make sure your dynamic web site does what it's supposed to do.

Learning goals:

  • Create web apps using Flask and Jinja2.
  • Create Python programs that fetch and modify data in a database.
  • Use an Object Relation Mapper.
  • Implement user authentication and authorization following best practices.
  • Recognize and protect against common security bugs in web apps.
  • Create validated web forms.
Depends on python-exam Depends on html-forms

Flask basics

Use Flask and Jinja2 to create a dynamic web site.
Depends on sql-exam

Python SQL

Create Python programs that fetch and modify data in a PostgreSQL database.

Flask SQL

Add a database, multi-user support and game review to Lingo.

2 days
Hacking

Recognize and protect against common security bugs in web apps. Implement user authentication and authorization following best practices.
Depends on cs-inheritance

2 days
pair
Object Relational Mapping

Use an Object Relation Mapper.

Form handling

Handle forms and field validation.

2 days
Practice exam

Implement a secure dynamic web site, using HTML, CSS, Flask, SQLAlchemy and WTForms, based on a given set of wireframes.

5 ects
2 days
Exam

Implement a secure dynamic web site, using HTML, CSS, Flask, SQLAlchemy and WTForms, based on a given set of wireframes.

UX design 2&4

Up until this point in the study program, you have always been provided with a pretty clear description of what the end result of an assignment should actually do. In this module, you'll learn techniques to create a functional design yourself, based on the wishes of a client. To keep your designs very practical, our focus will be on the User Experience (UX) part of the design. You will design user interactions using wireframes and descriptions of interactivity.

Learning goals:

  • Effectively interview stakeholders with regard to requirements.
  • Translate business requirements to a functional design.
  • Conduct user studies.
  • Draw wireframes to rapidly describe user interfaces.
  • Describe real-world objects using Entity Relationship Diagrams.
  • Create UX designs for different device types.
Depends on linux

Domain modeling and wireframing

Create a domain model and wireframes for a case description that has been worked out using Example Mapping.

pair
Example Mapping

Create an example map, a domain model and wire-frames for a case description.

User testing

Take an existing design, user test it, learn about human factors, make a redesign

2 days
pair
A more complex design

Create interview questions, a domain model and a UX design for a more complex case study.

Ideation

Before creating a design for your new app you need to come up with an idea. But how to choose an idea that will work.

5 ects
2 days
UX Project

Create a complete functional design for an app idea you have invented.

Algorithms & data structures 1&3

An algorithm is a list of rules to follow in order to solve a problem. A data structure is a particular way of organizing data so that it can be used effectively. We'll be learning to select suitable algorithms and data structures, to reason about their efficiencies and to implement them. We'll approach this by studying a few of the common ones. Along the way, we'll also learn how to create a properly documented and unit-tested self-contained module out of them.

Learning goals:

  • Create unit tests to validate whether a module works as intended.
  • Implement algorithms expressed in pseudo-code.
  • Select algorithms based on algorithmic time/space complexity.
  • Knows how and when to use arrays (lists), maps (dictionaries), linked lists and trees.
  • Effectively use recursive functions.
  • Use graphs to store and process data.
  • Understand, implement and use sorted data structures such as trees and heaps.
  • Use backtracking to find optimal solutions to a class of problems.
Depends on python-exam

Algorithms & complexity

Select algorithms based on algorithmic time/space complexity.

Data structures

Knows how and when to use arrays (lists), maps (dictionaries), linked lists and trees.

2 days
pair
Recursion

Effectively use recursive functions.

Sorting

Implement algorithms expressed in pseudo-code.
Depends on classes

Priority queues

Efficiently keep data in a (large) list ordered at all times using trees or heaps.

Backtracking

Use backtracking to find optimal solutions to a class of problems.

2 days
Graphs

Use graphs to store and process data.

Practice exam

Solve an algorithmic problem.

5 ects
Exam

Solve an algorithmic problem.

Frontends 1&3

Develop single page, offline and progressive web applications that look and feel similar to native. Automate executable specifications to drive development and validate that your implementation meets acceptance criteria.

Learning goals:

  • Program in JavaScript and Typescript.
  • Create single-page applications in JavaScript.
  • Create single-page applications using a framework.
  • Create web-based apps that look and feel similar to native apps.
  • Create progressive web apps that install as native apps and work offline.
  • Write executable specifications and automate them through the user interface.
Depends on webapps-exam

JavaScript and the DOM

Enhance a web page using client-side JavaScript.

Vanilla JS apps

Let's create a spreadsheet-like table editor in pure JavaScript, without the use of a framework.

Local Progressive Web Apps

Have our spreadsheet save data locally and make it run like a smartphone app, even without internet access!

Vue.js

Rewrite and improve our spreadsheet, using components and reactivity from the Vue.js framework.

Routing & TypeScript

Let's create a single-page application that has multiple pages?! And we'll use yet another new language to do it: TypeScript!

Quasar Framework

Learn to use the Quasar user-interface component library to make your app look like a native mobile application.

NOT READY Hybrid apps

Learn about various options to get your JavaScript app in the app stores, and how to match native capabilities.

5 ects
3 days
NOT READY Frontends exam

You'll get a case description for which you'll need to implement a hybrid Progressive Web App working with local data.

DevOps 1&3

In many working environments, software developers are not only responsible for solving problems by creating great software, but for testing and deploying it as well. In this module we'll learn about some of the tools and techniques commonly used to do this.

Learning goals:

  • Perform basic Linux system administration.
  • Automate tasks using Linux shell scripting.
  • Encapsulate applications using Docker and Docker Compose.
  • Deploy applications to a public cloud infrastructure.
  • Declare and deploy a simple infrastructure from code.
  • Perform Git commits, merges and rebases from the command line.
  • Use a web-based DevOps platform (GitLab) for issue management and merge requests.
  • Write scripts to automatically build, test and deploy apps using GitLab.
Depends on linux

2 days
IP

The Internet Protocol.

Scripting basics

Automate simple tasks using Linux shell scripts.
Depends on vanillajs

2 days
pair
Docker

Encapsulate applications using Docker and Docker Compose.

2 days
Cloud

Deploy applications to a public cloud infrastructure.

2 days
pair
Infrastructure as code

Declare and deploy a simple infrastructure from code.

CI/CD

Write scripts to automatically build, test and deploy apps using GitLab.

5 ects
2 days
Exam

Build an application using Docker and scripting.

Backends 2&4
NOT READY

Create and test a networked application.

UDP

Implement a client for a UDP-based protocol.

2 days
pair
TCP

Write an HTTP/1.1 server with a TCP-based protocol.

pair
REST

Design a tidy REST API, implement it using Express.

pair
Testing REST endpoints

Testing REST endpoints
Depends on vuejs

NOT READY REST and frontends

Build a craft beer rating app

NOT READY Fullstack

Write a backend and frontend that in realtime and partly offline.

5 ects
2 days
NOT READY Exam

Build a networked application server.

Open Source

When working for a company, software developers are often asked to improve upon pre-existing software projects. Let's learn and practice how to do that, by adding to an Open Source project of your choice! This skill will come in handy when doing your internships.

Learning goals:

  • Analyze a large and complex pre-existing code base.
  • Contribute a new feature to a pre-existing code base, fitting in with existing practices.
  • Collaborate on an online platform to contribute code.
  • Perform a thorough but considerate code review.
  • Improve your work based on a code review.
  • Present your work in a public presentation.
Depends on alg-exam Depends on webapps-exam Depends on docker

Git Introduction

Introduction to source revision control.

2 days
Practice

Practice adding a feature to a pre-existing code base: the event management system Indico.

4 days
Contribute

Implement one or more new features or bugfixes for our Learning Management System.

3 days
pair
Code review

Review somebody else's work and improve your work based on her/his review of yours.

Five-minute pitch

Publicly present your contribution.

2 days
Maintainer review

Another round of reviews this time by a maintainer, hopefully followed by a merge.

5 ects
0 days
Grading

The previous assignments will make up your grade.

Internship Planning

Once you have 55 ECTS, you can start planning your internships.

Select internship companies

Once you have 55 ECTS, you can start planning your internships.

Prepare to apply

Create a generic application, a resume and/or update your LinkedIn/GitHub/GitLab.

Apply for internships

Send out your letters!

First Internship

During the first year, you have learned to create relatively small applications by yourself. The internships are meant to teach how to cooperatively work on larger applications. It will be on the job learning, as a trainee within a professional development team. Each internship lasts for 10 full-time weeks.

Learning goals:

  • Implement software.
  • Proficiently use common technologies.
  • Quickly and independently learn to use new techniques.
  • Use automated software testing and deployment.
  • Collaborate within a development team.
Depends on internship-orientation

Finalize your internship

Found a great place to intern? Make it official!

15 ects
50 days
Intern

Work as part of a team of professional developers.

System Programming
NOT READY

Sometimes programs have tight constraints on resource usage, for example games trying to achieve maximum performance, and programs meant to run on tiny embedded computers. In this course, we will dive into meeting these constraints with a low-level program language; Rust!

Learning goals:

  • Work with binary data, bits and bytes.
  • Explain the basic operation of a CPU, and its relation to memory and I/O.
  • Understand how the call stack works.
  • Use data types, variables, control flow, functions and terminal I/O in Rust.
  • Manually manage heap memory for a simple program.
  • Use and define traits and generics in Rust.
  • Use polymorphism in Rust.
  • Understand and use pointers.
  • Optimize applications for performance.
  • Work with low-level graphics primitives.
  • Write simple programs in an assembler language.
Depends on compilers-bits

2 days
Hello Rust

Use data types, variables, control flow, functions and terminal I/O in Rust.
Depends on compilers-vm

2 days
More Rust

Use data types, variables, control flow, functions and terminal I/O in Rust.

2 days
pair
Generics, traits & lifetimes

Use and define traits and generics in Rust. Understand and use pointers.

Polymorphism

Smart pointers and dyn traits.

2 days
NOT READY Embedded project introduction

Introduction in how to build and program an embedded device.

3 days
NOT READY Embedded

Build and program an embedded device!

Graphics

Create graphical animations and run them as fast as possible.

5 ects
3 days
Exam

Use Rust to create a graphical game.

Compilers 2&4

How does a computer work? How would you program one without the use of a high-level programming language like Python? Let's find out! Next, we'll implement our own programming language parsers and compiler on top of that! Although only relatively few software developers do this type of low-level work on a regular basis, knowing about what "lies underneath" does make every developer more effective.

Learning goals:

  • Write simple programs in an assembler language.
  • Interpret or compile computer languages.
  • Create parsers for domain specific languages.
  • Write regular expressions to match complex patterns in strings.
Depends on alg-exam

2 days
Gates, bits, bytes, numbers

How does a computer work on the lowest level?

2 days
CPU

Discover how CPUs work by implementing a virtual one yourself.

pair
Assembly & the stack

Let's implement functions using a call stack in SAX16 assembly!

Regular Expressions

Learn about the swiss army knife for working with strings.

2 days
Parsers & interpreters

Build a recursive descent parser and interpreter for a simple language.

2 days
Advanced parsers and compilers

Compile a high level language to SAX16 assembler!

5 ects
2 days
Exam

Extend the Saxy language.

Technical design

A technical design gives a high-level overview of how a functional design will be implemented. Important technical decisions should be made, hopefully based on more than just gut feeling. The program should be split into logical parts and it should be clear how these parts communicate. All of this should be documented in a way that makes it easy for other software developers to understand what is going on.

Learning goals:

  • Recognize and apply common design patterns.
  • Design class diagrams for non-trivial systems.
  • Create high-level overviews of software architectures.
  • Create graphical software models using PlantUML.
  • Make methodical decisions.
  • Decompose a larger program into logical parts.
  • Design scalable systems.
  • Design reliable systems.
  • Design secure systems.
Depends on frontends-exam Depends on lms-project

2 days
Class diagrams

Design and implement the class diagram for a complex OOP application.

pair
Design patterns

Learn how to recognize and use design patterns.
Depends on cloud

5 ects
6 days
Project

Design the architecture for a software system, choosing technologies with regard for scalability, reliability and security.

Second Internship

Like the first internship, but at a (hopefully very) different organization and bringing more experience to the table. This internship (including a reflection on the differences with your earlier internship) counts for half your graduation grade.

Learning goals:

  • Implement software.
  • Proficiently use common technologies.
  • Quickly and independently learn to use new techniques.
  • Use automated software testing and deployment.
  • Collaborate within a development team.
Depends on internship-orientation

Finalize your internship

Found a great place to intern? Make it official!

15 ects
50 days
Intern

Work as part of a team of professional developers, comparing your experiences to your first internship.

Android programming (2023)

In this module, we'll learn a second programming language: Java. We'll use it to create apps for the Android platform.

Learning goals:

  • Program in Java.
  • Write multithreaded programs.
  • Create and control Views and work with Android APIs.
  • Use Android Studio to design ConstraintLayouts suitable for any screen size.
  • Create and spawn Android activities, carefully managing their lifecycles.
  • Create lists with and without a custom view on Android.
  • Exchange data with an HTTP server on Android.
  • Use Android Room to store and retrieve local data.
Depends on oop-exam

3 days
Java

Learn the Java language.

Multithreading

Write multithreaded programs.

My First App

Create your first Android application.

Layouts

Implement the user interface for an app.

Activities & lifecycles

Create and spawn Android activities, carefully managing their lifecycles.

Lists

Create lists with and without a custom view on Android.

Networking

Exchange data with an HTTP server on Android.

2 days
Room

Use Android Room to store and retrieve local data.
Depends on ux-exam

5 ects
3 days
Android Project

Create an awesome Android app of your own choosing!

Low-level programming (2023)

How does a computer work? How would you program one without the use of a high-level programming language like Python? Let's find out! And while we're at it, we'll as learn how to interface with hardware components! Although only relatively few software developers do this type of low-level work on a regular basis, knowing about what "lies underneath" does make every developer more effective.

Learning goals:

  • Work with binary data, bits and bytes.
  • Explain the basic operation of a CPU, and its relation to memory and I/O.
  • Understand how the call stack works.
  • Use data types, variables, control flow, functions and terminal I/O in Rust.
  • Manually manage heap memory for a simple program.
  • Use and define traits and generics in Rust.
  • Use polymorphism in Rust.
  • Understand and use pointers.
  • Optimize applications for performance.
  • Work with low-level graphics primitives.
  • Write simple programs in an assembler language.
Depends on alg-exam

2 days
Gates, bits, bytes, numbers

How does a computer work on the lowest level?

2 days
CPU

Discover how CPUs work by implementing a virtual one yourself.

pair
Assembly & the stack

Let's implement functions using a call stack in SAX16 assembly!
Depends on compilers-bits

2 days
Hello Rust

Use data types, variables, control flow, functions and terminal I/O in Rust.
Depends on compilers-vm

2 days
More Rust

Use data types, variables, control flow, functions and terminal I/O in Rust.

2 days
pair
Generics, traits & lifetimes

Use and define traits and generics in Rust. Understand and use pointers.

Polymorphism

Smart pointers and dyn traits.

Graphics

Create graphical animations and run them as fast as possible.

5 ects
3 days
Exam

Use Rust to create a graphical game.

Object-Oriented Programming (2023)

Object-Oriented Programming (OOP) is a way of programming using objects than contain data as well as code. This can make it easier to organize larger computer programs. We'll learn how to apply the various OOP concepts in Python.

Learning goals:

  • Create and use simple classes with a constructor, methods and instance variables.
  • Create inheritance hierarchies to model real-world objects.
  • Use static methods and class variables.
  • Utilize third-party libraries.
  • Create well-described interfaces that hide underlying details.
  • Decompose a larger program into logical parts.
  • Effectively use a documentation generator to document a public interface.
  • Use refactoring to improve code quality.
  • Implement design based on class diagrams.
Depends on python-exam

Classes

Classes, objects, attributes and methods.

Attribute access

Private attributes and uniform access.

Inheritance

Create inheritance hierarchies to model real-world objects.

Class diagrams

Implement design based on class diagrams.

2 days
pair
Static & abstract classes

Tic Tac Toe Pro, OOP-style!

Documentation & OOP libraries

Write the documentation for an OOP library and extend it.

2 days
Practice exam

Implement a library and two OOP applications that use it.

5 ects
2 days
Exam

Implement a library and two OOP applications that use it.

Teamwork (2023)

Learning goals:

  • Know what it means to be an employee in terms of expectations, procedures, the law, contracts and salary.
  • Employ personal time management techniques in order to be happier, healthier and more effective.
  • Reflect on the use of various software project management models and their differences.
  • Understand the function of and interaction between employee roles within software companies.
  • Create simple software in a small, informally managed team.

Business safari

Experience life at a software company!

Business safari

Experience life at a software company!

Business safari

Experience life at a software company!

2 days
End-of-quarter project

A two-day team project.

2 days
End-of-quarter project

A two-day team project.

2 days
End-of-quarter project

A two-day team project.

2 days
Roles & project management

What roles will you commonly find in a software company and how do they collaborate?

5 ects
0 days
Grading

The previous assignments will make up your grade.

Protocols & parsers (2023)

Many computer programs need to communicate complex data with users or with other computer programs. Protocols and computer languages exist to make this possible. We'll learn about some common protocols (such as those used by the internet) and how to work with them, about encryption, and about how to create a parser to have your program 'understand' a computer language.

Learning goals:

  • Understand the basics of the Internet Protocol.
  • Program TCP and UDP clients and servers.
  • Asynchronous programming.
  • Implement a simple protocol based on a specification.
  • Effectively apply (a)symmetric encryption.
  • Write regular expressions to match complex patterns in strings.
  • Create parsers for domain specific languages.
  • Interpret or compile computer languages.
Depends on ip

UDP

Implement a client for a UDP-based protocol.

2 days
pair
TCP & asyncio

Write asynchronous servers and clients for a TCP-based protocol.

Cryptography

Effectively apply (a)symmetric encryption.

Regular Expressions

Learn about the swiss army knife for working with strings.

2 days
Parsers & interpreters

Build a recursive descent parser and interpreter for a simple language.

2 days
Advanced parsers and compilers

Compile a high level language to SAX16 assembler!

5 ects
2 days
Exam

Create a networked application and extend Saxy.

Client-side web (2023)

Many modern web applications are 'single-page', meaning they don't have the concept of pages that you navigate between. Examples include Google Maps, WhatsApp Web and the Spotify web-client. Instead of having the server create HTML pages, the HTML is created from within the browser itself using the JavaScript programming language. The client-side JavaScript program usually communicates with one or more servers through an application programmers interface (API) to exchange data. Let's learn how to build such web apps! And yes, that implies learning JavaScript too. We'll also learn how to perform automated tests on the user interfaces that you've created.

Learning goals:

  • Program in JavaScript.
  • Use the Node.js ecosystem, including packages and build tools.
  • Create single-page applications in JavaScript.
  • Build tidy REST APIs using Node.js and express.js.
  • Manipulate the browser DOM to add interactivity to web sites.
  • Use Svelte to implement a web app.
  • Create (progressive) web apps that install as native apps and work offline.
  • Create API tests using Cypress.
  • Create end-to-end tests using Cypress.
Depends on ux-exam Depends on webapps-exam

JavaScript & the DOM

Enhance a web page using client-side-only JavaScript.

Node.js

Create a web app using Node.js.

2 days
pair
REST and test

Design a tidy REST API, implement it using Express and test it with Cypress.

2 days
Single-Page Applications

Implement SPA in vanilla JavaScript.

2 days
Svelte

Create a declarative/reactive user interface using Svelte.

End-to-end tests

End-to-end testing using Cypress.

2 days
Progressive Web Applications

Build progressive web applications, featuring offline functionality as well as SEE real-time communication.

5 ects
3 days
PWA Project

Implement front-end, backend-end and testing for a PWA of your own design.

Open Source (2023)

Learning goals:

  • Analyze a large and complex pre-existing code base.
  • Contribute a new feature to a pre-existing code base, fitting in with existing practices.
  • Collaborate on an online platform to contribute code.
  • Present your work in a public presentation.
Depends on alg-exam Depends on webapps-exam Depends on docker

Git Introduction

Introduction to source revision control.

2 days
Practice

Practice adding a feature to a pre-existing code base: the event management system Indico.

4 days
LMS42

Add features to or improve upon a pre-existing code base, for real.

Five-minute pitch

Publicly present your contribution.

5 ects
7 days
Open Source Project

Extend an Open Source project of your choosing to add some nice features.

Internship 1 (2023)

During the first year, you have learned to create relatively small applications by yourself. The internships are meant to teach how to cooperatively work on larger applications. It will be on the job learning, as a trainee within a professional development team. Each internship lasts for 10 full-time weeks.

Depends on internship-orientation

Finalize your internship

Found a great place to intern? Make it official!

48 days
Intern

Work as part of a team of professional developers.

Internship 2 (2023)

Like the first internship, but at a (hopefully very) different organization and bringing more experience to the table.

Depends on internship-orientation

Finalize your internship

Found a great place to intern? Make it official!

48 days
Intern

Work as part of a team of professional developers.

Graduation (2023)

Learning goals:

  • Create functional designs.
  • Create technical designs.
  • Implement software.
  • Apply insight to solve problems.
  • Proficiently use common technologies.
  • Quickly and independently learn to use new techniques.
  • Use automated software testing and deployment.
  • Collaborate within a development team.

45 ects
10 days
Portfolio defense

Based on the work you did in your internships and free projects, create a portfolio and publicly defend it.