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.
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.
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.
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.
- Using abstract classes and methods.
- Decompose a larger program into logical parts.
- Use refactoring to improve code quality.
- Implement design based on class diagrams.
- Understand and implement event-based programming.
Hello C#
Learn the C# programming language by making an RPG game.Class Magic
Transform your RPG to an Object Oriented solution, using classes, objects, properties and methods.Encapsulation
Apply encapsulation to our RPG to hide details and data from the outside world.Inheritance
Apply inheritance to enable classes (in our RPG) to inherit attributes and behaviors from parent classes. We practice this by adding several types of monsters.Class diagrams
Implement a Philips Hue system, based on a class diagram, which is a way to represent object oriented programs in terms of a diagram.
2 days
pair
Abstraction
Learn about static and abstract methods and classes by building an advanced version of TicTacToe.
Event Based Programming
Your first introduction into building graphical interfaces that are controlled by means of mouse and keyboard events.
2 days
Dynamic Applications
Building a graphical game with rockets and asteroids using Avalonia
Extensions
Adding new features to our Rockets & Asteroids game.
5 ects
2 days
Exam
Build a graphical application using Avalonia and by applying OOP Concepts.
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.
Flask basics
Use Flask and Jinja2 to create a dynamic web site. Depends on sql-examPython 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.
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. AI use allowed.
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.
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 cs-classesPriority 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.
- Manipulate the browser DOM to add interactivity to web sites.w
- Create single-page applications.
- Create applications using a frontend reactive component framework.
- Create web-based apps that look and feel similar to native apps.
- Create progressive web apps that behave like native apps.
- Use a frontend component library.
- Persist data locally in progressive web apps.
- Create single page applications featuring useful URLs.
- Create automated end-to-end tests for progressive web apps.
- Create hybrid apps, accessing device native functionality using web tech.
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!
2 days
Quasar Framework
Learn to use the Quasar user-interface component library to make your app look like a native mobile application.
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
Frontends exam
You'll get a case description for which you'll need to implement a full-fledged Quasar app. AI use allowed.
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:
- Understand the basics of the Internet Protocol.
- 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.
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.
Git Introduction
Introduction to source revision control.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
Create and test a networked application.
Learning goals:
- Program TCP and UDP clients and servers.
- Implement a simple protocol based on a specification.
- Use the Node.js ecosystem, including packages and build tools.
- Build tidy REST APIs using Node.js and express.js.
- Securing networked applications.
- Create apps based on realtime server-to-client communication.
- Create API tests.
- Build fullstack application that use REST apis and realtime communication.
- Understanding Cross-origin resource sharing (CORS) in networked applications.
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 quasar
REST and frontends
Build a craft beer rating appFullstack
Write a backend and frontend that in realtime and partly offline.
5 ects
2 days
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 our very own LMS Open Source project! 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.
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.
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 multi-threaded programs.
- Write simple programs in an assembler language.
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.
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.
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.
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.
Graduation Project
Learning goals:
- Create functional designs.
- Create technical designs.
- Apply insight to solve problems.
Graduation Project Preparation
Come up with an idea for a project and have it checked by a teacher.
15 ects
35 days
Graduation Project
Create a complete design (functional, technical and experimental prototype) for a project of your own choosing.
5 days
Graduation Presentation
Prepare for your public presentation.
0 days
Bachelor?
Upgrade to a Bachelor-degree? Here's info about making the switch to HBO-IT.
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 multi-threaded 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.
3 days
Java
Learn the Java language.
Multithreading
Write multi-threaded 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 multi-threaded programs.
- Write simple programs in an assembler language.
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.
- Using abstract classes and methods.
- 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.
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.
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.
- Build tidy REST APIs using Node.js and express.js.
- Manipulate the browser DOM to add interactivity to web sites.w
- Use Svelte to implement a web app.
- Create (progressive) web apps that install as native apps and work offline.
- Create API tests.
- Create automated end-to-end tests for progressive web apps.
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.
Git Introduction
Introduction to source revision control. Depends on alg-exam Depends on webapps-exam Depends on git
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.
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.
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.