Lohnt sich C#, wenn man bereits Java kann, jedoch im Desktopbereich arbeiten möchte?

Hi,

Ich

Ich studiere derzeit Informatik im 5. Semester (jetzt beginnend) und habe noch in etwa 3 Semester vor mir. Im jetzt startenden 5. Semester habe ich das Ziel, irgendwo als Werksstudent Programmierer anzufangen. Nach dem Studium (mache nur Bachelor) werde ich sehr warscheinlich als Programmierer (Softwareentwicklung - richtung Desktop) anfangen wollen. Daher möchte ich bei dem eventuellen Werksstudentjob schon mit der “richtigen” Sprache arbeiten.

Bisher kann ich eigentlich nur Java. Mit HTML/CSS/PHP habe ich mich mal kurze Zeit befasst (mit den Grundlagen), aber das fande ich zu langweilig.
Java ist zwar sehr stark im Serverbereich und Androidbereich vertreten, aber ersteres ist nicht mein Wunsch-Berufsfeld und zweiteres sehe ich eher als Nische. Ich erwähne hier noch, dass ich später eher bei größeren Firmen arbeiten möchte und nicht bei 3-Mann Firmen. Und soweit ich weiß, gibts die meisten Androidstellen nur in solchen 3-Mann Firmen (irgendwelche Android-Startups).

Das Java jetzt stark in der Desktop-Entwicklung vertreten ist, hört man eher weniger. Da soll wohl eher C# stärker vertreten sein?!

Angesichts des Werksstudentenjobs würde ich natürlich gerne mit der “richtigen” Sprache dastehen/starten. Würde es sich für mich lohnen, mir C# beizubringen (würde das Head First C# Buch durcharbeiten)? Oder meint ihr, dass es auch genug Java-Stellen als Desktopentwickler gibt?

Hi,

mal allgemein gesagt:
C# == Windows (ignorieren wir mal Mono komplett wenn es um den Desktopbereich geht)

Zum Thema Android:
Wenn man die aktuellen Verkaufszahlen von Desktop PCs vs. Android Telefonen und Tabletts ansieht, muss man einsehen dass alles ausser Android bald eine Nische ist, mal ueberspitzt ausgedrueckt.

Was ich nicht ganz verstehe ist, warum du unbedingt in Desktopentwicklung einsteigen moechtest.
Nur mal so gefragt, hatte selber auch falsche Vorstellungen als ich in der Ausbildung war.

Schaden wird es dir jedenfalls nicht wenn du noch C# lernst.

Je nach Firma kann es sein dass da komplett auf Java Desktop gesetzt wird (Lotus Notes/ Eclipse RCP), wuerde da nihct wagen eine Aussage zu machen wie “Java ist auf dem Desktop kaum vertreten”. Es macht einen riesen Unterschied, wo man arbeitet, was nutzt mir eine Statistik wenn genau die Firma fuer die ich arbeite alles anders macht?

Ansosnten:
Grosse Firmen machen mir persoenlich keinen Spass, uralte Technologien bis hin zu verkrusteten Prozessen und viel Buerokratie… muss aber jeder selbe wissen.

[QUOTE=maki]Hi,

mal allgemein gesagt:
C# == Windows (ignorieren wir mal Mono komplett wenn es um den Desktopbereich geht)
[/QUOTE]

Wenn man ehrlich ist, nutzt doch eh fast jeder Windows.

Smartphones und Tablets sind nur Spielerrein. Um ernsthafte und größere Sachen zu machen, wird weiterhin der PC genutzt. Und mittlerweile hält PC Hardware auch viel länger. Der Otto-Normalbürger, der sich vor Jahren mal einen Quadcore mit 2-4GB RAM gekauft hat, hat doch nicht den geringsten Grund sich heute einen neuen Rechner zu kaufen?!

