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

View the Project on GitHub cksystemsteaching/CS4All

Introduction to Computer Science

This is an introductory class on Elementary Computer Science for broad audiences such as bachelor students in computer science, students majoring in other fields but interested in computer science, high-school students, and anybody with a background in basic math and the desire to understand the absolute basics of computer science.

The goal of the class is to introduce and relate basic principles of computer science for students to understand, early on, what computer science is, why things such as high-level programming languages and tools are done the way they are, and even how they are implemented, on a basic yet representative and practically relevant level.

After taking the class, students are able to answer not just basic computer science questions but also questions about themselves such as which courses to take next and which books to follow up with, ideally realizing if they are interested in computer science more than expected, or even less than before.


  1. Selfie
  2. Language
    1. Programming Language
    2. Machine Code
    3. Formal Grammar
  3. Information
    1. Bits
    2. Numbers
    3. Boolean Algebra
    4. Negative Numbers
    5. Integers
    6. Overflows
    7. Characters
    8. Bytes
    9. Memory
    10. Text
    11. Files
    12. Images
    13. Video
    14. Audio
    15. Code
    16. Apps
  4. Machine
    1. Model
    2. Processor
    3. Memory
    4. Input/Output
    5. Instructions
    6. Emulation
    7. Performance
  5. Programming
    1. Literals
    2. Variables
    3. Expressions
    4. Statements
    5. Assignments
    6. Loops
    7. Conditionals
    8. Procedures
    9. Libraries
    10. Apps
  6. Computing
    1. Virtual Machine
    2. Virtual Memory
    3. Time-Sharing
    4. Self-Reference
    5. Concurrency
    6. Runtime Systems
    7. Universality of Computing


The class essentially works by explaining the basic principles behind selfie which is a software system written in a tiny subset of C called C* that implements a self-compiling compiler targeting a tiny subset of RISC-V machine code called RISC-U, a self-executing RISC-U emulator, and a self-hosting RISC-U hypervisor.


Finals are done online. Students submit their own, original, previously prepared questions and answers, covering all major topics of the syllabus. Selfie features an autograder for a variety of technical assignments that provide guidance during preparation, in addition to the material presented in class. More details on the finals are provided in class.


There is a draft of a textbook on Elementary Computer Science that is currently being developed for the class. The draft includes references to the literature relevant here.


The class is organized as part of a series of Computer Science for All classes.