Zum Inhalt springen

Lieber C# oder Java?


Wiebke88

Empfohlene Beiträge

  • Antworten 62
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Wiebke, was ist denn Dein Hauptkriterium bei einer neuen Sprache? Wirst Du nach der Ausbildung in dem Betrieb bleiben? Dann wäre es geschickt, etwas betriebskompatibles zu wählen. Willst Du die Wahl aus vielen Stellenangeboten? Das ist das Hauptaugenmerk des Threads zur Zeit. Willst Du Dich in eine bestimmte Richtung weiterentwickeln? Wenn Du Dich für C# entscheiden würdest (ich kenne das Java-Umfeld nicht), dann lernst Du nicht einfach eine neue Sprache, dann lernst Du auch die Technologie darunter... also .NET-Framework. Ein Aspekt dabei ist z.B. LINQ (language integrated query, also eine in die Programmiersprache eingebettete Möglichkeit, strukturierte Abfragen auf Datenmengen beliebiger Herkunft auszuführen. Das schlägt den Bogen zur Datenbank von Microsoft, MS SQL Server, für Microsoft-basierte Systeme DAS Dbms, an dem man sich auch die Administration anschauen kann oder ETL-Szenarien. Etwas, dass ich an .NET sehr schätze, ist die MSDN und die Community in den Foren. Die MSDN ist nicht nur Nachschlagewerk, sie gibt Beispiele, bietet weiterführende und Grundlagen-Informationen...

Liest sich jetzt vielleicht etwas einseitig ;) aber vielleicht kann ja jemand den GEgenpart für Java ergänzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kann eigentlich nur progg3r recht geben:

Es spielt überhaupt keine Rolle, welche Sprache du lernst.

Du lernst mit der Programmierung vor allem die Vorgehensweise, wie man die Funktionen einer Anwendung mit Hilfe einer Programmiersprache umsetzt. Es geht nicht darum, die Funktionen mit ihren Parametern auswendig zu lernen, die eine Programmiersprache bietet.

Wenn du z.B. ein Tonsignal grafisch visualisieren möchtest, dann musst du vor allem verstehen, was im Programmcode dafür zu tun ist. Ob nun in C++, Java, Python oder Basic - da liegt der Unterschied im Wesentlichen nur in den Vokabeln hat man schnell gelernt, wenn man das Prinzip verstanden hat.

Bedenkt man zu dem, dass Vieles heute mit Hilfe von Frameworks realisiert wird, die ein riesiges Sammelsurium an Funktionen für alles Mögliche bieten und oftmals fast ausschließlich verwendet werden (z.B. QT, GTK, Cocoa), unterscheidet sich die darunter verwendete Programmiersprache schon fast nur noch dadurch, dass die Schleifen anders definiert werden und das Prinzip, wie Variabeln und Funktionen definiert werden (z.B. geschweifte Klammern oder begin/end?).

Für wichtig halte ich, dass man sich während der Ausbildung nicht nur ausschließlich mit PHP beschäftigt hat, da man für PHP Vieles nicht begreifen muss, was bei anderen Programmiersprachen zwingend erforderlich ist (z.B. Variablen, die vorher gemäß ihrem Typ definiert werden müssen oder das Signal-Slot-Konzept). Vor allem sollte man auch einmal ein Programm entwickelt haben, das einer grafischen Oberfläche läuft, auf Bedienungselemente reagiert und erst dann durchgelaufen ist, wenn jemand das Programm beendet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es geht nicht darum, die Funktionen mit ihren Parametern auswendig zu lernen, die eine Programmiersprache bietet.

Nein. Dazu gibt es Referenzen.

Ob nun in C++, Java, Python oder Basic - da liegt der Unterschied im Wesentlichen nur in den Vokabeln hat man schnell gelernt, wenn man das Prinzip verstanden hat.

Ja. Irgendwie ein Programm zu fabrizieren kann jeder lernen. Spannend wird es, wenn man eine Sprache auf ideomatischer Ebene beherrscht. Und da unterscheiden sich die Sprachen eben extrem. Und die eine Sprache benötigt bestenfalls lediglich mehr Boilerplatecode als die andere; schlimmstenfalls sind gewisse Arten der Programmierung -oder etwas metaphorisch: gewisse Arten, sich auszudrücken- nicht möglich. Was wäre das Äquivaltent zu List Comprehensions aus Python in C++? Kann man in C++ überhaupt ein ähnlich lesbaren Code schreiben?

