Java started out as a small, clean, neatly designed language that really had a feel of the clarity of a single person’s design. It was far from perfect, but it clearly valued simplicity over completeness of features. And now look at the later additions. Genericity. The design of genericity in Java has special syntax for some rather esoteric cases – it really smells like design by committee. Like something where everyone had to get their favourite use case explicitly supported. And the result: while I knew a good number of people before, who could explain any and every valid Java statement, I can now write valid Java code that almost nobody on the planet can correctly explain.