Was ich jedenfalls nicht möchte, sind Serverseitige Sachen, insbesondere Java Enterprise und Co. Hatte einmal damit zu tun gehabt. Sowas undurchsichtiges habe ich noch nie gesehen. Darauf möchte ich hier aber nicht näher eingehen.

HTML, CSS, PHP, JS finde ich irgendwie zu langweilig. Im Gegensatz zu Java kommen mir PHP und JS irgendwie wie ein „programmieren light“ vor. Und was macht man da auch schon großartig? Mit PHP letzendlich Benutzerdaten entgegennehmen, in DB verarbeiten und dann ausgeben. Und mit JS dann Validierung und Anzeigespielerrein. Da flasht mich einfach nichts besonders. Und HTML und CSS erst recht nicht, da ich 0 designen kann.

Anddroid wäre eine alternative, aber da ich in größere Firmen will, wird da die Auswahl wohl eher mager sein…

Es nützt mir was bei der Bewerbung. Wenn es z.B. 100 C# Desktopstellen aber nur 10 Java Desktopstellen bei mir gibt, dann sind die Chancen bei C# einfach höher.

[QUOTE=Jack159]Wenn man ehrlich ist, nutzt doch eh fast jeder Windows.
[/quote]
Witzig, in meinem privaten Umfeld ist das Gegenteil der Fall, u.a. weil ich dafuer gesorgt habe, dass mein Bruder und Familie seit 2010 ausschliesslich Ubuntu nutzen, weil ich keine Lust mehr hatte alle 6 Monate mehere Kisten neu aufzusetzen.
Dasselbe nochmal bei den Eltern, bei mir zuhause sowieso, da gibt es kein Windows.

In den Firmen war das so:
In vielen „richtigen“ IT Unternehmen ist Linux oft weit verbreitet, ansonsten laeuft es in einer VM.

Smartphones und Tablets sind nur Spielerrein. Um ernsthafte und größere Sachen zu machen, wird weiterhin der PC genutzt. Und mittlerweile hält PC Hardware auch viel länger. Der Otto-Normalbürger, der sich vor Jahren mal einen Quadcore mit 2-4GB RAM gekauft hat, hat doch nicht den geringsten Grund sich heute einen neuen Rechner zu kaufen?

Das sehe ich anders.
Ich behaupte mal dass 95% der Anwendungsfaelle daraus bestehen im Netz zu surfen (FB, Mails, ebay, Amazon, Urlaub buchen), diese „spielereien“ lassen sich genauso gut am Tablet/Telefon erledigen, mit Bluetooth Tastaturen kann man auch laengere eMails tippen.

Wozu so einen haesslichen alten Kuebel mit riesigem Platz und Strombedarf wenn das alles auch vom Tablet funzt?

Sieht man sich die HW Verkauszahlen dieses Jahres an, bekommt man den Eindruck dass der klassische Intel PC bald nur noch ein Nischendasein fuehrt.

Was ich jedenfalls nicht möchte, sind Serverseitige Sachen, insbesondere Java Enterprise und Co. Hatte einmal damit zu tun gehabt. Sowas undurchsichtiges habe ich noch nie gesehen. Darauf möchte ich hier aber nicht näher eingehen.

Ich gestehe, ich bin ein „Server“ Typ, konnte noch nie viel mit GUI Programmierung anfangen, aus den von dir genannten Gruenden.

Anddroid wäre eine alternative, aber da ich in größere Firmen will, wird da die Auswahl wohl eher mager sein…

Die grossen Automotive Hersteller setzen sehr auf Android und iOS Geraete bez. des In-Car Entertainments.
Im E-Commerce Bereich gibt es IMHO im Moment kein groesseres Wachstum als bei den mobilen Geraeten, neben der ominoesen Cloud… alles was irgendwie mit WWW zu tuen hat konzentriert sich gerade auf iOS und Android.

Es nützt mir was bei der Bewerbung. Wenn es z.B. 100 C# Desktopstellen aber nur 10 Java Desktopstellen bei mir gibt, dann sind die Chancen bei C# einfach höher.

