That's two concepts. So, the two concepts that need to be understood by programmers are Input and Output. And State.
There could be an interesting synthesis between Minkowski spacetime, lambda calculus, and Lamport clocks that will either a) show that the fundamental unifying element in the universe is functions (and really annoy at least one side in the disagreements over the Black Hole Information Paradox), or b) make for a terrific Greg Egan novel.
(If you squint right, you can see the decision making bit. But it's a tight squint.)
--- (from Wikipedia:)
The evaluation operation is defined as follows:
(x, y, and z represent expressions made from the functions S, K, and I, and set values):
I returns its argument:
Ix = x
K, when applied to any argument x, yields a one-argument constant function Kx , which, when applied to any argument, returns x: Kxy = x
S is a substitution operator. It takes three arguments and then returns the first argument applied to the third, which is then applied to the result of the second argument applied to the third. More clearly: Sxyz = xz(yz)
---See https://www.reddit.com/r/haskell/comments/ypcu7/hello_world_... for an example program in SKI.
No, programming is making output from input. Input is just a set of bytes, and output is also a set of bytes.