I liked this quote from the “Concepts, Techniques and Models of Computer Programming”:
Programming as defined above has two essential parts: a technology and its scientific foundation.
The technology consists of tools, practical techniques, and standards, allowing us to do programming.
The science consists of a broad and deep theory with predictive power, allowing us to understand programming. Ideally, the science should explain the technology in a way that is as direct and useful as possible.
If either part is left out, we are no longer doing programming. Without the technology, we are doing pure mathematics. Without the science, we are doing a craft, i.e., we lack deep understanding