While I do not necessary agree on details (like interfaces or static typing), it is still debatable on should start at low-level or very high level languages. Personally I started from logic gates, machine code, assembler(s) and, and then raised the level to Pascal, C, Fortran, Prolog, APL, ... Even learned a bit of Perl before I've found Python 1.5.2 covers most of the needs. Then there is also functional programming (Ocaml, Haskell). And LISP as the ultimate way to program.
Said that, I used to think ascending language level while learning brings more fundamental results, but it probably can be done in parallel. I'd also mentioned studying theory (algorithms, data structures, type systems, discrete math, etc) and complete side-track like logic or constraint programming.
The problem also is that in the good old times it was a reward enough to have computing devices to produce result of calculations in some way. Nowadays we have everything up to virtual reality gadgets, so learners are distracted by that. Maybe embedded programming can still help to keep rewards more immediate.