Frage von iTzFritz, 94

Von Java auf C# wechseln sinnvoll, Java und C# IMMER decompilebar?

Hallo, Ich bin 17 und möchte später Programmierer werden. Ab September fange ich an meine Fach-Abi zu machen und lerne nebenbei mit Hilfe von Büchern Java. Da mich schon immer eher C++ interessierte, da ich davon hörte, dass wirklich jedes Java Programm wieder komplett decompiled werden kann, habe ich mir ein C++ Buch gekauft(C++: Objektorientiertes Programmieren von Anfang an) nachdem ich mir das Java Buch zur Hälfte durchgelesen habe. Nun bin ich bei Seite 100 und fange an einen Hass auf C++ zu bekommen, da ich keinen Sinn in Pointern sehe und mir einen Garbage Collector herbeisehne. Deshalb spiele ich mit dem Gedanken C# zu erlernen. Sollte ich von Java zu C# wechseln ? Welche der beiden Sprachen hate eine bessere Zukunft (C# oder Java) ? Und erscheint mir C++ nur so schwer oder haben auch andere Probleme mit dieser Sprache ? Gibt es eine Möglichkeit den Sourcecode von Java / C# Programmen un-decompile-bar zu machen ?

Antwort
von TanteHolger, 69

Im Grunde kann man jedes Programm dekompilieren, den einen mehr, den anderen weniger schwer.

Welche Programmiersprache Du nutzt liegt ganz bei Dir, was Dir am besten liegt und womit Du mehr anfangen kannst.

Es ist immer von Vorteil mehrere Programmiersprachen zu beherrschen, eventuell braucht man ja mal eine andere für bestimmte Projekte oder Aufgaben.

Lerne also wenn Du magst beide Sprachen, es kann nicht schaden. =)

Gruß: Holger

Expertenantwort
von TeeTier, Community-Experte für programmieren, 43

Nun bin ich bei Seite 100 und fange an einen Hass auf C++ zu bekommen, da ich keinen Sinn in Pointern sehe und mir einen Garbage Collector herbeisehne

Das wird sich spätestens dann ändern, wenn du mal etwas programmieren musst, wobei es tatsächlich auf Performance ankommt.

Du kannst ja mal versuchen, einen Server in Java zu schreiben, der mehr als eine Million parallele Anfragen verarbeitet. Bei so etwas kommst du um C oder C++ gar nicht herum.

Mit Java ist normalerweise bei max. 10000 gleichzeitigen Verbindungen Schluss. Mit C und C++ sind hingegen an die 10 Mio. möglich.

Du kannst dir also 1000 Server mit Java hinstellen, oder einen einzigen Server mit einer C++ implementierung, die im Endeffekt genau das selbe macht. (Welche der beiden Lösungen ist wohl wirtschaftlicher?)

Falls dich das Thema interessiert: Akamai macht es z. B. bei seinen Loadbalancern und Proxies genauso.

Und das ist nur EIN Thema. Solange es nicht zu sehr auf Performance ankommt, ist Java und C# aber sehr komfortabel. Das dürfte sogar in den meisten Situationen der Fall sein.

Aber sobald du auf einen halbwegs verlässlichen Programmablauf angewiesen bist, fällt der Einsatz eines GC schon mal flach. Du kannst zwar auch in Java und C# ohne GC arbeiten, aber das ist dann wieder ein anderes Thema. :)

Ansonsten denke ich, dass du sowohl Java, als auch C#, als auch C++ lernen solltest, denn nur so kannst du die Vorteile all dieser Sprachen auskosten.

Viel Spaß! :)

Antwort
von androhecker, 25

Ich erkläre das mal eher mit dem Dekompilieren:

Erst mal kann man alles dekompilieren, auch C++ Code. Unterschied ist, dass man durch den C# und Java Bytecode fast das komplette Programm automatisiert wiederherstellen kann. Bei C++ muss man das Programm durch einen Disassembler werfen und aus diesem Code dann den C++ Code herleiten, das genaue Programm kann man aber kaum rekonstruieren und es ist weitaus zeitintensiver.

