Earlier quoted context omitted.
> Tbf, there's a phase of learning to code where everything is pretty much an incantation you learn because someone told you "just trust me." There really shouldn't be. You don't need to know all the turtles by name, but "trust me" doesn't cut it most of the time. You need a minimal understanding to progress smoothly. Knowledge debt is a b*tch.
> There really shouldn't be. I don't see how, barring some kind of transcendental change in the human condition. Simple lies [0] and ignore-this-until-later is basically human nature for learning, you see it in every field and topic. The real problem is not about if , but when certain kinds of "incantations" should be introduced or destroyed, and in what order. [0] https://en.wikipedia.org/wiki/Lie-to-children
Consider, how it's been done traditionally for imperative programming: you explain the notion of programming (encoding algorithms with a specific set of commands),explain basic control flow, explain flowcharts, introduce variables and a simplified computation model. Then you drop the student into a simplified environment where they can test the basics in practice, without the need to use any "incantations".
By the time you need to introduce `#include ` they already know about types, functions, compilation, etc. At this point you're ready to cover C idioms (or any other language) and explain why they are necessary.