Quick to download, quick to install, no real setup or tutorial section, cross platform, runs on anything, timeless graphics, easy to understand gameplay, lots of custom game options including AI, etc. And of course, it's fun.
I've tried to find the FPS equivalent of this, but it's been much harder, surprisingly.
Deleted Comment
The metaprogramming trick for defining a set of methods at once is useful, but I wish there were a more compiler-level solution to sorting out ambiguities or determining what's more "specialized".
These don't really color my view on multiple dispatch, however. I find it to be a really useful tool and I don't run into dispatch issues very frequently. If you're meticulous about your typing it's usually easy to avoid these pitfalls, but sometimes they still crop up.
The standard way to put breakpoints in an executable is to replace the instruction at which to stop with INT3 (or something analogous in other architectures). Then give the system a callback for your debugger when the CPU receives the interrupt.
Is there a way to make Julia's debugger do that?
You can't tell students anything, you have to show them, and you have to know where to start when you show them. Sometimes this meant starting back in the prerequisites to the course (a brief refresher on ODEs) and sometimes it meant arguing by anology before returning to the topic at hand.