Olvídate de C#. Te lo digo porque los programadores que usan lenguajes propietarios de Microsoft lo pasan mal. Cada año Microsoft saca un nuevo compilador que sólo generará código compatible con ese entorno de desarrollo, todos los años sacan nuevas versiones del lenguaje de programación que sólo compilan con la nueva versión del compilador así que cada año tienes que volverte a aprender la sintaxis del nuevo lenguaje y tendrás que volver a memorizar todas las clases, métodos y funciones que ya no funcionan como en la versión que en su día aprendiste. En cambio en Java perfectamente podrás compilar un programa con un compilador acutal (por ejemplo 1.4.0) que un día hiciste cuando el compilador aún iba por el 1.1.8 sólo recibirás quizás algún warning que te advertirá que ese método que has usado ha sido sustituido por otro. Pero sólo recibirás un warning, el programa se compilará sin problemas, además en la documentación de la API se explican los motivos por los que se ha sustiuido y por qué otro método se ha sustituido.