Quote from nitro:
I believe that Category Theory will be required in most computer science departments in the near future.
http://www.cs.toronto.edu/~sme/presentations/cat101.pdf
I realize that these people start these documents with definitions and all the mumbo-jumbo that a mathematician needs and requires. However, this doesn't motivate someone who is not a professional in the field to get interested.
Here is the key notion. Monads allow a natural way to compose objects. This is at the root of Category Theory. It is "composability" that allows for fluent interfaces, which makes code local and so much more readable. The reason this is tied to Category Theory is that in Category Theory we are interested in the arrows and not the objects themselves. A mathematician would say, [objects] "up to isomorphism". In a sense, Object Oriented programming and Generic Programming already is Categorical, since it allows us to program to interfaces, and then our code [generic functions] can be made to work "up to isomorphism" of any object of type T.
The reason that Category Theory is such a natural place to explore these things is because Category Theory is a subject that provides a uniform model of set theory, algebra, logic and computation. All of those underlie theoretical computer science, and language theory in particular.
I am beginning to believe that the right way to learn functional programming (other than being a mathematician) is to learn Haskell and forget all the other languages. Once you know this one, the rest fall into place and all you need to do is learn the syntax of a particular functional languate. In essense, we want to be able to compose our objects into programs in the same way we compose numbers:
x = 5 * 2 + 3 - 1 / 10
Notice that the numbers are not important - you could just as easily abstract by saying
x = a * b + c - d / e
it is the functions (operators, in Category Theory, Functors) and that they are composable that is important. *, +, - and / are Monads! Everyone understands this program.
Highly recommended reading is:
http://stackoverflow.com/questions/1012573/getting-started-with-haskell