"Program to interfaces, not implementations" is a design principle associated with the Gang of Four, a group of authors who wrote 'Design Patterns: Elements of Reusable Object-Oriented Software'
The main idea is that your code should be designed to depend on abstract interfaces instead of a concrete implementation.
If you have a cache interface, for example, your application will consume it without worrying if it's a memory, file or redis cache implementation behind it.