024
16.05.2006, 16:19 Uhr
~MarkusT
Gast
|
Zitat von (un)wissender: |
Früher dachte ich, C++ sein das Non Plus Ultra, weil mächtig. Heute finde ich die Sprache immer noch gut, aber mittlerweile versuche ich Projekte so zu gestalten, dass sie so schnell und einfach wie möglich über die Bühne gehen.
|
C++ ist immer noch eine der ausgereiftesten, wenn nicht die ausgereifteste Sprache die existiert! Sie deckt eine dermaßen große Bandbreite in der Softwareentwicklung ab, wie kaum eine andere Sprache. Sie hat wesentliche Sprachelemente hinzugefügt die von vielen Programmiersprachen übernommen wurden. Alle beiden erfolgreichen Abkömmlinge, nämlich C# und Java orientierten und orientieren sich an C++.
Zitat von Bruder Leif: |
Was die "bessere" zweier Sprachen ist, kommt immer auf die Situation an. Analog für Datenbankserver, GUI-Toolkits und so weiter...
|
Das ist wohl war! Die Auswahl der Programmiersprache richtet sich stark nach den Anforderungen und Gegebenheiten. Die Produktivität ist aber ein entscheidender Faktor in der Wirtschaft. C++ besitzt keine dermaßen große Standardbibliothek wie Java oder C#/.NET. Ich denke hier insbesondere an ein GUI Framework oder an eine Socket Bibliothek. J2EE und .NET sind riesige Frameworks die dem Entwickler für fast jedes Problem die fertigen Befehle zur Verfügung stellen. Allein die FCL des .NET Frameworks wächst in einer dermaßen rasenden Geschwindigkeit das einem Angst und Bange werden kann. Ständig kommen neue Methoden und Klassen hinzu.
Die C++ STL hingegen ist sehr allgemein gehalten. Keine Programmiersprache stellt einem jedoch effizientere und umfangreichere Algorithmen und Datenstrukturen zur Verfügung als C++. Man denke beispielsweise an Trees insbesondere an B-Trees. Viele große Projekte, wie SQLite, MySQL usw. setzen diese effektiv mit C/C++ um. Die Flexibilität und Performance von C/C++ ist unerreicht! Algorithmen werden so gut wie immer in C/C++ implementiert. Diese Komplexität und der Mangel an einem produktiven Framework haben jedoch ihren Preis gefordert. Projekte die darauf aus sind Standard-Applikationen schnell und solide umzusetzen werden C/C++ nur selten auswählen. Große Projekte werden aber immer noch oft mit C/C++ aufgezogen. Microsoft hat die komplette CLR in C/C++ implementiert. Das Unternehmen wird weiterhin seine Produktpalette nach eigenen Angaben zu über 50% in C/C++ realisieren.
Leute die aber im Bereich der Mobile Devices entwickeln werden mit hoher Wahrscheinlichkeit kein C/C++ nehmen sondern Java. Das heißt wir kommen zu dem oben geschriebenen Satz. "Es kommt schlicht und ergreifend auf die Situation an!" . Wer jedoch eine Programmiersprache wirklich lernen will, der sollte zu C/C++ greifen. Nur so kann man wirklich lernen zu verstehen. Anschließend tritt man über zu C# oder Java usw.
Zitat von Reyx: |
Ich halte es für sehr wichtig, neue Technologien zu beherrschen, und auch ich programmiere sehr gerne in C#, aber man verliert meiner Meinung nach die Wurzeln aus den Augen. Wenn man vergisst, worauf all diese Säulen, heißen Sie nun Java, .Net oder Garbage Collection, errichtet sind, dann stürzen Sie eines Tages ein und man fängt da an, wo man Jahre zuvor glaubte, etwas besseres gefunden zu haben.
|
Naja, ganz so drastisch sehe ich das nicht, obwohl ich zum großen Teil deiner Meinung bin. Das Hauptproblem besteht in der hohen Abstraktion! Der Programmierer wird vollständig von der Maschine entkoppelt. Java und C#/.NET sind verwaltete Programmiersprachen mit einem völlig anderen Konzept! Die virtuelle Maschine kontrolliert deinen Code. Sie ist es die entscheidet was, wann, wo und wie ausgeführt wird! Microsoft hat mit dem Prinzip der Assemblys auch ein neues Sicherheitssystem mit dem Namen "Code Access Security" eingeführt. In Zukunft werden Programme nur dann ausgeführt wenn die entsprechenden Rechte vom Programm geliefert werden - siehe "starker Name" in .NET. Dies eröffnet eine neue Ära in der Anwendungserstellung und Ausführung. DRM rückt näher und näher. Man sollte sich also klar machen das der eigene Code unter die indirekte Kontrolle großer Konzerne wie Sun und Microsoft fällt. Ohne installiertem .NET oder J2EE läuft dann nichts mehr. Natürlich ist bereits mit Windows NT und der Trennung von Kernel und User Mode eine Abspaltung vonstatten gegangen, aber längst nicht so wie das in Zukunft sein wird.
Zitat von Reyx: |
Wenn der durchschnittliche Programmierer glaubt, es reicht, wenn er in VC# ein Formular zusammenklickt und auf Button-Klicks eventmäßig reagiert, so ist das schön für ihn. Er wird jedoch nie die Zusammenhänge im System, die Technik, auf der dies alles basiert, verstehen. Er wird niemals in der Lage sein, native Anwendungen zu schreiben, die frei und unabhängig von irgendwelchen Pseudomonopolen gesteuert werden. In dem Moment, in dem keine Garbage Collection mehr da ist, in dem Moment, wo man seine Verantwortung als Programmierer nicht mehr auch die fehlerträchtige Software irgendwelcher Redmonder und Konsorten abschieben kann, da wird der "programmierer" sich viel eher als ein "bastler" herausstellen, der zwar die vorhandenen Klöpse zu einem brauchbaren Ergebnis zusammenwürfeln kann, jedoch niemals wirklich selbst programmieren wird.
|
Das ist das Problem. Mir begegnen in Foren immer mehr Leute die gleich mit C# angefangen haben zu programmieren. Ich sehe das sehr kritisch, da man davon ausgehen kann das es in Zukunft mehr und mehr Programmierer geben wird die von der zugrundeliegenden Technik immer weniger verstehen. Jeffrey Richter, ein wichtiger .NET Berater und langjähriger Publizist bei Microsoft hat das selbst mal formuliert. Nur der der versteht wie die unterliegenden Schichten funktionieren wird seine eigenen Programme besser und effektiver schreiben können. Ich habe selbst C/C++ lange Jahre verwendet und lese mich derzeit durch das Standardwerk "Expertenwissen zur CLR und dem .NET-Framework" weil ich der Meinung bin man sollte sich mit der internen .NET Technik befassen wenn man schon das Framework verwendet. Ich bin kein .NET Gegner, im Gegenteil ich finde das .NET Framework sogar genial konzipiert und ich gönne jedem Unternehmen die Produktivität. Aber ein Softwareentwickler der nicht einmal weiß was genau Zeiger sind, wie der Speicher organisiert wird, wozu der Stack gut ist, wozu der Heap der wird meiner Meinung nach sein Leben lang ein Fachidiot mit begrenztem Horizont sein und hätte sich vielleicht ein anderes Tätigkeitsfeld aussuchen sollen.
Zitat von Reyx: |
Ihr denkt, Garbage Collection ist ein Schritt in die Zukunft? Ich denke, es ist der Anfang vom Ende, denn der Programmierer schiebt die Verantwortung von sich weg! Früher hieß es: "Etwas funktioniert nicht - Behebe den Fehler!". Nach dieser neuen Moral wird es bald heißen "Etwas funktioniert nicht - Behebe den Fehler", und dann hat er behoben zu sein. Und wenn er trotz einiger Einstellungen in den VMs immer noch da ist ... Tja, dann ist der Programmierer wohl am Ende mit seinem Esperanto. Es ist bequemer, durchaus, es ist der einfachste Weg, durchaus, aber es beraubt mich, auch wenn viele das nicht einsehen wollen, Teile meiner Möglichkeiten, und damit ist ein ein Schritt zurück!
Das die Firmen ihre teuren Angestellten lieber halbfertige Software oder irgendwelche PE-Module ausliefern lässt, als gut getestete, native und überlegte Anwendungsprogramme, ist klar, aber teilen muss man diese Einstellung nicht.
|
Wie gesagt, die Vorteile von .NET sind aber herausragend.
- Ich habe ein konsistentes Programmiermodell: Allen Anwendungsdiensten steht ein eiheitliches OO Modell zur Verfügung. - Vereinfachtes Programmiermodell: Keine Registrierung mehr, keine GUID, keine HRESULTS usw. - Was einmal läuft läuft überall: Ein .NET Programm läuft auf allen Systemen die das .NET Framework brereitstellen. Keine DLL-Hell mehr. Die Komponenten sind Teil der Assemblys. - Vereinfachte Bereitstellung: Kein komplexer Installer ist mehr erforderlich. Die Anwendung läuft aus dem Verzeichnis heraus und schreibt sich nicht überall in das System. Dadurch ist die Deinstallation ein Kinderspiel. - Plattformunabhängigkeit: Die Plattformunabhängigkeit ist wesentlich besser als die von Java. .NET realisiert ein Modell das vollständig ECMA standardisiert ist. Dagegen ist Java Sun's Eigentum und hat nie ein dermaßen konsistentes Modell dargestellt. - Vollständige Intergration verschiedener Programmiersprachen: In .NET ist die Wahl der Programmiersprache vollkommen egal. Ob VB.NET, C# oder J#, alles wird in eine einheitliche IL kompiliert. - Einfacheres Wiederverwenden von Code. - Automatische Speicherverwaltung. - Typsicherheit: Ein Integer ist auf einer 32 Bit Maschine auch wirklich genauso groß wie auf einer 64 Bit Maschine! Der Code springt whrend der Ausführung nur an bekannte Stellen. Auf diese Weise werden viele Fehler ausgeschlossen. - Sehr komfortables Debuggen möglich: Übergreifendes Debuggen wird von der CLR unterstützt. - Konsistente Fehlerverarbeitung: Komplettes Exception-Handling wird im gesamten .NET Framework zur Verfügung gestellt. - Sicherheit: Der Codezugriff ermöglicht es schadhafte Programme leicht auszuschließen. Nur vertrauenwürdige Assmebly werden ausgeführt. Ähnlich dem heute schon realen WDM. - Interop Fähigkeiten: Interop mit unmanaged Code wird von .NET sehr leicht ermöglicht. Viel besser als das JNI in Java. Ich kann eine performante DLL in C/C++ schreiben und aus C# heraus aufrufen.
u.v.m.
Man verliert einen beträchtlichen Teil der Verantwortung und Kontrolle, gewinnt aber zahlreiche Vorteile. Man muss sich also überlegen was die eigene Software leisten soll und was man erreichen möchte.
Gruß Markus |