title: What are important languages to learn to understand different approaches and concepts?
body: <p>When all you have is a pair of bolt cutters and a bottle of vodka, everything looks like the lock on the door of Wolf Blitzer's boathouse. (Replace that with a hammer and a nail if you don't read xkcd)</p>
  
  <p>I currently program Clojure, Python, Java and PHP, so I am familiar with the C and LISP syntax as well as the whitespace thing. I know imperative, functional, immutable, OOP and a couple type systems and other things. Now I want more!</p>
  
  <p>What are languages that take a different approach and would be useful for either practical tool choosing or theoretical understanding?</p>
  
  <p>I don't feel like learning another functional language(Haskell) or another imperative OOP language(Ruby), nor do I want to practice impractical fun languages like Brainfuck.</p>
  
  <p>One very interesting thing I found myself are monoiconic stack based languages like Factor.</p>
  
  <p>Only when I feel I understand most concepts and have answers to all my questions, I want to start thinking about my own toy language to contain all my personal preferences.</p>