You've decided to expand your horizons. You've been programming exclusively in Java (or C++, or Perl, or Ruby) for a while now. You're happy and productive, but you have this nagging feeling that you're solving problems by rote rather than thinking as cre