@Moonlight-Angel Oh, merci ! Je me met Kotlin dans un coin, je connaissait pas ; et excepté le nom des arguments avant le type qui me fait un peu frisonner, j'aime assez la syntaxe avec les unpacking et les in.
Je ne connais pas du tout C#, mais concernant Java :
Avec ce langage, une fois bien formé sur la POO*, si tu suis toutes les conventions, tu te retrouves avec des classes au code clair et court, et des API internes bien segmentées.
Bien sûr, comme le fait remarquer MVDD, c'est tout de même un langage assez vieux, donc contrairement aux langages récents qui ressemblent de plus en plus à de l'anglais naturel, il y a parfois une syntaxe moins agréable à utiliser [que python, par exemple] (mais je suppose que la syntaxe du C# n'est pas très récente non plus).
Ceci dit, je vais nuancer : Java n'est pas si old-school que ça : les nouvelles API (Je pense aux streams, et aux lambdas) sont plutôt agréables à utiliser. Le problème, c'est la retro-compatibilité : quand Java change de version, ils s'arrangent pour que tout continue à fonctionner. Même les vieux trucs qui correspondent à une manière de programmer totalement dépassée, ou les API avec des erreurs de design, ou les choses qui ont été remplacées par mieux.
Ce qui veut dire, que lorsque tu vas essayer de te former à Java, si jamais tu tombes sur un cours qui est un peu vieux, tu risques de tomber sur quelque chose qui à été remplacé par bien mieux (et dans le pire des cas, tu tombes sur quelque chose de cruellement mal conçu).
Pareil à chaque fois que tu vas chercher comment faire quelque chose, tu risques de tomber sur du code ou une API obsolète (Le pire étant trouver n façons différentes de faire lors d'une même recherche).
En conclusion : Java c'est cool, mais l'apprentissage en autodidacte pourrait être fastidieuse. Le SdZ/OC sont bien pour débuter, mais gare à la date des tutos.
Tu peux aussi essayer de te promener sur les sites des labos d'informatique des universités. La plupart diffusent les supports de cours librement, et c'est généralement à jour et bien agencé.
Quoi qu'il en soit, bon courage ! :)
* : Petit commentaire en passant, légèrement en dehors de ta question. Je te conseille fortement de ne pas partir directement à apprendre le langage, mais de commencer par te documenter un petit peu sur les principes de la POO. C'est théorique, c'est pas forcément super amusant, mais ça va grandement t'aider à coder. L'investissement vaut le coup même si tu comptes coder un seul soft de taille moyenne dans un langage objet.
En concepts critiques, je vois le Principe d'encapsulation ("Le seul moyen de modifier une variable de ton objet, c'est d'utiliser une méthode de l'objet." Surtout pas accéder à une variable publique), et si tu es motivé, les 5 grands principes : SOLID. C'est plus compliqué que le précédent, mais S et D sont relativement importants si tu veux que ton code ne soit pas trop bordélique.