Having trouble grasping object-oriented programming? Read Plato.
Appropriately, I've got a new "philosophy" when it comes to teaching new programmers about object-oriented programming (OOP). Not being a schooled computer scientist myself, I had a tough time when I was first learning OOP concepts and practices when I took up .NET, and many people learning the ropes of current-day coding apparently share the same frustrations. Fortunately, I've found a cool way of making the tough concepts easier to grasp, through the teachings of Plato.
Specifically in his work with his theory about Forms, there are lots of cool analogies directly applicable to OOP one can ascertain from Plato's writing. Rooted in abstraction, the concept of Forms, in trying to justify existence, effectively demonstrates the relationship between base classes and subclassed types, I find (i.e., my wife is beautiful, my daughter is beautiful, my mother is beautiful, as all are applications of and conform to the Form of Beauty, but none "are" Beauty explicitly, as such carries a higher definition). The application of Forms in the philosophy of the mind also involves an amount of inheritance and polymorphism - both of which are foundations in which any serious programmer doing modern-day development needs to be well-versed. Plato also used Forms to evolve the concept of the relationship between the One and the many, likened in OOP to static (shared) instances of types.
You may agree with it, use it, or dismiss it. I've found it to help make more clear what can often be a tough roadblock in learning programming. :)