вот здесь кстати интересный вопрос. Я такое слышал неоднократно когда на первых курсах учился, но было как-то очень непонятно, как связать концепции из одного контекста с концепциями из другого. Казалось, что проще сразу делать под железо, потому что "более конкретно", хотя сложнее в плане и отладки и всего остального.
Сейчас имея немного больше опыта я незаметно для себя пришёл к пониманию того, что многие концепции из контекста "ось внутри приложения" достаточно прозрачно переносится в контекст "ось на голом железе", но, кажется, это понимание пришло только тогда, когда я примерно понял как работает та виртуальная машина, для которой ось пишется.
У меня есть предположение, что чтобы качественно научиться на примере "ось внутри приложения" нужно иметь некоторую заготовку, которая поставит учащегося примерно в те же правила игры. Что-то типа, хотя бы, явно прописанного механизма прерываний, таймера, минимального набора устройств.