Bedenkt man zu dem, dass Vieles heute mit Hilfe von Frameworks realisiert wird, die ein riesiges Sammelsurium an Funktionen für alles Mögliche bieten und oftmals fast ausschließlich verwendet werden (z.B. QT, GTK, Cocoa), unterscheidet sich die darunter verwendete Programmiersprache schon fast nur noch dadurch, dass die Schleifen anders definiert werden und das Prinzip, wie Variabeln und Funktionen definiert werden (z.B. geschweifte Klammern oder begin/end?).

Man könnte auch sagen: wer alle Sprachen beherrschen will, beherrscht letzlich keine. Nur, weil man in der Lage ist, "Hello World" in jeder Sprache mit mehr oder minder dem gleichen Aufwand zu schreiben, heißt das nicht dass man alle Sprachen gleich beherrscht, bzw. dass die Sprachen gleich sind.

Für wichtig halte ich, dass man sich während der Ausbildung nicht nur ausschließlich mit PHP beschäftigt hat, da man für PHP Vieles nicht begreifen muss, was bei anderen Programmiersprachen zwingend erforderlich ist (z.B. Variablen, die vorher gemäß ihrem Typ definiert werden müssen oder das Signal-Slot-Konzept).

PHP ist der denkbar schlechteste Einstieg in eine Programmiererkarriere, den ich mir vorstellen kann. Nicht dass PHP per se schlecht sei, das mag jeder für sich entscheiden. Allerdings führt die "Freiheit", die diese Programmiersprache bietet dazu, dass man jede Menge Schrott coded und es nichtmal merkt - merke: Funktionsfähiger Code ist nicht gleich guter Code. Und wieviele, die da das Laufen gelernt haben, neigen zu "Quick&Dirty" zu deutsch "teuer ohne Ende in der Wartung".

Vor allem sollte man auch einmal ein Programm entwickelt haben, das einer grafischen Oberfläche läuft, auf Bedienungselemente reagiert und erst dann durchgelaufen ist, wenn jemand das Programm beendet.

Wer benötigt im 21ten Jahrhundert etwas anderes als einen Browser? ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und die eine Sprache benötigt bestenfalls lediglich mehr Boilerplatecode als die andere; schlimmstenfalls sind gewisse Arten der Programmierung -oder etwas metaphorisch: gewisse Arten, sich auszudrücken- nicht möglich.

Diese Einschränkung ist sehr flach gewählt, selbst manche Paradigmen lassen sich nicht übertragen, z.B. wie realisiert man Mehrfachvererbung in Java, in C++ ohne weiteres möglich.

Kann man in C++ überhaupt ein ähnlich lesbaren Code schreiben?

Ja kann man. Und in Python kann man extrem unleserlichen Code schreiben

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ihr schmeißt hier sehr unterschiedlichen Sprachtypen zusammen. Da würde ich schon stärker differenzieren. Z.B. in reine OO-Sprachen wie Smalltalk und gemischte Sprachen wie C#, Java und C++.

Gleichzeitig sollte man noch unterscheiden, ob die Typen explizit angegeben werden müssen, wie in Java und C# oder aber, ob es eine losere Typisierung wie in Python gibt.

Diese Unterscheide wirken sich meiner Erfahrung nach stark auf den Programmierstil und vor allem die Agilität und das Tooling einer Sprache aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was ich noch raten kann: fangt mit C++ an! Dann wisst ihr, was ihr da zusammenschreibt und warum Java als auch C# eigentlich quatsch ist ;)

C++ wenn auch sehr mächtig hat einen ganzen Haufen eigener Probleme. Ich halte auch garnicht so viel davon jemandem zu raten mit einer bestimmten Sprache anzufangen. Für den Anfang sollte es zwar m.E. eine stark typisierte Sprache sein, einfach um dem Anfänger eine gewissen "Sauberkeit" aufzulegen aber abgesehen davon ist das wichtigste dass der Anfänger seine If-Schleifen versteht und grundsätzlich weiß wie er einen Ablauf (Algorithmus ist vielleicht zu hoch gegriffen) in Code umsetzt. Das gute alte Pascal ist für einen Anfänger vielleicht garnicht so schlecht.

Wohin man sich dann wendet zeigt einem das Interesse und die Erfordernisse der Praxis.

Diese Einschränkung ist sehr flach gewählt, selbst manche Paradigmen lassen sich nicht übertragen, z.B. wie realisiert man Mehrfachvererbung in Java, in C++ ohne weiteres möglich.

