i definately support starting with c. high level languages are really good at hiding what goes on beneath the surface. oop is all fine and dandy when you need to organize a massive code base, but i find when youre learning the basics, like data types, control structures, pointers, functions, structs, etc, dealing with high level stuff like objects just really gets in the way. once your proficient in the basics then move on to oop. learning from the top down seems like it would be confusing. like teaching calculus to someone who doesn't know algebra. of course i dont advocate learing asm first either. the advent of the programming language is actually important because it makes programming much more accessible to everyone. asm is hard to read, hard to write, you have to memories hundreds of opcodes and know a considerable amount of information about the cpu, where programming languages proper just lets you tell the computer what you want to do and have the compiler decide which instructions best represent your code. you can completely avoid asm so long as youre not writing really tight code (and if you are the cpu is fast enough where you might not care or notice whether something took 10 nanoseconds or 10 microseconds).