My “ideal” Bachelor of Informatics

zo 14 september 2014

Filed under Blog

For the last 4 years I have been growing dissatisfied with the quality and contents of the BSc programs in informatics in the Netherlands. So as the engineer inside me requires, I have also thought hard to find a (putative) solution. This is the result.


Two components: Foundations of Informatics (FoI) and Computer Systems Engineering (CSE).


1st year


  • Linear algebra
  • Automata & formal languages
  • Formal logic & lambda calculus
  • Probability & statistics
  • Law, epistemology & ethics
  • Data structures & algorithms
  • Architecture & simulation
  • Operating systems
  • Web programming and databases
  • Numerical recipes

2nd year


  • Numerical analysis
  • Concurrency theory
  • Type systems & formal verification
  • Cryptography
  • Machine learning
  • Compiler construction
  • Image & video processing
  • Networks & system security
  • Virtualization & performance analysis
  • Distributed systems

3rd year

7x6ECs + 18ECs

Choice courses: 7 in total, at least 4 from this list, up to 3 from other programs
  • Advanced type theory
  • Automated proof systems
  • Numerical optimization
  • Language processing
  • Introduction to computational science
  • Software engineering
  • Advanced graphics & game tech
  • Embedded development & robotics
  • Modern databases
  • Introduction to research in CSE
Project (18ECs)

Students must follow both components for 2 years, and may specialize during the 3rd year.

“Bonus” assignments in all courses during the 2nd year used to detect/qualify student preferences.

Key characteristics

No “programming” as standalone course. Instead, all other courses must define assignments where students must program to reach a solution.

All FoI courses assignments to use a (near-)pure functional language with minimalist syntax (eg. Haskell, LISP etc.).

All CSE courses assignments to use a mix of C and “language of the day” with strong typing and either modules or objects (eg. Rust, Julia, Ocaml, Java, C++ etc).

Assistants are appointed for the whole year, and the same assistant team assists all courses. Assistants organize “werkcolleges” to provide basic intro to programming languages, separate from course lectures. Automated testing should be used as much as possible, with assistant teams responsible for developing, maintaining and extending testing tools over time.


Raphael's academic home page © Raphael ‘kena’ Poss. Powered by Pelican and Twitter Bootstrap. Icons by Font Awesome.