Online course: Build your own simulated computer, assembler, lang, OS, & game
There is a major problem with this teaching approach: every module is a pre-requisite for the next one. Therefore, if a student fails one module, he will have to spend time fixing it instead of moving forward.