Wobei beide Sprachen einen Grund haben warum es bei ihnen geht, bzw nicht geht. Und das ist mehr Philosophie als Technik!

Am Ende sind C++ und Java aber noch von der Art her sehr ähnliche Sprachen, auch wenn es bei der Ausführung der Programme und der Sprachumgebung fundamentale Unterschiede gibt. Aber am Ende gehen beide auf C zurück.

Andererseits gibt es Sprachen die sich fundamental unterscheiden. Funktionale Sprachen wie Lisp beispielsweise. Auch wenn man vielleicht niemals ein praktisches Projekt in einer solchen Sprache umsetzen wird kann die Beschäftigung damit einem doch viel für das Verständnis gewisser Features der Sprache der Wahl bringen. Hierzu: Can Your Programming Language Do This? - Joel on Software

Zum Thema Programmiersprachen und was dahinter steck empfehle ich jedem dieses Buch: Masterminds of Programming: Conversations with the Creators of Major Programming Languages (Theory in Practice (O'Reilly)): Amazon.de: Federico Biancuzzi, Shane Warden: Englische Bücher

Link zu diesem Kommentar
Auf anderen Seiten teilen

C++ wenn auch sehr mächtig hat einen ganzen Haufen eigener Probleme. Ich halte auch garnicht so viel davon jemandem zu raten mit einer bestimmten Sprache anzufangen.

Warum ich zu C++ rate einmal etwas genauer ausgeführt:

- Adressierung im Speicher lernen, in Java, C# usw. hat man zwar auch "Zeiger" (Referenzen), verwendet sie aber nicht bewusst. So können Probleme entstehen, warum ein Objekt geändert wird oder eben nicht, ohne, dass der Programmierer das versteht und weiß, "wie es im Speicher aussieht".

- Exceptions in Java: Dadurch, dass man alles mögliche Abfangen kann, wird alles abgefangen, ohne dass überlegt wird, ob die Exception überhaupt zutreffen kann. Statt sich auf den Algorhythmus zu kümmern, kümmert man sich um Exceptions, die womöglich niemals auftreten. Anderseits: Hat man in C++ ne Speicherzugriffsverletzung, muss man diesen meist aufwändig finden. In Java finde ich über Exceptions heraus, dass ein Problem ermittelt wurde, aber nicht wo genau es auftrat.

- In Java wird immer(!) Vererbung ermöglicht, außer es wird explizit per "final" unterbunden. In C++ muss man per "virtual" die Vererbung einer Methode erst einmal aktivieren. In Java wird somit das "Diamanten-Problem" behoben aber gleichzeitig Mehrfachvererbung verhindert, in C++ kann man das gewollt in seinem Design verwenden.

- In Java gibt es kein Struct, man muss gleich eine komplette Klasse abbilden. Ist halt Geschmackssache.

(mir fällt bestimmt noch mehr ein, aber das reicht mir erst mal ;) )

Wer natürlich Perl, Python, Ruby, JavaScript, PHP, ... entwickeln möchte, muss sich damit nicht rumplagen und kann sich ganz konkret auf andere Dinge konzentrieren. Wobei es auch hier nicht schlecht ist, verständnis von Softwarearchitektur zu haben um Dinge abstrakt abzubilden.

Das gute alte Pascal ist für einen Anfänger vielleicht garnicht so schlecht.

Damit habe ich damals angefangen :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

- Adressierung im Speicher lernen, in Java, C# usw. hat man zwar auch "Zeiger" (Referenzen), verwendet sie aber nicht bewusst.
Wer bei C++ mit rohem Speicher hantiert, macht m.M.n. etwas falsch.

Anderseits: Hat man in C++ ne Speicherzugriffsverletzung, muss man diesen meist aufwändig finden.
Wenn man C++ ordentlich benutzt, sind Speicherzugriffsverletzungen praktisch ausgeschlossen. Außer natürlich, man hantiert mit rohen Zeigern (siehe oben).

In C++ muss man per "virtual" die Vererbung einer Methode erst einmal aktivieren.
Das trifft es nicht.

In Java wird somit das "Diamanten-Problem" behoben aber gleichzeitig Mehrfachvererbung verhindert, in C++ kann man das gewollt in seinem Design verwenden.
Ein sinnvoller Anwendungsfall für Mehrfachvererbung ist mir noch nicht begegnet. Anfänger neigen m.M.n. sowieso dazu, zu viel Vererbung zu verwenden.

- In Java gibt es kein Struct, man muss gleich eine komplette Klasse abbilden.
Der Unterschied zwischen class und struct in C++ ist minimal. Was ist denn eine "komplette" Klasse?

Ich halte C++ für keine gute Einsteigersprache. Es ist ziemlich schwierig, guten C++-Code zu schreiben. Die meisten Tutorials im Web und auch viele Bücher sind Mist. Es kursiert viel Halbwissen. Selbststudium ohne ein gutes Buch führt dazu, dass man sich schlechte Dinge angewöhnt. Zudem gibt es in C++ Undefiniertes Verhalten. Ein Programm mag so aussehen, als ob es funktioniert, ist aber trotzdem falsch. C++ ist keine Sprache, in der man durch Ausprobieren zum Ziel kommt.

C++ ist wie C vom Sprachdesign her so ausgelegt, dass man ohne Netz und doppelten Boden programmiert. Sicherheitsfeatures kommen nur zum Einsatz, wenn man sie ausdrücklich benutzt. Ansonsten crash es halt - oder noch schlimmer: Es crasht nicht, sondern tut etwas völlig Seltsames.

Bearbeitet von Klotzkopp
Link zu diesem Kommentar
Auf anderen Seiten teilen

Interessantes Thema! Ich mache eine Ausbildung zum FIAE und mache in der Firma neben C# (auch privat viel) auch php und etwas ABAP. Privat habe ich mit Visual Basic 6 angefangen. Warum? Genau, weil es eine gute einfache Einstiegssprache war / ist.

Im Nachhinein sage ich: Ok sicher lernt man mit C / C++ besser die Grundlagen, was sind Zeiger etc.

Aber wenn man sich dazu mal ein Video oder auch ein Buch angeschaut hat, sollte man das auch mehr oder weniger verstanden haben (?).

Schlussendlich bin ich mit .Net (C#) äußerst zufrieden, schon allein wegen der guten IDE Visual Studio. Eclipse für Java z.b. ist grausam - weil es einfach tierisch überladen ist.

Anyway, um Grundlagen zu lernen sollte auch eine "einfachere" Sprache langen. Mit der Zeit lernt man auch was Zeiger sind. Und wenn man Interesse an der Matherie (Softwareentwicklung) hat, lernt man sowas denke ich automatisch.

Bearbeitet von Gurki
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich muss das einfach mal ergänzen, weil's so schön ist

Wer bei C++ mit rohem Speicher hantiert, macht m.M.n. etwas falsch.

siehe Intelligenter Zeiger

Wenn man C++ ordentlich benutzt, sind Speicherzugriffsverletzungen praktisch ausgeschlossen. Außer natürlich, man hantiert mit rohen Zeigern (siehe oben).

Das stimmt, wobei man da natürlich immer hinzufügen muss, dass man durchaus aus C++ evtl C Bibliotheken verwenden kann/muss und da muss man häufig eben mit Pointern arbeiten (kann man zwar durch Smartptr kapseln)

Ich halte C++ für keine gute Einsteigersprache. Es ist ziemlich schwierig, guten C++-Code zu schreiben. [...] Ein Programm mag so aussehen, als ob es funktioniert, ist aber trotzdem falsch. C++ ist keine Sprache, in der man durch Ausprobieren zum Ziel kommt.

Ja und Nein. Das Problem das ich sehe ist, dass sich heute nur noch wenige Programmierer Gedanken über Speicherverbrauch (z.B. Reference-Counting o.ä.) machen und sich auf das Speichermanagement des Interpreters verlassen. Gerade in den Interpretersprachen ist nicht immer das Entfernen der Objekte (Dtor Aufruf) deterministisch. In diesen Punkten wäre wäre es schön, wenn man als Anfänger wirklich einmal lernen kann, was passiert da überhaupt alles im Speicher wenn ein Objekt erzeugt wird, wie wird die Vererbung überhaupt speichertechnisch abgebildet ( Tabelle virtueller Methoden ) etc.

Mit diesem Backgroundwissen denke ich, wäre es möglich in einer Sprache, die den ganzen Speicherzugriff kapselt eben Fehler zu vermeinden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kanns nur noch einmal wiederholen:

Programmieren lernen bedeutet primär, Logik zu lernen und nur sekundär, eine Sprache zu lernen: Nach welchem Prinzip muss man A und B verarbeiten, damit am Ende Y und Z heraus kommen.

Das logische Prinzip ist dabei fast immer dasselbe, egal ob in C++, Java oder Python geschrieben. Wer in C++ verstanden hat, welche Funktionen für welchen Zweck man braucht, um z.B. einen Filter für ein Foto zu programmieren, der muss sich auch in andere Sprachen nicht lange einarbeiten, um es damit auch hinzubekommen. Er weiss, was prinzipiell an Programmierung dafür erforderlich ist und ist in der Lage, nach vergleichbaren Funktionen in einer anderen Sprache schnell zu recherchieren. Wer allerdings noch nie einen Foto-Filter entwickelt hat, dem nutzen auch Vorkenntnisse in der Sprache recht wenig, mit der er vor hat, sowas zu programmieren.

Man sollte sich auch darüber im Klaren sein, dass in der Arbeitswelt sehr viele proprietäre Sprachen eingesetzt werden, für die es kaum oder garkeine Seminare gibt, geschweige denn Unterricht in der Schule. Man soll damit etwas Umsetzen und hat mehr als ein Funktionsverzeichnis dazu nicht in der Hand.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Sprache ist ansich wumpe. Fährst mit beiden gut und außerdem sollst du ja als erstes die Logik dahinter verstehen und nicht nur die "Vokabeln". Ich würde trotzdem zu Java tendieren da man dort im Moment sehr gefragt ist grad was Android Entwicklung angeht. Außerdem bringt die Entwicklung mit Java für Android wirklich Spaß und man hat schnell Erfolgserlebnisse die auch wirklich nutzbar sind. (mobile Zeiterfassung für die Firma etc etc)

Der Vorteil von C# ist allerdings das Visual Studio wirklich idiotensicher ist und somit nicht gleich zwei Dinge auf einen einprasseln. (Mächtiges Programm und neue Sprache bzw eine neue Logik)

PS: Ich bin die Neue.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich verstehe nicht, warum es als "Wert" per se angesehen wird, wenn man weiß, was Pointer sind und wie sie funktionieren. Genausoweig verstehe ich, warum man sich um den Speicherverbrauch seiner Anwendung kümmert sollte. Es gibt den Fall, dass man für den embedded Bereich coden muss: für diesen Zweck verstehe ich das. Aber frei nach Uncle Bob: Why do you care as a Java developer about Memory, you are using Java ... Wir leben nicht mehr im Jahr 1982. Wenn der RAM nicht reicht, schiebt man noch einen Riegel nach. Das wird billiger als die Entwicklerzeit, speichereffizient zu programmieren, bzw. das Programm noch weiter zu optimieren. Und da die wenigsten im embedded Bereich anfangen, wäre es in meinen Augen verbachlässigbar, mit der "Speicherverwaltung" anzufangen. Dass es sinnvoll ist, sowas zu lernen steht ja ausser Frage. Aber anfangen muss man ja deswegen nicht gleich damit, oder? (Ja. ich habe damit angefangen, würde es heute allerdings nicht mehr tun)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um eine C# Anwendung speichereffizienter zu programmieren muss ich allerdings trotzdem nichts von Zeigern und was da intern alles so wirklich passiert wissen.

Schaden kann aber auch nicht.Ich bin mir aber auch nicht sicher ob ich jemandem jetzt empfhelen würde damit anzufangen oder es lieber später mal nachzuholen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn man Anwendungen für mehrere hundert/tausend Anwender entwickelt und dann den Betreibern sagt "steckt bei allen PCs einfach mehr RAM rein, damit meine Anwendung läuft" entwickelt man bald etwas anderes...

Warauf Du hinaus willst mit Deinem Argument verstehe ich zwar, aber

a) Ist das gängige Praxis. Programme haben Mindestvoraussetzungen.

B) Von wieviel RAM reden wir hier eigentlich? Im embedded Bereich kann es wirklich speicherkritisch werden. Aber im Desktop-/Serverumfeld glaube ich das kaum. Vorallem wird's easy, wenn man es eh mit VMs zu tun hat, wo man schnell den Speicher hochschrauben kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Benötigt eine Anwendung absurd viel RAM, liegt das Problem oftmals nur in banalen Denkfehlern, die man schnell gefunden hat. In dem man penibel darauf achtet, resourcensparend zu programmieren, holt man oftmals nur ein paar Prozente raus.

Auf die Klassiker unter den Denkfehlern (z.B. riesige Datenmengen in Arrays halten, die garnicht oder zumindest nicht ständig gebraucht werden oder mehrfache Duplikate statt Pointern) sollte ein einigermaßen vernünftiger Dozent schon aufmerksam machen.

Tricks, mit denen das Programm am Ende 2% weniger RAM braucht, sollten im Unterricht kein Thema sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...