Naja, ich dachte du wolltest explizit zu einer grossen Firma, wenn du eigentlich C# entwickeln willst und es nur grosse Firmen als Arbeitgeber dafuer gibt ist das etwas anderes.

Das hört sich fast so an, als wenn der Desktopbereich in 5 Jahren ausgestorben ist.

Das Smartphone/Tablet sehe ich eher als Notlösung für unterwegs, oder um nur mal kurz EMails zu checken um dafür nicht den gesamten PC anzumachen. Aber Artikel bestellen tu ich doch lieber am PC. Allein schon aufgrund des größeren Bildschirms, wo ich mir den Artikel mal vernünftig angucken kann. Und wie soll das denn mit der Bluetooth Tastatur gehen? Wenn das auf eine bequeme Art und Weise geschehen soll, dann am Schreibtisch, nur statt TFT vor mir ein an die Wand angelehntes Smartphone/Tablet liegt, wo ich für die Navigation mich jedesmal über die Tastatur hinwegstrecken muss? Dann doch direkt den PC anmachen, was doch viel Ergonomischer ist und die Webseiten nicht so minimiert darstellt.

Also ich war auch eher skeptisch als ich C# gelernt habe. Habe für einen Freund einen relativ komplexen Updater geschrieben der so in Java nicht möglich war. Man muss sagen das wechseln ist ziemlich einfach. Syntax ist nahezu identisch. Was ich jedoch auch sagen muss in manchen Hinsichten macht C# ein paar Dinge einfacher. Es gibt zB richtige “Referenzen” und überladene Operatoren wurden intelligent genutzt. Nachteile für mich sind die vielen verschiedene Schlüsselwörter, davon gibt es einfach eine ganze Menge zu viel. In der Hinsicht punktet Java auf jeden Fall. Außerdem ist die API Beschreibung bei Java um Längen besser. Wenn du Java schon kannst wird dir C# nicht schwerfallen. Das Java im Desktop-Bereich wenig Einfluss hat würde ich so nicht Unterschreiben. Meine Firma hat ausschließlich swing/gwt basierte Applikationen, jetzt mit JavaFX sollte das ganze nochmal stärker werden.

Eine andere Sprache zu lernen ist bestimmt nichts falsches. Ich würde dir aber empfehlen eine zu nehmen die vm Unabhängig ist. (event. C/C++)

er wird voraussichtlich noch mehr an Bedeutung verlieren, aber aussterben gewiss nicht.

bzgl windows: 90% unserer Kunden in Europa nutzen windows, aus der Erfahrung mit Kunden wie Bayer, BASF und sonstigen in der Groesse ist im Desktopbereich im Grunde nur Windows zu finden. Wenn man dann in die USA schaut, sinds zu meist Macs…

Ich bin auch kein Servertyp, jedenfalls Frontend find ich nervig. Und Backend ists dann (meists) wurscht, ob vorne nun ne Desktopapp sitzt oder irgendein Webdingens.

Zu deiner Frage: Ja es lohnt sich immer noch andere Sprachen zu lernen!

Ich denke wenn du wirklich nur im Desktop Bereich arbeiten möchtest, solltest du tatsächlich C# lernen. Da du denkst Java bereits zu können, kannst du mit C# deine Chancen ja nur verbessern. Allerdings gibt es ja wie bereits erwähnt auch noch C/C++ und diese Sprache(n) würden dir dann zusätzlich noch den Bereich Embedded Systems öffnen. Q’t ist ein sehr verbreitetes GUI Framework für C++, was man nicht unterschätzen sollte.

