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**