What is wrong with Object Oriented Programming and what is right with Functional Programming?