Ich finde es nicht sinnvoll sich in Zeiten von Mobile und Cloud Lösungen auf den Desktop Bereich zu fixieren. Und deine Ansichten zu PHP und JS sind etwas veraltet, also eigentlich uralt. Mit JS zu validieren kann man machen, aber schon vor ca. 10 Jahren wusste man, dass man Validierung in erster Linie serverseitig machen sollte, da JS ja auf dem Client deaktiviert werden kann.
Und PHP ist seit Jahren aufgrund der zahlreichen MVC Frameworks und guten Bibliotheken eine professionelle Sprache geworden, die auch ständig optimiert wird, ähnlich wie Java. Und wie man weiß sind große Teile von Facebook tatsächlich in PHP geschrieben, auch wenn FB das ganze aus Performance Gründen per HipHop Compiler in C++ übersetzt - das war ja auch nicht immer so.

Ach ja, Android ist aktuell sicher noch eine Nische im Vergleich zu den Bereichen Desktop und Server. Aber der Bereich Mobile Apps ist wohl gerade erst am Anfang, und Android ist jetzt schon mindestens auf Augenhöhe mit Apple iOS. Innerhalb von 2 Jahren hat Android Apple iOS eingeholt und wird wohl aufgrund der immer besseren Hardware bald deutlich an Vorsprung gewinnen.
Aber nicht nur in kleinen Startups werden Android Entwickler gesucht, meienr Erfahrung nach sind es sogar eher die mittelständischen Firmen, so ab 30-40 MAs. Ich habe vor 2 Jahren in einer 120 MAs Firma gearbeitet und es gab dort Entwickler für Windows Phone, BlackBerry, Android und iOS. Damals waren die meisten natürlich iOS Entwickler, manche davon waren davor sogar im Java Webumfeld tätig und haben dann umgesattelt innerhalb der Firma.

Meine persönliche Meinung ist, dass heutzutage ein Softwareentwickler auf jedenfall mind. eine Programmiersprache absolut beherrschen sollte, d.h. nicht nur Syntax und die Eigenheiten der Sprache, sondern vorallem Erfahrung mit den gängigsten APIs, Framworks, IDEs und Tools in diesem Umfeld sammeln sollte.
Nach dem Studium hat man aber erstmal die Basis für all das geschaffen. In den ersten 2-3 Berufsjahren wird man nochmal einiges dazulernen, entweder durch Kollegen oder durch Projekte.
Außerdem sind meiner Ansicht nach Kenntnisse in der Entwicklung mit Datenbanken ein Muss. Und all diese Erfahrungen die einen Entwickler aus machen lernt man wohl am besten in der Webentwicklung oder allgemein im Bereich der verteilten Systeme. Hier hat man Client- und Servertechnologien im Einsatz und lernt so beide Seiten zu verstehen. Ich würde auch behaupten, dass JEE einer der anspruchsvollsten Bereiche ist und jemand der als JEE Entwickler dann umsteigen möchte auf Desktop Entwicklung mit SWT, etc. wird sich nicht sonderlich schwer tun. Schwieriger wird es nur, wenn man dann noch die Sprache wechseln würde.

Zum Thema Web Frontends sind langweilig. Ich mach das seit meiner Ausbildung, also inklusive dieser 8 Jahre. Langweilig? Warum auch, ich hab doch nirgens eine solche (teils auch erdrückende) Vielfalt an Sprachen, Technologien, Frameworks, Libraries etc.
Ich verwend als BE Java mit Spring MVC, Web etc., davor aber mangels einer [bei uns eingesetzten] gescheiten Technologie und wegen des Wachstums der SW in den letzten Monaten ganz ganz viel handmade (“OO”) JS. Und wenn man erst mal IE6, IE8, IE9 und all die anderen Browser supporten muss, wirds witzig!

Ein kleiner sarkastischer Einschub zur Frage, ob in Zukunft noch Desktop-PCs gebraucht werden: Hat schonmal jemand auf einem Tablet Eclipse zum Laufen gebracht? :smiley:

