Leidige Frage - Für Anwendungs- UND Systemprogrammierung eher C oder C++?



  • Sollte es hier im Forum dennoch bereits beantwortet worden sein, so bitte schließt den Beitrag und gebt mir doch einen Link - ich hab nicht's gefunden.

    Das wird sogar endlos im Kreis diskutiert. Aber eine abschliessende Antwort, mit der alle zufrieden waren, gab's afaik bis jetzt nicht. Einfach mal ein wenig suchen, gute Stichworte sind "C", "C++", "linux kernel", "windows kernel" udgl.



  • schon wieder diese glaubensfrage



  • silberfisch schrieb:

    Ich hab' beschlossen, aus Freude C oder C++ zu lernen.

    Das ist Unfug. Du wirst C UND C++ lernen.
    Es fragt sich nur, in welcher Reihenfolge. Und über die beste Reihenfolge gibt es keine Faustregel. Beide Reihenfolgen haben ihre Vorzüge. Es hängt vom jeweiligen Schüler ab, wierum es für ihn am besten wäre.



  • silberfisch schrieb:

    Aber die Kernel der meisten Betriebssysteme sind ja in C geschrieben - nicht in C++. Wieso ist das heute noch der Fall?

    was heisst heute noch? C und C++ sind beides relativ alte sprachen. anhand des alters kann man nicht entscheiden, was gut oder mies ist. zu C++ im kernel-mode (windosen kernel) schau mal hier: http://www.microsoft.com/whdc/driver/kernel/KMcode.mspx

    silberfisch schrieb:

    Würde mir C++ für die Systemprogrammierung weiterhelfen?

    ich denke nicht, aber darüber herrschen geteilte meinungen. ich meine, dass man mit C auf systemebene besser dran ist. C++ ist unglaublich mächtig und verführt viele programmierer dazu, seltsame umwege zu gehen, den abstraktionsgrad künstlich hochzutreiben, nach sinnlosen verallgemeinerungen zu suchen, usw. was schnell nach hinten losgehen kann. system-software sollte, meiner meinung nach, kompakt, performant und 'straight' sein und dazu ist C als 'portabler makro-assembler' sehr gut geeignet. auch zwingt C einem, durch sein geringes abstraktionsniveau, eine maschinenfreundlichere denkweise auf als C++.

    silberfisch schrieb:

    Und andererseits, ist C für Anwendungsprogrammierung brauchbar? Und wie ist das nun, ist ein C++-Programmierer in der Lage, komplexen C-Code zu verstehen?

    wahrscheinlich ja. umgekehrt wird es wohl nicht mehr so sein. C++ programme können sehr unleserlich sein (schau dir z.b. mal den code der STL an), so dass selbst gestandene C++ coder da kaum durchblicken. C-code kann natürlich auch beliebig komplex und undurchschaubar sein, aber das macht niemand (ausser mit absicht).
    🙂



  • Gerade bei C++ ist es (imho) so das die Sprache von einem Entwickler sehr viel Wissen abverlangt damit dieser auch nur halbwegs brauchbare Programme damit schreiben kann.

    Im Vergleich dazu kann man bei Sprachen wie java und C# mit viel weniger Wissensbasis bereits gute Programme erzeugen. Das soll jetzt nicht heissen diese Sprachen seien weniger mächtig, sondern eher besser Strukturiert.

    In C++ kann man auch so ziemlich alles was geht falsch machen ohne das die Sprache bzw der COmpiler auch nur nen Mucks macht. Dagegen erlauben Sprachen wie Java udn C# viele der groben Fehler gar nicht erst.

    NAch meiner Meinung ist C++ einfach die falsche Sprache für einen Einsteiger, weil er hier so ziemlich alles falsch lernen kann was geht.

    Zur Eingangsfrage... Ich finde weder C noch C++ sind in der heutigen Zeit für Anwendungsentwicklung die richtige Wahl. Dann schon eher C# (für die Microsoft Welt) oder Java für den Rest 😉



  • loks schrieb:

    Zur Eingangsfrage... Ich finde weder C noch C++ sind in der heutigen Zeit für Anwendungsentwicklung die richtige Wahl. Dann schon eher C# (für die Microsoft Welt) oder Java für den Rest

    *ack*, wobei Java unter windows auch nicht das schlechteste ist, wenn einem maximale portabilität wichtig ist.
    🙂



  • ;fricky schrieb:

    loks schrieb:

    Zur Eingangsfrage... Ich finde weder C noch C++ sind in der heutigen Zeit für Anwendungsentwicklung die richtige Wahl. Dann schon eher C# (für die Microsoft Welt) oder Java für den Rest

    *ack*, wobei Java unter windows auch nicht das schlechteste ist, wenn einem maximale portabilität wichtig ist.
    🙂

    ...und geschwindigkeit egal ist.



  • silberfisch schrieb:

    Soweit ich weiß, ist C eher für Systemprogrammierung in Verwendung, und C++ für größere Anwendungen, da es aufgrund des OOP einfacher zu warten und dergleichen ist..

    Das Problem ist nur, dass OOP in C++ keinen Spass macht.

    silberfisch schrieb:

    Wieso ist das heute noch der Fall? Würde mir C++ für die Systemprogrammierung weiterhelfen? Und andererseits, ist C für Anwendungsprogrammierung brauchbar?

    Ich verstehe nicht wieso man unbedingt eine Sprache fuer alles nehmen muss. IMHO eignen sich weder C noch C++ fuer Anwendungen.



  • DEvent schrieb:

    Das Problem ist nur, dass OOP in C++ keinen Spass macht.

    Etwas, das man nicht beherrscht, macht selten Spass.

    DEvent schrieb:

    IMHO eignen sich weder C noch C++ fuer Anwendungen.

    Jaja. IMHO bist du ein Troll.



  • DEvent schrieb:

    Das Problem ist nur, dass OOP in C++ keinen Spass macht.

    OOP macht generell keinen Spaß. Also, wo ist das Problem?



  • silberfisch schrieb:

    Soweit ich weiß, ist C eher für Systemprogrammierung in Verwendung, und C++ für größere Anwendungen, da es aufgrund des OOP einfacher zu warten und dergleichen ist..

    Ja, das stimmt.
    Wenn du mal Informatik studierst, dann wirst du im Fach Systemprogrammierung in C programmieren.
    Auch heute noch, bei den Bachelor Studiengängen.

    Aber die Kernel der meisten Betriebssysteme sind ja in C geschrieben - nicht in C++.

    Haiku, der Open Source Ersatz von BeOS ist AFAIK in C++ geschrieben.
    http://de.wikipedia.org/wiki/Haiku_(Betriebssystem)

    **Wieso ist das heute noch der Fall?
    **

    **
    AFAIK weil C Funktionen feste Einsprungnamen hat (oder wie man das nun genau nennt, Profis wissen was ich meine) und somit sich besser auch von anderen Programmierprachen aus nutzen läßt.
    C++ ist hier von Compiler zu Compiler unterschiedlich und dann gibt's noch so Sachen wie Funktionsüberladung usw. das macht das ganze von anderen Sprachen aus nicht einfach.

    Würde mir C++ für die Systemprogrammierung weiterhelfen? Und andererseits, ist C für Anwendungsprogrammierung brauchbar?

    1. Ja, C++ ist im Prinzip ja eh nur eine Erweiterung von C.

    2. Ja, C kann man auch für Anwendungen verwenden, wird halt umständlicher bei großen Projekten.
    Aber schau dir mal Gnome und so an, dieses Projekt ist groß und in C geschrieben.

    [QUOTE]
    Und wie ist das nun, ist ein C++-Programmierer in der Lage, komplexen C-Code zu verstehen?**
    Ja

    Mir sind beide Bereiche ungefähr gleich wichtig, die Frage ist also, welche der beiden Sprachen lässt sich eher mit beiden Feldern vereinbaren?

    C ist hier IMO universeller aber auch umständlicher.
    Lern doch einfach beides.



  • silberfisch schrieb:

    Aber es wird wirklich nicht darauf eingegangen, welche Sprache sich eher für BEIDES verwenden lässt. Es geht mir eig. nur um diese Frage.

    BTW, du könntest auch D nehmen, D eignet sich für beides, da es zum einen für die Systemprogrammierung ausgelegt ist aber zum anderen auch Objekt Orientierte Programmierung out of the Box bietet.
    Mußt halt dann leider damit rechnen, daß D in der Industrie bis jetzt so gut wie gar nicht benutzt wird, aber für deine eigenen Projekte wäre es kein Fehlgriff.



  • Ach ja und wenn du am Linux Kernel herumwerkeln willst, dann wirst du um C nicht herumkommen.
    Linus Torvalds erwartet nämlich C Code.



  • *chipshol* *bieraufmach* *zurücklehn* 😃 😃 😃

    Natürlich C. Ich liebe Pointer, lege mir typedefs unter's Kopfkissen und
    finde OOP einfach überflüssig und langweilig. Javascript ist schon schlimm
    genug. Natürlich kann man in C größere Projekte realisieren (zB Linux oder
    einen C++- oder Java-Compiler 🕶 ). Aber dann kann man auch beim
    Original bleiben 👍



  • otze schrieb:

    DEvent schrieb:

    Das Problem ist nur, dass OOP in C++ keinen Spass macht.

    OOP macht generell keinen Spaß. Also, wo ist das Problem?

    OOP macht sehr viel Spaß. Was hast du den für Leiden mit OOP?



  • DEvent schrieb:

    Was hast du den für Leiden mit OOP?

    er hat bisher bestimmt nur OOP unter C++ gemacht. *fg*
    🙂



  • Scheppertreiber schrieb:

    ... und finde OOP einfach überflüssig und langweilig.

    ^^überflüssig ist es schon mal nicht. warum du's nicht magst, sollteste vielleicht mal erzählen, also berichte über deine schlechten erfahrungen.
    🙂



  • @fricky
    Du halt den Mund. Du hast doch von OOP noch weniger Ahnung als von C++. Hindert dich zwar nicht dran drüber zu reden, aber Politiker quaseln ja auch andauernd.

    @DEvent Es ist nicht schön, es ist nicht elegant. Multithreading mit OOP ist ein Horror. Wiederverwendbarkeit von OOP-Code ist nur ein Mythos und übersichtlicher wird der Kam dadurch auch nicht.
    Das Tolle an OOP ist, dass es ermöglicht, wie im Alltag zu denken. Das schlechte an OOP ist, dass es ermöglicht, wie im Alltag zu denken. Algorithmen lassen sich eben so nicht adäquat ausdrücken. Diese Alltagsdenkerei verleitet nur zu unnötig aufgeblähtem Design, weil die Alltagsdenke nicht direkt und pragmatisch ist.

    Ich halte OOP für mit den schwierigsten Programmieransatz, weil er enorm hohe Anforderung an den Programmierer stellt damit das eintritt, was der Gedanke hinter OOP war. In der PRaxis ist das aber alles nur Frickelei.

    Ne, dann lieber Funktional. Die Eleganz und Kürze die funktionaler Code haben kann ist einfach nur erstaunlich. Dass man einfach seine Funktion beliebig on-the-fly zusammenstecken und auf seine Daten jagen kann ist etwas, was mir sehr gut gefällt.

    Die kritik richtet sich natürlich vorwiegend gegen rein-objektorientierte Sprachen wie java. Ich musste Java programmieren und ich habe mich noch nie in einer Sprache so unwohl gefühlt. Was für einen code-overhad man hat, nur um eine Funktion als Functor übergeben zu können ist un-glaub-lich. Kommt ja in Swing zum Glück nur selten vor...



  • So ist es. In die reale Welt übersetzt der Versuch einen Pudding an die Wand zu nageln.

    Gezwungenermaßen plage ich mich momentan mit JavaScript. Ein wildes Gemisch aus Allem 😡



  • otze schrieb:

    Ne, dann lieber Funktional. Die Eleganz und Kürze die funktionaler Code haben kann ist einfach nur erstaunlich. Dass man einfach seine Funktion beliebig on-the-fly zusammenstecken und auf seine Daten jagen kann ist etwas, was mir sehr gut gefällt.

    na, deshalb gibts ja auch sowas wie groovy und scala für die Java-plattform, mit denen du auch funktional programmieren kannst. das sind zwar eigenständige sprachen, aber sie können mit normalem Java-code gemischt werden.
    🙂


Anmelden zum Antworten