Jim Weirich, in this talk from RubyConf 2012, described combinators (including the Y combinator) and other aspects of functional programming. If you thought that functional programming is hard to wrap your head around, Jim makes it fun and relatively easy to understand.