>>53915509A transistor is basically a fancy interrupter.
Chain a bunch of them and you can get complex shit like "light up only if two signals are the same" or "light up only if two signals are opposite", etc.
Chain a bunch of *that*, and you can get basic arithmetic
Chain a bunch of that arithmetic, and you can change & move numbers around
Now you just need chips that will react to specific number sent to them, a graphic chip that will convert any number sent to it into color on the screen, a sound chip that will convert any number sent to it into vibrations on your headphones, etc.
Programming is just writing the long sequence of arithmetic & moving numbers around that will result in whatever the fuck you need.
Just like ogres, it has layers.
Raw programming is like turning the processor's interrupters in a "110111001" pattern, to then activate the pile of transistors that will use the number in Box A, and add it to the number in Box B.
This is fucking unreadable, so people rapidly made something called "Assembly language", where you just type "add ax, bx", and have another program just convert that into "110111001".
This is still fucking slow, so people rapidly made something called "regular-ass programming language", where you just type "player.money = player.money + quest.moneyreward", and have another program convert that back into "add ah, bh", then into "110111001".
It's all turning on&off interrupters, which will then turn on/off many other interrupters, which does actual shit somewhere on the other side of the machine when the chain of action reach an actual "doing some stuff for real" electronic components. Programming feel disconnected from that because we added several layer of translation in-between to try and make feel more natural to humans. And when you really need performances, often the last hope is to ditch those layer of translation and try to manually tell the transistor what you want (and hope you are smarter than the translation program).