That ties in a bit with Seymour Papert's idea of teaching programming as a medium of expression. One part is having a meaningful domain, though an equally important second part is encouraging exploration and tinkering, rather than plowing through rote exercises.
Here's a passage from an old journal article I've long liked: http://www.kmjn.org/snippets/papert85_logovisions.html