Thinking of make as an example of "declarative programming" helps in appreciating its functionality.
This aspect needs to be highlighted to those who have knowledge of imperative/object oriented programming paradigms only.
Otherwise, understanding how those makefiles actually work can become confusing and painful.