DASS sich die Verkaufszahlen und Nutzungsarten ändern ist ja unbestritten. Und gerade bei allem, was nicht-Desktops sind, verschwimmen die Grenzen: Laptop, Laptop der als Tablet verwendet werden kann, Laptop mit Tablet-Bildschirm, Tablets, Smartphones, Smartwatches, und jetzt das, was einem Aufgrund der Sache an sich, als auch wegen des Wortes, das dafür verwendet wird, Tränen in die Augen treibt (aber was für Tränen, weiß ich nicht genau) : Phablets - Phones die so groß sind, dass es eigentlich schon Tablets sind :sick: und Android deckt alles ab. Ich traue mir nicht zu, einzuschätzen, wie groß die Wahrscheinlichkeit ist, dass Android genauso schnell von etwas anderem verdrängt wird, wie es aufgestiegen ist, aber … es ist „frei“ UND es steht die größte Firma der Welt dahinter, also… … …

Mit C# habe ich mich bisher nicht wirklich beschäftigt (und das, wie ich zugeben muss, auch aus „politischen“ Gründen), aber es ist konzeptuell wohl so ähnlich zu Java, dass es nicht wirklich eine „Horizonterweiterung“ wäre - lediglich eine neue Curly-Braces-Sprache. Ich persönlich sehe eine Renaissance der Funktionalen Sprachen (kommen? nein, sie ist eigentlich schon da) - und wenn ich eine neue Sprache lerne, wird das sicher eine mit starken funktionalen Elementen sein (Zeit… Student müßte man sein ;))

Ich habe bereits 4 Semester hinter mir und noch 3 vor mir. Bisher kann ich eigentlich nur Java. Ob du es glaubst oder nicht, bisher hatte ich einfach keine Zeit/Nerven mich großartig mit anderen Sprachen freizeitmäßig zu beschäftigen :smiley: Ich war die ersten 4 Semester größtenteils mit den knackigeren Fächern beschäftigt beziehungsweise habe da die meiste Energie reingesteckt. Und ich habe noch soviel vor… Androidentwicklung, C, eventuell C#, C++, irgendeine Skriptsprache usw…

Eines hat mir jetzt aber doch zu denken gegeben:
Wie bereits gesagt, kann ich Java (mehr oder weniger :wink: ). Das ist aber eigentlich auch die einzige Sprache bisher. Da Frage ich mich, welche Vorteile oder neuen Erkenntisse ich jetzt erhalten würde, wenn ich als nächstes C# lerne?!
Ich kann dann zwar 1 Sprache mehr, aber bringt mich speziell C# im Vergleich zu Java wirklich extrem viel weiter? Eigentlich handelt es sich bei C# um ein geschnittenes Java oder nicht? Es kostet und ist eben auf Windows eingeschränkt. Und zudem arbeitet es auch mit Byte Code. C# soll ja nahezu identisch zu Java sein. Den einzigen Vorteil den ich jetzt sehe ist, dass ich mich bei späteren Bewerbungen eben auch auf C# Stellen bewerben könnte.

Wäre es da nicht sinnvoller, sich vielleicht C# nur „mal kurz“ anzusehen und dann weiterzuziehen? Ich würde da vielleicht mal ~ 2-3 Wochen investieren und das Head First C# Buch durcharbeiten und fertig. Eben nur mal reinschnuppern.
Sobald das erledigt ist, wäre es vielleicht doch besser, mal wirklich eine komplett andere Sprache zu lernen, wie z.B. C (zu dem es glücklicherweise auch ein Head First Buch gibt :smiley: ). Oder was meint ihr?

Parallel dazu dann vielleicht auch immer an Java dranbleiben und dies dann vielleicht doch eher als Primäre Sprache sehen. Immerhin ist Java doch schon sehr mächtig wie ich finde:

  • Serverseitig schon stark und vielleicht sogar die Nr.1 (auch wenn es mich derzeit nicht intressiert, vielleicht ändert es sich ja noch!)
  • im Desktop-Bereich vielleicht auch mehr im kommen, da es einfach nicht mehr so lahm wie früher ist und auch bequemer als C++ ist denke ich
  • In der Spieleprogrammierung (nur kleinere Spiele wie Androidspiele oder Indie-Titel) eventuell auch in Zukunft mehr im kommen
  • Und natürlich Android, was wohl die Nr. 1 werden wird bzw. schon ist

