Esta é a edição com simulador da habilidade: não há threads reais nem medição de tempo. Uma thread é uma lista curta de passos, um escalonamento diz de quem é o próximo passo e a máquina que você escreve os executa, de modo que um bug de concorrência vira uma lista de números de threads que dá para imprimir e reproduzir. Cada aula ensina uma ideia com pequenos exemplos e sua saída, e depois um laboratório avaliado estende a mesma máquina. Você aprende a ver como uma intercalação perde uma atualização, a enumerar todos os escalonamentos de um programa pequeno, a enunciar o que uma fila sem travas garante e a provar um invariante de uma distribuição de dados de mercado sobre todos os escalonamentos.
Basta ter familiaridade com funções, listas e dicionários de Python; não é preciso C nem C++, porque a máquina é um simulador que você escreve. A habilidade de localidade de cache ajuda com falso compartilhamento e linhas de cache, mas não é obrigatória.