Man kann aber auch bei Java und C# den Code etwas schützen. Es gibt zahlreiche Obfuscators, welche den Code sehr unleserlich machen (Methodennamen zB nur noch a, b, c, etc). Dann kann man zwar wieder fertigen Source Code erhalten, aber das Programm zu verstehen wird erheblich schwieriger.
Noch effektiver sind AOT (Ahead of Time) Compiler wie Excelsior Jet für Java, diese Kompilieren das Programm direkt zu Maschinensprache. Dadurch ist der Dekompiliervorgang ungefähr auf dem Level von C++, aber es bringt auch Nachteile mit sich.

Zu C# wechseln bringt im Moment überhaupt nichts, außer du willst speziell Programme für Windows entwickeln. Denn ansonsten hat Java die weitaus wichtigere Position im Markt. Die Sprachen sind wirklich sehr ähnlich, da C# ein Java Klon von MS ist, nur eben für Windows optimiert. Java läuft auf Mac und Linux eindeutig besser.

Antwort
von MagicalMonday, 65

Zukunft haben sie alle. Wenn du noch nicht genau weißt in welchem Beruf du programmieren möchtest, ist es in jedem Fall sinnvoll, sich mehrere Sprachen anzuschauen. Dabei geht es ja danach, was die Firma einsetzt, und nicht, was das modernste ist. Z.B. werden Cobol Entwickler händeringend gesucht, weil es niemand mehr kann, und die alten Entwickler alle in Rente gehen.

Antwort
von Rock3t, 44

Hi, erst einmal vorweg, ich finds klasse, dass du diesen Berufsweg wählen möchtest. Ich bin selber leidenschaftlicher Softwareentwickler und habe das Programmieren schon in der Grundschule gelernt. Nun aber die Antworten auf deine Fragen:

Welche Sprache du benutzt, hängt immer davon ab, welche Probleme du damit lösen möchtest. Dabei hilft es zumindest grob zu wissen welche Sprachen worin besonders gut sind. Das lässt sich aber auch alles wunderbar googlen. Es gilt immer die Regel, Google is your friend und erfinde das Rad nicht neu ;)

Java und C# sind sehr ähnlich. Daher kommt es eigentlich mehr darauf an, ob du plattformunabhängig programmieren möchtest oder nur Anwendungen für Windows entwickeln möchtest. Für letzteres ist C# klar zu empfehlen, da es eben von Microsoft für Windows entwickelt wurde. 

C# und Java haben wohl beide einer sehr gute Zukunft. 

Und auch C# ist problemlos dekompilierbar. Als Empfehlung hierfür JetBrains dotPeek: https://www.jetbrains.com/decompiler/

Im Gegenzug dazu: Ja, es ist auch möglich den Code un-dekompilierbar zu machen. Dafür würde ich mal nach ".net obfuscator" googlen.

Im Endeffekt gilt grob, wenn du eine Sprache kannst, kannst du fast alle bzw. wird es dir zumindest sehr viel leichter fallen andere Sprachen zu lernen. 

Wenn du C# lernen möchtest, empfehle ich die das Buch C# von Kopf bis Fuß: https://www.oreilly.de/buecher/120075/9783955615963-c%23-von-kopf-bis-fu%C3%9F.h...

Alles gute auf deinem Weg zum Software Entwickler ;)

Kommentar von HalloLeben ,

Gute Antwort!

Kommentar von androhecker ,

Un-dekompilierbar niemals, nur schwer verständlich. Dekompiliert hat man es trotzdem in ein paar Sekunden.

Kommentar von Rock3t ,

Dem muss ich widersprechen. Es gibt tatsächlich Methoden den Code un-dekompilierbar zu machen. Allerdings wird man hierzu wahrscheinlich kein kostenloses Tool finden. 

.Net Reactor von Eziriz ist so eins: http://www.eziriz.com/dotnet_reactor.htm

Bisher gibt es keine Möglichkeit etwas zu dekompilieren, was da durch gejagt wurde ;)

Kommentar von CrystalixXx ,

Das trifft nur auf den IL Code zu. Der dadurch erzeugte native Code kann nach wie vor dekompiliert werden - nur entsprechend schwieriger und aufwändiger.

Kommentar von androhecker ,

Natürlich geht das. Einmal durch den Disassembler und dann kann man den C# wieder rekonstruieren, ist zwar aufwendig, aber noch lange nicht unmöglich. (Nicht viel aufwendiger als C++ Code zu rekonstruieren)

