I'd contend magic for most of programming/electronics has 3 features:<p>1. It breaks more than extremely rarely.<p>2. It is esoteric and often cross-domain knowledge<p>3. It has limited usefulness to understand if the magic is not broken.<p>For instance, Ruby on Rails is great except when it isn't, and it's broken. Then it's hell to figure out the source of the issue (this was from a couple years ago, haven't touched it in years). But does fixing RoR really yield you anything of value? Eh, not for most Rails users, beyond not breaking that specific way again.<p>I'd ALSO contend deep filesystem work is also esoteric and outside many peoples' knowledge, but it's <i>NOT</i> magic, because it very very very rarely breaks (for the use cases normal people have with it). So programmer X can go do his PHP, and will likely go his entire life without being bit by "filesystem esoteric failure" if he doesn't get tricky with his mounting of filesystems.<p>For a EE who sometimes programs (sounds like you, sorry if I misconstrue you), I would agree recursion is somewhat magical.<p>For someone like me (I learned to repeat with recursion before I learned loops), it isn't esoteric at all, and is just a better way of expressing repetition in some cases. I have little more trouble debugging a recursive algorithm than a iterative one.<p>Due to the limited stack sizes on most embedded systems, I'd actually contend this falls into the "cross-domain" knowledge for you, as the skillset and familiarity with recursive algorithms is simply using them lots of times in places where it's acceptable and proper.<p>I don't see your vocation giving you that practice, as embedded developers are often highly suspicious of recursion (even tail recursion). [Disclosure: I am an embedded developer by later training, but have a computer science degree with a specialization in embedded and large scale systems].<p>So what's magic to you isn't magic to everyone. Magic is just a way of saying "Complex, can break but usually doesn't, not worth learning about that next layer down, but useful anyhow". I mean, to most programmers, the entire "hardware" thing is magic. To others though, it's another layer they understand fine.