Ages ago, when I was still studying computer science back in Russia, me and all the other "future engineers" in my class were wasting hours and hours playing "Quake I" deathmatch over the network in the computer lab (instead of actually doing the lab work).
One day our OOP teacher, once again disappointed by the lack of attendance at his lecture, has lost his temper, slammed his briefcase and rushed into the computer room, where everyone was playing. But instead of punishing us all for wasting time on a stupid FPS game he did something very different.
He told us about Quake C. The Quake's built-in programming language.
During the next couple of hours he showed us how to build self-guiding rockets, a flame-thrower and a jetpack.
PLAYING - is the fate for endusers, CREATING - is the privilege for programmers.
His lectures became overcrowded since that day. No more boring generic algorithms, no more "binary search", no more "bubble sort". Instead, we spent the semester creating AI bots, self-aiming guns with optimized ammo consumption (guess what - using those boring generic algorithms). We were changing the game's physics and logic by building burning walls and flying vehicles.
We learned about Separation of Concerns, encapsulation and test-automation.
Just playing the game has suddenly became so boring.
Now, almost 20 years later, I can see what a genius this guy was.