Antwort
von grtgrt, 31

Java Knowhow wird mit absoluter Sicherheit noch viele Jahre wertvoller sein als C# Knowhow.

Auch wird, wer Java gut kann, jederzeit auch mit C# umgehen können (.NET und C# entstanden als Microsoft-spezifischer Ersatz für Java, da Sun - als damaliger Eigentümer aller Rechte an Java - Microsoft verboten hatte, eine Microsoft-spezifische Java-Version auf den Markt zu bringen).

Heute wird der weitaus größte Teil aller für Großunternehmen entwickelten Applikationen in Java geschrieben.

Bitte lies auch https://www.quora.com/What-language-is-more-popular-in-large-corporations-C-or-J... .

Kommentar von grtgrt ,

Decompiler gibt es für C# ebenso wie für Java.

Kommentar von grtgrt ,

Bevor du wirklich versuchen solltest, deinen Sourcecode - Java oder C# - für andere unverstehbar zu machen, lies bitte den folgenden Artikel (und insbesondere das Fazit ganz am Schluss): https://msdn.microsoft.com/de-de/library/bb979521.aspx#ID0EKH .

Antwort
von Omnivore11, 53

Gute Programmierer zeichnen sich dadurch aus, dass sie möglichst viele Programmiersprachen beherschen und nicht nur eine!

Kommentar von TheRedBird ,

Nein? Das ist ja wohl absoluter Bullshit. Wenn man eine Programmiersprache recht gut beherrscht, ordentlich eingerückten und kommentieren Code hat, ist man 'n guter Programmierer. Es ist eigentlich komplett irrelevant wie viele Sprachen man beherrscht. Es ist nur oft so, dass man doch manchmal eine andere braucht und beschäftigt sich dann damit. Das hat dann aber nichts mit dem Können eines Programmierers zu tun, sondern mit seiner Erfahrung!

Kommentar von Omnivore11 ,

Gute Programmierer zeichnen sich durch gute Lösungen aus und nicht, dass sie jeden Quatsch kommentieren

Kommentar von TeeTier ,

Nein?

Doch! Der Allesfresser hat da schon Recht. :)

Wenn man eine Programmiersprache recht gut beherrscht, ordentlich eingerückten und kommentieren Code hat, ist man 'n guter Programmierer.

  1. Jeder halbwegs akzeptable Programmierer wird früher oder später über den Tellerrand blicken, und sich weiterbilden. Alles andere nennt man nicht zu Unrecht einen "Fachidioten". :)
  2. Die Einrückung erledigt sowieso ein Werkzeug beim Checkout / Checkin. Somit kann jeder Programmierer seinen eigenen Vorlieben folgen, und sich gleichzeitig an die Projektrichtlinien halten.
  3. Kommentare lügen. Abgesehen von der Dokumentation sollte man - wenn möglich - darauf verzichten. Sind Kommentare dennoch für das Verständnis notwendig, dann ist der Code schlecht und sollte aufgeteilt werden, bzw. vernünftige Bezeichner erhalten.

Es ist eigentlich komplett irrelevant wie viele Sprachen man beherrscht.

Eine Sprache ist nichts weiter als ein Werkzeug, und wenn du versuchst, immer alle Aufgaben mit dem selben Werkzeug zu erledigen, ist das alles andere als professionell.

Stell dir mal einen Schreiner vor, der perfekt mit dem Hobel umgehen kann, aber noch nie gedrechselt hat. Den kann man auch nicht als "guten Schreiner" bezeichnen, und wenn er noch so perfekt hobeln kann. :)

Ein guter Programmierer wählt seine Tools weise und versucht nicht alles mit seiner Lieblingssprache zu erschlagen.

Da früher oder später jeder gute Programmierer mit verschiedenen Anforderungen konfrontiert werden wird, kommt man zwangsläufig gar nicht drum herum, sich mehrere Sprachen anzugewöhnen.

Und selbst wenn nicht: Wer Jahrzehnte lang immer das selbe mit nur einer einzigen Programmiersprache macht, der arbeitet suboptimal und ineffizient, höchstwahrscheinlich ohne das selber wahrzunehmen. :)

Keine passende Antwort gefunden?

Fragen Sie die Community