Esoteric Programming Languages

An esoteric language is a language which is designed to be different. They're designed to be challenging, even for really good programmers.

Why learn them? Really, no one needs to learn them. They're mostly for fun. That said, you feel quite achieved when you can write just a small program in some crazy language. The same applies if you can even just read it (though it tends to be harder to read than to write)