Different programming languages involve different concepts and different ways of thinking about problems. The intent of this course is to cover these concepts in a practical, rather than a purely theoretical, setting. That is, you will be given assignments that entail using most of these concepts.
The main languages I expect to cover are Prolog, Clojure (a Lisp variant), Haskell, and Scala, with mention of a few others. This list is subject to change; new languages are being developed at the rate of about one a week, and sometimes one catches my eye.