A common definition anthropologists use for magic is occult technology: a system of laws that can be manipulated to create desired changes. There's a lot of value in thinking of programming as a form of magic.
Can you expand on this? It has always seemed to me that while programming does indeed like to couch itself in magical terms ("he's a database wizard", "this compiler stuff is black magic", etc), it is fundamentally understandable and replicable. All layers of programming build on their lower layers and this stuff is understood well enough that you can go to university to learn about it in detail.
Programming is technology but not "occult" technology, and I don't really see the added value of treating it as occult. Quite the opposite actually, most good programmers I know acquired their skill because they have a decent grasp about the entire system rather than treating most of it as a black box.
You can go study religious spells in a school as well. There are catholic universities teaching exorcism, and buddhist schools teaching tantric magics that give you superpowers. The critical difference is that I don't believe in either of these things, so I've labeled them "occult". I believe in programming and I'm not calling it occult, but there's little to objectively distinguish it from those other practices.
This is simply a reflection of my beliefs though, not an objective reality of the world. I trust that the TRM for my chip accurately reflect the details I can't observe for myself. Many devs don't even go that far down and trust that their OS, or programming language to behave as they expect. We're all dealing with black boxes on some level.
To quote a reasonable definition from an actual scholar on this subject, Jesper Sorensen:
Thus, magic is generally conceived of as referring to a
ritual practice aimed to produce a particular pragmatic and locally defined result by means of more or less opaque methods.
This pretty much perfectly describes how programming is perceived by normal people. I could also quote Malinowski, who argued that magic must have a kind of "strangeness" to differentiate it from non-ritual speech. And programmers regularly describe difficult bits of code as magical (e.g. magic constants, or fast inverse square root) even though these are easily explained in most cases.
> but there's little to objectively distinguish it from those other practices.
Isn't there? I would say that the key difference is that programming actually works, and works reliably. Even if it is opaque to normal people, at least the programmer themselves has a reasonable ability to understand why their program will work and critically can "call their shot": they can reliably predict the effect a certain program will have. Magic is not like that: even if the practitioner claims to understand how it works, their success rate is typically abysmal. AFAIK there are zero faith healers or other magic types whose claims consistently hold up when inspected, but programmers and other engineering types do it all the time. That's the objective difference right there, even if normal people struggle to discern the two.
Well, there's magic and then there's magic, you know? If you want to perform an incantation that really works, the only formula or ritual you will ever need is: "Be the change you wish to see in the world."
It is a ritual, though. That means it only works as long as you do it every day.
Of course it's replicable to us high wizards who have studied it for most of our lives and now understand it in depth. So is the actual magic in many fictitious universes.
All technology is like this to some extent, but a lot of technology is grounded enough for the average person to see the rough operation of it. You look inside a washing machine, there's a part that spins around. Attached to it by a rubber belt is a smaller part that spins around, and has electric wires on the other end. Your explainer points to that and says "that's an electric motor - it converts electric power into spinning motion" and you say "ok".
AFAIK learning to program these days is a fairly normalized process where people start with basic commands (ie hello world stuff), then move on to control flow (if/while/for) and eventually on to object oriented programming, higher order functions and all the rest. Some people even go on to do things like "craft your own interpreter" and "NAND to Tetris" to really round out their knowledge, but most do not and that's fine. I think that some of the simplest programs are just as "explainable" as your washing machine example. Conversely, there are plenty of machines complex enough that an average person has no idea how they work. A MRI machine for instance is just a collection of metals and hoses and most people would seriously struggle to point out which parts do what and why. It's still not magic though.
I guess the difference between magic and science to me is that "not everyone can learn magic", but the core bit that makes science work is that in principle everyone can learn it. In practice of course we cannot know everything and so have to rely on the expertise of others, but that is a limitation in the humans and not in the knowledge. Meanwhile for "magic" you have to be chosen by the gods/genetically gifted/cursed/whatever.
In a universe where magic is just another skill that anyone can learn, that reasoning goes right out the window of course.
A lot of other magic systems are in principle open for anyone to learn. I mentioned this a bit more in the other comment, but buddhist spells are open to everyone in principle. The chosen/gifted one is a feature of western magic systems because of our own cultural expectations.
Programming is technology but not "occult" technology, and I don't really see the added value of treating it as occult. Quite the opposite actually, most good programmers I know acquired their skill because they have a decent grasp about the entire system rather than treating most of it as a black box.