Over and Under in a Box

I have examined quite a number of open source Java and .NET projects recently and there is a striking contrast between the two groups which is that Java projects tend to be over-architected and .NET projects tends to be under-architected.  In more mundane terms, it's the contrast between having too many joints and too few joints.  I am not talking about the kind that you strike a match to, but the kind that adds flexibility.  For Java, I think it might be a withdrawl from design pattern addiction.  For .NET, it's probably apply duct-tape til it works syndrome encouraged by Visual Studio .NET.

There is also a disturbing trend of hiding or scattering information from developers so that it is difficult to sit down and review several pages of code without having to run around looking for the hidden pieces.  For example, .NET introduced attributes which are like extensible metadata for pieces of code.  These attributes are very useful but they also hide details necessary to get the complete picture.  Another example is .NET's boxing and unboxing behind-your-back trick which, while well-intended and neat, often means disappointingly slow code.  After a few sessions of trying to get some decent performance out of .NET, I am already starting to see boxes in my sleep.