That's the point -- there is no single "how the physical computer works". Every computer is isomorphic to any other as an abstract machine -- i.e., they all have the same computational power/expressivity -- but every implementation (the architecture) is unique. The C language provides just enough abstraction to be implementable on any machine, but not so much that it prevents the programmer from "touching" the hardware.“C is portable assembler.”? Yes, to a thin machine that doesn't exist. C is not how the physical computer works
I wouldn't recommend C as a first language to a casual learner, someone who just wants to get their feet wet in programming. Better, I think, is to learn the basics of logic and flow control with a highly-abstracted untyped language. C is just too pointy with sharp edges for comfortably learning the basics. The lack of a first-class string data type is a source of frustration and wasted time for newbies, who at that level should be spending their time writing/breaking/fixing more complex programs, not wrestling with C's idiosyncracies.Are thin languages like the C a good one for for learning hopefully the principles of structured programming?
C is great for experienced programmers who need to be close to the hardware because it's small, simple, and mostly stays out of their way. But new programmers aren't actually creating programs to solve problems, they're creating programs to learn how to think about logic in a structured way. C's lack of abstraction is a hindrance in this regard.