This was presented as my Lightning Talk at the 2001 YAPC.
When I'm in the mood, I think Japanese food and OOP are
minimalist. Perfectionist. And perfect.
When I'm not in the mood, I think they're both tedious, and so very bland -- at best!
I say "at best", because when Japanese food gets really nasty
and then tries to get un-blank, you get this occult goo that Japanese
people optimistally call "curry" -- or, even worse, they get out
the tonkatsu sauce.
These are both bad things, and even wanting them is a sign that
everything is just wrong.
And the OOP equivalent of those danger signs is, of course, iterators. [Except in streams!]
Some people get one of those sushi-rolling mats, and they
go hog wild, and they're suddenly thrilled with their culinary
inventions -- the same way some people just love
to design class hierarchies.
And I'm glad you're proud of your UML chart of your seven-layer-deep date class hierarchy, and that you're proud of your cajun walnut sushi -- but, really, just keep them both away from me!
Behind OOP and Japanese food, there's a whole literature
(with highlights like Itami's Tampopo and
Conway's Object-Oriented Perl), and behind
that there's a whole philosophy that's accreted --
which I think you should be able to take or leave:
But ideally, you don't just make sushi, for example -- you live the whole arcane art of sushi-dô.
And ideally you don't just do OOP -- you practice Object-Oriented Design, using Object-Oriented Methodologies, or "OOD" and "OOM" for short. (I just like saying "OOD".)
Public opinion is that both OOP and Japanese food are "good and good for you", and both simple and pretty. And they are! But that doesn't automatically make them intuitive, much less easy. Both are, in fact, much harder than they look.
When given a programming project, you don't "solve" anything by declaring that this project will be done in OOP, any more than you "solve" anything be surveying a set of ingredients and declaring that they are to be cooked Japanese-style.
Specifically, some sets of ingredients just don't work that way:
If you open the cupboard or the fridge, and what you see is cinnamon sticks, Contadina tomato paste, six potatoes, and some butter, well, you're not going to have Japanese food tonight; and please don't try!
Similarly, if you're writing an Atari 2600 emulator, I don't way to hear the word "object" mentioned, even in jest!
As to learning these things, trying to pick up
good object-oriented practices from reading Java source is like
trying to glean Japanese culinary secrets from eating a lot
of instant ramen.
In fact, I'll say it: Java equals Top Ramen -- except that making it takes three hours. In a pressure cooker. Which explodes.
This may just be me, but I'm allergic to shiitake mushrooms; they make me break out in a painful rash when I have them. And that's roughly the same reaction I have to the XML Document Object Model. Funny that.
And in conclusion: I really like Japanese food and object-oriented programming -- but if these were all there were to fine food and proper programming, I'd give it all up and go flip burgers.