Dazu wie gesagt noch C und die eingebettete Programmierung wäre auch abgedeckt. Sogesehen wäre man theoretisch mit Java und C in jedem Bereich (außer Webdesign) einsatzbereit.

Aber reiner PHP/JS Programmierer wäre glaube ich echt nichts für mich. Das kommt mir wirklich wie ein „Programmieren light“-Version vor. Einfach irgendwie abgespeckter.

Naja beide Sprachen (Java/C#) sharen die “selbe” Grundlage. Beide laufen auf einer virtuellen Maschine. C# hat nur vorteile wenn du etwas auf Windows programmieren willst. Du hast vollen Zugriff auf die Windows API, außerdem ist C# generell etwas schneller als Java (auf der WIndows Plattform). Viel Sinn C# zu lernen macht es nicht, wenn du Java schon kannst. Du brauchst höchstens eine Woche um ein paar Begrifflichkeiten umzulernen. Ich würde dir generell zu C++ raten, auch wenn du es hassen wirst wenn du schon in den Genuss von Java gekommen bist.

Ich wundere mich etwas, dass man im Studiengang Informatik im 5. semester noch kein C/C++ kennengelernt hat. Studierst du an einer Uni oder HS?

Um eine neue Sprache zu erlernen gibt es für mich nur zwei Gründe.

Es gibt einen konkreten Anlass dazu. D.h. die Sprache wird für ein Projekt benötigt oder eine Problemstellung läßt sich Sinnvollerweise nur damit ausdrücken.

Das gelernte wird meinen Programmierstiel in den Sprachen, die ich bereits beherrsche verändern. Wie Marco bereits erwähnt hat, kann das eine funktionale Sprache sein. Elemente daraus (Lambdas) findet man immer mehr und mehr im kommenden Java 8.

Zur Desktop Programmierung mit C# möchte ich noch anmerken, dass die WPF mit XAML schon recht gelungen ist. Das ist dann eine Stelle, an der ich mal ganz frech behaupte, da hat Oracle sich bei MS Inspirationen für JavaFX geholt. Und MS sich von Adobe und Flex. Das müsste man aber mal genau auf einem Zeitstrahl festhalten.

Zu Android, iOS und WP. Das ist alles sehr stark im kommen. Die interessante Frage ist allerdings, ob es native Apps werden oder HTML5 dem ganzen den Rang abläuft. HTML5 ist schon Saucool. Es ist auch durchaus denkbar, dass die Android-App nur den Rahmen für eine HTML5-App bietet. Ähnlich dem, was im Google-Chrome-OS abläuft. Damit meine ich dass eine App z.B. nur HTML rendert. PhoneGap wäre auch ein Beispiel dazu.
Das Resultat daraus wäre dann, dass Apps und Desktopapplikationen, sowie auch Webanwendungen ähnlich bis gleich zu Entwickeln wären.

Und hier gilt wiederum: Bei Webanwendungen interessiert niemanden die Sprache in der sie geschrieben ist. Ist wikipedia in Java, PHP oder C# geschrieben? Who cares?

Und zu Marco’s sarkastischem Einwurf, bzgl Eclipse

Wenn es im Browser läuft, dann läuft es auch auf dem Tablet. Das wird noch ein wenig dauern, keine Frage, aber die Richtung steht.

C# ist allerdings eine politische Entscheidung. Ich traue Microsoft einfach nicht über den Weg. Ich mag Sie nicht. Ich habe sehr, sehr schlechte Erfahrungen mit denen gemacht. Wenn etwas nicht funktioniert, dann bist du am Arsch.

Über solchen Threads hängt immer das Damoklesschwert des Sprachenbashings, und um dem vorzubeugen erstmal die Klarstellung:

Java ist die besteste Sprache von der Welt, cuz, y’know, 1337 n stuff :smiley:

Mal im Ernst: Ich persönlich sehe zwischen Java, C# und C++ so wenige konzeptuelle Unterschiede, dass bis zu einem gewissen Grad „egal“ ist, was man „lernt“. Natürlich gibt’s (meistens im Rahmen des o.g. bashings aufgelistete) Vor- und Nachteile, aber … das sind alles Objektorientierte curly-braces-Sprachen. Wenn man lernt, was Klassen und Objekte sind, was Polymorphie und Vererbung bedeuten, und ein paar Design Patterns kennt, sind das langfristig gesehen viel wichtigere Dinge, als die Frage nach dem Unterschied zwischen Structs und Classes in C#. Klar: Wenn man produktiv damit arbeiten will, MUSS man das wissen, aber es sind so gesehen „Details“, die sprachspezifisch sind und von denen es bei jeder Sprache so viele gibt, dass man sie ohnehin nicht für alle Sprachen, die man vielleicht irgendwann mal einsetzt, präventiv lernen kann.

Speziell bei den genannten Sprachen, Java, C# und C++, aber auch C, sind zudem die Kernelemente der Syntax gleich…


// Which language is this?
int foo()
{
    int i=0;
    for(i=0; i<5; i++)  
    {
        if (i != 3) return 45;
    }
    return 23;
}

Auch da gibt es spezifische Elemente, wie *pointer in C oder die pointer->notation bei C++, die Typ bei Java und C#, … aber auch da gilt, dass man die kaum für alle Sprachen alle auswendig wissen kann (und muss).

In all diesen Sprachen gilt auch, dass eine der wichtigsten Voraussetzungen, um produktiv mit der Sprache arbeiten zu können, NICHT nur irgendwelcher syntaktischer Klein-klein-kram ist. Stattdessen muss man die wichtigsten Bibliotheken kennen, die zum „quasi-Kern“ der der Sprache gehören, wie etwa die STL bei C++ oder die Collections API bei Java, und natürlich noch die Bibliotheken, die für die spezielle Aufgabe, die man zu erledigen hat, verwendet werden sollen - für GUIs in C++ vielleicht Qt, in Java eben Swing & Co. Plakativ: Es ist zwar schön, wenn man einen Mergesort in Java implementieren kann, aber wenn jemand einen Array sortieren will, und dann erstmal seinen eigenen Mergesort zusammenstümpert, statt Arrays.sort aufzurufen, ist er von vornherein unten durch :wink:

(Aber… in bezug auf Algorithmen an sich: Dass Algorithmen sprachunabhängig sind, und man (nach einer kurzen Einarbeitungszeit) sowas wie den Dijkstra in jeder dieser Sprachen runterimplementieren (oder zumindest aus Pseudocode in die jeweilige Spache umsetzen) können sollte, ist auch klar…)

Dem gegenüber stehen eben komplett andere Konzepte. Speziell funktionale Programmierung, bzw. (weil ich das als eine der Ursachen für deren Renaissance ansehe) nebenläufige Programmierung (Parallelverarbeitung, Multithreading…). Teilweise verwendet man dort Problemlösungsstrategien, die komplett anders sind, als man das von OO-Sprachen gewohnt ist. Aber… leider, leider… kenne ich mich da zu wenig aus, als dass ich das weiter ausbreiten könnte :frowning:

Trotzdem: Auch wenn ich C in diesem Sinne nicht als „komplett andere“ Sprache bezeichnen würde, kann es nicht schaden, da mal reingeschnuppert zu haben. Damit ist man schon etwas näher an der Hardware; zu wissen, was Pointer und Addressen sind (und was es für ein ätzender Krampf ist, sich um Speicherverwaltung komplett selbst kümmern zu müssen ;)) hilft an manchen Stellen sicher, die Hintergründe der High-Level-Sprachen besser zu verstehen (und vor allem lernt man einen <3 Garbage Collector <3 endlich zu schätzen). Eine „ganz andere“ interessante Sprache wäre Scala, weil das Typsystem, die schon mehrfach erwähnten funktionalen Elemente, und auch bestimmte syntaktische Eigenschaften sie schon deutlich von den anderen Sprachen abhebt (und sie, ganz vordergründig betrachtet, an Bedeutung zu gewinnen scheint). Ich persönlich würde mir auch gerne mal die neueren Features von C++11 ansehen (und da sind sie wieder, die funktionalen Elemente ;)), und den beeindruckenden Werkzeugkasten, der einem mit den Boost.org libraries zur Verfügung steht (und mit dem man in C++ schon fast so bequem programmieren kann, wie in Java von Haus aus :smiley: ), aber … wenn ich mir das wirklich alles ansehen will, muss ich endlich aufhören, solche langen Beiträge wie diesen hier zu schreiben… -_-

