Jamie Orwell wrote:I just can't tell if he's a genius or what?
First: Welcome to JavaRanch, Jamie. Now to your question:
He might be; and he could
also be an awful programmer (although some of the things you mentioned suggest he isn't).
I've met a few genuine geniuses in my time who were also crap programmers (and I mean
really bad) because their code was so incomprehensible that nobody dared to touch it. And that is the
antithesis of good programming, IMO.
However, as Einstein said (sort of): Everything should be as simple as possible,
but no simpler.
Some problems -
shortest path, concurrency, the game of Bridge (which has taken
far longer to "teach" to computers than Chess) - simply
are complex; and so are some structures.
All the things you mention - interfaces, builders, factories, abstract classes, multi-threaded, and nested static classes - are there to help reduce complexity and increase flexibility and re-use; but like anything they can be abused. I suspect that your frustration may stem from your unfamiliarity with the "whens" and "whys" of using them rather than from any perverseness on his part ... although it's also distinctly possible that he doesn't document sufficiently (a common problem with geniuses
).
My suggestion: Next time you have to go through a particularly "thorny" program of his, ask him if he'd sit down with you for a couple of hours and explain his design decisions. A couple of bouts like that might help you to work out how his mind works and - assuming he's not an ogre - if you ask questions like "well, couldn't you have done it
this way?", you might get some more insight into
why he chose a particular path.
Unfortunately, you
then have to decide whether he was "right" or not - and many of those determinations aren't black or white.
HIH
Winston