An esoteric programming language might be defined as a language which is Turing Complete but not necessarily useful. Examples include brainf**k, whitespace, befunge, malbolge and many more.

There are no real practical reasons to learn an esoteric language. It will never be the easiest way to solve a problem, nor will it be the most readable or most efficient. However, as well being a lot of fun it can be a valuable lesson in thinking logically and, of course, is a great way to impress potential mates.

Writing a program in an esoteric language could be thought of as an artistic endeavour. A sculptor doesn't sculpt in the hope that their sculpture may one day support a bridge or be used as part of a wall. They sculpt because they enjoy it and also perhaps to show off their ability.

If you want to learn an esoteric language then a good way to start is to look at some existing example scripts. Learn, in great depth, how those examples work. Try modifying them, if that works as expected you can try writing your own scripts from scratch. You will want to carefully think about how to break down a problem you are trying to solve into very small and very easily measurable pieces. This is because an esoteric script is very, very hard to debug.

Another way to have fun with esoteric languages is to create your own. There are plenty of tools existing you can use to help you create a language. However that is a subject for another article another day.