This is the homepage of the Computer Science for All courses by Professor Christoph Kirsch.

View the Project on GitHub cksystemsteaching/CS4All

Computer Science for All

We are the Computational Systems Group at the University of Salzburg, Austria. We work on the problem of how to engineer systems software rigorously and how to apply that knowledge to teach computer science in ways that may eventually make computer science more accessible to more people.

We teach basic principles of computer science on bachelor and masters level covering all relevant levels of computer systems and their connection, from the lowest levels of machine architecture via programming languages, compilers, and virtual machines which includes algorithms, data structures, complexity, and computability, to the highest levels of cloud computing.

In our classes, we use Selfie, an educational system of a self-compiling C compiler, a self-executing RISC-V emulator, and a self-hosting RISC-V hypervisor that comes with source code, slides, and an autograder.


Our goal is to enable you understand and answer fundamental and intrinsically self-referential questions such as:

  1. Compilation: How can software create the semantics or meaning of any high-level programming language including the language in which that software is written?
  2. Emulation: How can software imitate the semantics of low-level machine code, that is, the behavior of any computer including the one it runs on?
  3. Virtualization: How can software create a virtual version of any computer, indistinguishable from the original, including the one it runs on?


Understanding how the meaning of a formalism such as a programming language or machine code is constructed and how that knowledge can be used to automate virtually anything is fundamental to understanding what computers can do and at what cost, and also what they cannot do, no matter what.

Your core interest may not be in computer science but other exciting fields such artifical intelligence or cyber security, or even in traditional engineering, life sciences, economics, or social sciences. No matter the field, understanding the basic principles of computer science will help you advance in your field since everyone uses computers in one form or another every day!

Target Audience

  1. Professionals: you do not plan to become a software engineer or computer scientist but you still would like to understand the machine that you are working with every day, at least in your professional life, to an extent that enables you to use computers efficiently and effectively and, most importantly, with joy!

  2. Software engineers: you would like to develop software professionally and are interested in more than just learning how to code. In particular, you are looking for a background in computer science that is going to serve as foundation for understanding not just the state of the art in software engineering now but also any future development technology whatever it may be.

  3. Computer scientists: you plan to become a computer scientist, or are already one, and would like to either gain a solid understanding or revisit your understanding of the absolute basics of computer science. Even if your focus area is not covered by this book, the material presented here may still have a profound effect on how you see and approach your own field.


All classes are held online and open to anyone:

  1. Selfie System
  2. Slack Workspace (includes recordings)
  3. Online Classroom (passcode: 42 in binary)
  4. Class Schedule