Some minor details that annoyed me (I'm only listing them here for improvement purposes):
- You can't "Expand" the whole program, only one statement at a time. However, having the fully expanded view is IMHO key to correct concurrent reasoning.
- Each mission's objective is hidden inside a big explanation text. I already know what mutexes/deadlocks/atomics/monitors/etc. are, I just want to play, thus I only need to know what will be considered as victory (as you can't unambiguously deduce it from the code: sometimes you must reach an Assert(false), sometimes you must deadlock the program, etc.).
- The confirmation dialog for 'reset level' is annoying (especially considering the 1s visual fade delay).
I'm only expressing those minor quibbles of mine for improvement purposes ; this game is fun and pedagogic and its author cleary did a great job here. Thanks to her/him!
It'd be easier to internalize the pitfalls of concurrency when shown a problem, and a way to (attempt to) fix it, and the ways the fix breaks, and the correct way.
You can play this game like a zombie without really understanding what the code is trying to do; all you see is a broken attempt at doing something and you don't need to understand much to break it.