Maybe there’s no magic, but time is finite.
In the context of programming, things get called ‘magic’ when the amount of time it takes to understand what they do and how is large because of how complex (or worse, complicated) they are.
sometimes “magic” is just a convenience wrapper. Hence: virtualenvwrapper!
Exactly. If you offer an abstraction there are two choices of investment a user may make: learning enough to use it to get their job done and learning enough to understand how it was built. Magic occurs when the first investment is significantly lower than the second.
In a world of leaky abstractions, it’s often useful to spend enough to get to the second level. If a job changes significantly enough that the leaky abstraction no longer well-solves it then knowing how it was originally built will provide relevant information for the abstraction user to either extend to rebuild the relevant structure to solve the new problem.
In this way, “magic” programming—again, programming where the second investment barrier is much higher than the first—can produce a large group of programmers who are effective in some parts of a problem space but very ineffective outside of that subspace.