Perlis Languages
I would strongly favor Forth over Joy, but either way concatenative languages are really worth exploring. It seems fair to compare Forth with C, as both deal with hardware and memory rather intimately. Compare a C implementation of a Fisher-Yates shuffle:<p><pre><code>  void shuffle(int *array, int n) {
    int i, j, tmp;
    for (i = n - 1; i > 0; i--) {
      j = rand_int(i + 1);
      tmp = array[j];
      array[j] = array[i];
      array[i] = tmp;
    }
  }
</code></pre>
With the same algorithm in Forth:<p><pre><code>  : shuffle
    1- for
      i 1+ random over +
      over i +
      swap@
    next
  ;
</code></pre>
The types, intermediate variables and many of the unnecessary details of the implementation fall away. It's an aesthetic distinction, since we're really trading these for "stack noise" words like <i>over</i> and <i>i</i>, but I find it very pleasing.<p>C is normally considered an extremely simple, lightweight language. I think the main lesson Forth has taught me is that we can design <i>much</i> simpler languages in the same space without sacrificing power and flexibility.