langweile etc sind Empfindungen, die ergo subjektiv sind…

öh nein - eher einen vernüftigen Destruktor. Das fehlen eines Destruktor nervt mich richtig. Man hätte ja den Destruktor lassen können. Der GC räumt dann auf und ruft dabei den Destruktor auf. Aber nein, man muss ja einen definierten Zeitpunkt für Aufräumaktionen einfach entfernen. Wenn ich aus einem Objekt einen Listerner entfernen will, weil das Objekt nicht mehr gebraucht wird, muss ich das dann doch irgendwo von Hand machen. Lustig wird es, wenn das Objekt an mehreren Stellen aus verschiedenen Gründen nicht mehr gebraucht wird. Ergo muss ich mehrere Stellen meinen eigenen „Destruktor“ aufrufen.

Ein absoluter Designfehler: IDisposable Schnittstelle (System) | Microsoft Learn

*** Edit ***

öh - der Kram von Microsoft funktioniert schon. Du musst es nur so verwenden wie MS sich das gedacht hat. Wenn Du nur ein Detail anders machst, musst Du es selber machen. Das merkst Du vor allem an VB.Net. Da kaut Dir MS alles richtig simple vor. Und dann kommen ganzen Anfängerfrage wie man ein Fenster ein zweites mal aufmachen kann über My.Forms.Fenster -.-

