He encontrado un artículo de Ian Marteens a través de la bitácora Velocidad de Escape que me ha encantado.

Es una crítica sagaz y ácida al mundo de Java.

No he podido evitar el reproducirlo aquí también.

La historia de Java se parece al descubrimiento de América: "Colón quería desembarcar en la china pero terminó en Bahamas"

Java fue diseñado como un lenguaje para controlar artilugios de estos que venden en las tiendas de todo a cien, pasó por una etapa en la que se proclamaba como la solución ideal para mejorar las capacidades de Internet en el lado del cliente (applets) y ha terminado funcionando en el sitio más impredecible: en el lado servidor, donde más que la portabilidad, importa la eficiencia. Hombre, también los mamíferos fuimos diseñados para servir de postre a los dinosaurios, antes del meteorito, quiero decir, y sin embargo, conozco a algunos especímenes humanos que le provocarían nauseas a un Tiranosaurio famélico. Casi todos abogados.

Lo poco que hay de deliberado en el diseño de JAVA no es muy halagador. JAVA fué inventado por un señor que odiaba la programación y que consideraba que además de estúpidos, los restantes programadores eran gente peligrosa, sobre todo cuando tenían un puntero de registro en la mano. ¿creen que exagero?
La obsesión por eliminar los punteros del lenguaje llegó al extremo de prohibir el traspaso de parámetros a métodos por referencia. Un programador de JAVA que quiere simular un parámetro por referencia, debe meter un valor dentro de un vector de un solo elemnto…porque a pesar de todos los esfuerzos de los pergeñadores de JAVA, los vectores siempre se pasan por referencia.

¿Seguimos? Sepa que en JAVA no existen los tipos enumerativos, y tiene que simularlos con constantes y mucha disciplina; en caso contrario, puede confundir fácilmente los valores pensados para ser pasados al parámetro venenoRatones con las constantes admitidas por alimentoSuegras.

Sobre todo es lamentable la renuncia de JAVA a incluir soporte explícito para propiedades y eventos. La ausencia de propiedades hace que el diseño de componentes sea una tortura china, y que los entornos visuales de desarrollo las pasen canutas. La falta de un soporte específico para eventos obliga a usar el mecanismo más retorcido que una mente humana haya ideado jamás…aparte de que no contribuye precisamente a la velocidad de ejecución.

Si, es posible que C# haya copiado alguna que otra idea de JAVA, pero en la misma medida en que JAVA saqueó desvergonzadamente a C++. Donde las dan las toman.