Building programming languages just for the heck of it is highly underrated, I think every programmer should at least try implementing a few languages of different paradigms.
Implementing a stack-based language made me write more readable point-free Haskell. Implementing a text-processing-oriented language taught me a ton about Unicode and Korean. Both are fun to work on.