Ich bin auch ein paar mal mit dem MS kram auf die Fresse geflogen. Nimmt Dir schön die Arbeit ab. Aber am Ende ist es immer besser gewesen, wenn ich es selber gemacht habe…

Du musst wegen deinem Unvermögen (dem Nicht-vorhanden-Sein einer entsprechenden Fähigkeit) nicht andere Firmen in deinen Äußerungen negativ bewerten.

@mogel : Ich bin nicht sicher, worauf sich das bezieht. FALLS damit gemeint war, dass es schön wäre, mitzukriegen, WANN genau ein Objekt als „nicht mehr benötigt“ erkannt wird: Das stimmt. Die ‚finalizer‘ sind für sowas ungeeignet, und selbst WeakReferences liefern nicht die benötigte Information.

Wenn ich aus einem Objekt einen Listerner entfernen will, weil das Objekt nicht mehr gebraucht wird…

Das geht ja noch. Das Objekt wird gelöscht, und damit die Referenz auf den Listener. Viel problematischer ist IMHO gerade die andere Richtung: Es gibt keine Referenz mehr auf ein Objekt, aaaaber es liegt noch als Listener in irgendeiner Listener-Liste, und keiner weiß das - das sind die heißesten Kandidaten für „Memory-Leaks“ in einer Sprache mit GC.

EDIT: iKnwWhtUDidLast: Lies den Post von mogel nochmal, und pass’ dann ggf. deinen Post entsprechend an.

Wieso beleidigst du ständig andere User? Ist das dein natürlicher Umgangston?
Dann ändere ihn ganz schnell!