Wäre es da besser Java zu lernen (kann auf Windows Rechner und auf Android Systemem genutzt werden, wenn man die View entsprechend umbaut). Oder lieber gleich Kotlin lernen für Andorid Apps , C# für Desktop Windows Anwendungen, Swift für IOs.
Kotlin ist doch annähernd auf allen Andorid Plattformen lauffähig entgegen zu Java Android Apps?
Also aus meiner Sicht sind die Client Technologien größtenteils obsolet geworden. Klar gibt es diese noch, aber ich sehe da keine große Zukunft. Cross Plattform kommt immer stärker und die Cross Plattform Tools konnten bisher alle noch keinen bedeutenden Anteil gewinnen: QT mit C++ z.B. Java awt/swing/javafx, Xamarin mit C# evtl. noch ...
Das große Problem ist aus meiner Sicht, dass man wirklich alle Plattformen abdecken muss. Aus meiner Sicht wird alles auf reine Devices hinaus laufen. In vielen Bereichen wird vieles einfacher werden. Komplexe Strukturen mit Active Directory und so werden einfachen Identity Providern weichen. Und dann wird alles auf eine "Any Device" Lösung kommen und das setzt voraus, dass die Applikation auf allen Devices zur Verfügung steht (und das kann auch im Browser sein. Die Technologie ist so weit, aber wenn man WebAssembly anschaut, dann sieht man, dass es noch deutlich weiter gehen wird!)
Fakt ist aber, dass da dann vieles auf Serverseite gebaut wird und Clients dann mit HTML / JavaScript (oder darauf aufsetzend) / CSS3 gelöst wird. Der JavaScript Part wird nach meinem Verständnis der WebAssembly weichen...
Und auf Serverseite wird es immer stärker Cloud (*) basiert gelöst werden. Aber das ist unkritsch: Da gibt es Schlagwörter wie Serverless Computing und so, aber es ist unkritisch. Die Java Lösungen gehen dann in einen Container und dann ist das Thema auch gegessen...
Also ich würde mich auf zwei Bereiche Fokusieren:
- Serverseitig: hier ist sowohl Java als auch C# stark. Andere Lösungen (Node.js, Go, ....) sind eher Nischenlösungen und würde ich nicht empfehlen.
- Clientseitig: Hier ist auf jeden Fall HTML, JavaScript und CSS3 zu nennen. Das alleine reicht nicht, denn man muss gleich als nächstes Fragen: Welches Framework? React? Angula? .... Ganz ohne jede Library muss man sich gar nichts antun, Minimum sollte immer mindestens jQuery sein (Aber das ist nur meine bescheidene Sicht). Aber HTML und CSS3 sind ganz wichtig!
Ob man nun Java oder C# nehmen sollte? C# mischt bei der WebAssembly groß mit. Und es ist auch Plattform übergreifend (.Net Core!). Das hat also gewisse Vorteile. Man hat nicht die großen ApplicationServer. Man hat eher eine Art Tomcat mit dem IIS, welches da ins .Net gewandert ist. Also das .Net / C# geht da einen Weg, der mehr minimalistisch ist. Das ist auch so ein Trend mit dem "Microservices". Das sieht ganz gut aus.
Aber da würde ich nicht auf die GUI Enwicklung gehen (Windows Forms, WPF) zumal das derzeit auch noch Windows only ist (Wobei das jetzt auch noch auf andere Plattformen kommen wird denke ich mal...)
Aber ich wechsel jetzt z.B. auch gerade von einem .Net Team zu einem Projekt, welches C++ / Java verwendet. Also das sind zukünftige Entwicklungen, die ich beschrieben habe. Und wenn WebAssembly wirklich kommen wird, dann wird es das auch mit Java geben (Da gibt es wohl auch schon Ansätze). Also alles kein KO Kriterium.
Daher ist die Frage eher: Womit wirst Du am ehesten zu tun haben? Kannst Du absehen, was in Schule / Studium kommen wird? das würde ich nutzen. Später ist ein Wechsel absolut kein Thema. Das kann ich aus eigener Erfahrung sagen!
(*) Thema Cloud: Da gibt es ja auch immer viele negative Stimmen, aber das ändert nichts an der Tatsache, dass es kommen wird. Und das ganz massiv! Das heisst ja nicht, dass man bei einem großen Anbieter in die public cloud gehen muss. Es ist eine Technologie und die wird kommen, weil es die Verwaltung vereinfacht!
Es ist einfach eine Art Virtualisierungsebene und die kommt überall nach und nach:
- Hauptspeicher: Ursprünglich gab es da keine Virtualierung und dann gab es das Paging und co mit dem i386 Prozessor.
- Festplatten: Ebenso: Erst gab es nur Platten - und dann wurde da eine logische Schicht drüber gelegt (z.B. LVM bei Linux)
- Computerseitig hat man dann die VMs und so.
Und das alles mit Technologie, dass man Daten live verschieben kann. VMs wandern von einem Host zum anderen ohne dass die VM etwas mitbekommt.
Und das sind Erweiterungen ebenso beim Speicher: Filesysteme gehen über mehrere Computer und so ...
Und für das Management bedeutet das dann, dass ganze Umgebungen (Netze, VMs und co) beschrieben sind z.B. in XML und dann gehen die einmal an das System und in Minuten hat man ganze Testnetze! Das bietet Optimierungen, die Wahnsinn sind.
Und das hat man dann auch lokal. Oder hybrid, d.h. man kann bestimmen was lokal ist und was beim Anbieter ... So kann man Systeme einsparen und temporäre Testsysteme z.B. bei einem Cloudanbieter lassen.
Aber das ist ein eigenes Thema. Das muss man nicht auch noch vertiefen. Aber die Firma für die ich arbeite beschäftigt sich extrem stark mit genau solchen Themen.