Welche Prinzipien werden aus C gelernt, die in höheren Sprachen nicht gelernt werden können? [geschlossen]

11

Ich glaube, C ist eine gute Sprache, um die Prinzipien hinter dem Programmieren zu lernen. Was können Sie in niedrigeren Sprachen lernen, die von höheren Sprachen wie Ruby "magisch" sind?

Andrew
quelle
2
Du lernst die Magie oder sowieso etwas davon. Da C "näher am Metall" ist, erfahren Sie mehr über das Metall.
Robert Harvey
1
Ich habe das Konzept der Referenz erst vollständig verstanden, als ich auf C ++ gestoßen bin.
user6245072
6
C zeigt Ihnen, was ein Stapelüberlauf tatsächlich ist. Der harte Weg.
David25272
1
Ich wünschte, neue Programmierer würden damit beginnen, gutes altes Pascal und strukturierte Programmierung zu lernen. Sie lernen, sich logisch und strukturiert auszudrücken.
Bent
2
Nur C und C ++ lehren Sie, dass der Compiler Ihr schlimmster Feind ist.
CodesInChaos

Antworten:

9

In C gibt es keine Prinzipien im allgemeinen abstrakten Sinne der Informatik, die nicht auch in höheren Sprachen vorhanden sind. Die gesamte Informatik läuft auf Algorithmen hinaus, und alle Algorithmen können in jeder Sprache implementiert werden, die so vollständig wie C ist.

Der Unterschied, den C von höheren Sprachen unterscheidet, ähnelt dem Unterschied, den Maschinencode von C unterscheidet: Die Beziehung der Maschine zum Code.

Wenn Sie Code in Hochsprachen schreiben, kümmern Sie sich (im Allgemeinen) nicht darum, wie Ihr Code mit dem Computer interagiert. Die virtuelle Maschine, die die Sprache für sich selbst definiert, verbirgt viele dieser Aspekte der Codeausführung.

In C steht die Interaktion Ihres Programms mit dem Speicher im Vordergrund. Es ist mehr als nur so, dass Sie die Verwendung des Heaps verwalten müssen, es umfasst die Interaktion Ihres Codes mit dem Stapel und wie sich der bloße Zugriff Ihres Codes auf den Speicher auf das Verhalten und die Leistung Ihres Codes auswirkt - nicht einmal auf die Reihenfolge der Speicherzugriffe kann Ihrer Aufmerksamkeit entgehen, da das Lesen des falschen Speichers zur falschen Zeit die Leistung effektiv beeinträchtigen kann.

In höheren Sprachen sind diese Dinge einfach nicht so offensichtlich. Der Speicher wird ohne Ihr Wissen und manchmal ohne Ihre Aufforderung zugewiesen und freigegeben. Meistens liegt dies einfach außerhalb Ihrer Kontrolle. Das Wann, Wo, Wie und Warum der meisten Speicherzuordnungen ist Ihnen einfach verborgen.

In der anderen Richtung bringt das Schreiben von Maschinencode oder Assembler-Code noch mehr Details in den Vordergrund: Fast nichts bleibt außerhalb Ihres Zuständigkeitsbereichs, und Ihr Code muss unter Berücksichtigung jeder Zuordnung, jeder Ressource, jedes übergebenen Datenelements geschrieben werden durch die Register der CPU - Wissen, das so weit von Hochsprachen entfernt ist, dass es geheimnisvoll ist.

grau verblassen
quelle
6
Ich habe nie ganz verstanden, warum die Leute in solchen Diskussionen immer die Vollständigkeit von Turing erwähnen. Vollständigkeit ist in diesem Zusammenhang nicht aussagekräftig; C unterscheidet sich in dieser Hinsicht nicht von anderen Programmiersprachen, daher kann durch Umschalten auf C nichts über die Turing-Vollständigkeit gelernt werden. Die einzige Zeit, in der die Turing-Vollständigkeit relevant wird, ist die Diskussion über etwas, das nicht Turing-vollständig ist, wie CSS oder HTML . Zur Hölle, wenn Sie hart genug blinzeln, sind auch diese Turing-vollständig . Die aussagekräftigeren Fragen konzentrieren sich auf die Benutzerfreundlichkeit.
Robert Harvey
3
@RobertHarvey Mein Punkt ist, dass solange eine Sprache ein vernünftiges Minimum an Rechenfähigkeit hat, ihr "Niveau" aus der Sicht von Algorithmen irrelevant wird, die die einzigen Dinge sind, die in diesem Zusammenhang wichtig sind.
Greyfade
3
Weil Sie einen Punkt ansprechen, der für die Frage des OP völlig unerheblich ist. Programmierer tun dies die ganze Zeit; Sie werfen den Ausdruck "Turing-complete" herum, als hätte er tatsächlich eine sinnvolle Verwendung in der Praxis. Es tut es nicht, außer um darauf hinzuweisen, dass es keine Rolle spielt.
Robert Harvey
2
<irony> Biologie ist nur ein Sonderfall der Chemie, ein Sonderfall der Teilchenphysik. Wenn Sie sich mit Teilchenphysik auskennen, können Sie nichts aus der Biologie lernen. Richtig? </ Iron>
Florian F
3
Es ist erwähnenswert, dass C lediglich erfordert, dass Sie Zuweisungen und Freigaben explizit vornehmen, aber sie betreffen immer noch eine abstrakte Maschine, genau wie in "höheren" Sprachen - die physische (z. B.) x86-Maschine fällt immer noch nicht in den Geltungsbereich von C. One kann eine perfekt sandboxierte VM erstellen, die C-Code interpretiert, jedoch keine Kontrolle über die Speicherzuordnungen der physischen Maschine hat, und es kann sich dennoch um eine 100% konforme Implementierung handeln.
Theodoros Chatzigiannakis
13

Ich weiß, dass C eine gute Sprache ist, um die Prinzipien hinter dem Programmieren zu lernen.

Ich stimme dir nicht zu. In C fehlen zu viele Funktionen, um die Prinzipien der Programmierung zu erlernen. Die Funktionen von C zum Erstellen von Abstraktionen sind schrecklich, und die Abstraktion ist eines der Schlüsselprinzipien der Programmierung.

Wenn Sie lernen möchten, wie Hardware funktioniert und daher ein gewisses mechanisches Verständnis für die Maschine besteht, sollten Sie den Maschinencode, auch als Befehlssatzarchitektur bezeichnet, lernen und auch die Cache-Konstruktion moderner CPUs studieren. Beachten Sie, dass ich keine Assemblersprache empfehle. Verstehen Sie einfach die Hardwareanweisungen, damit Sie verstehen, was ein Compiler generiert.

Wenn Sie Programmierprinzipien lernen möchten, verwenden Sie eine moderne Sprache wie Java, C # oder Swift oder eine der Dutzenden anderen wie Rust. Studieren Sie auch die verschiedenen Arten von Programmierparadigmen, einschließlich funktionaler.

Erik Eidt
quelle
12
C ist gut darin, Abstraktionen zu erstellen. Sie können Methoden in C schreiben, und Sie können Daten wie Strukturen in C. Gesamte Betriebssysteme verpacken wurden mit C. Was C gebaut nicht ist bei gut jedermanns „modern“ Vorstellung davon , was Objektorientierung ist erfüllt, soll zu sehen mögen.
Robert Harvey
4
Nicht ganz. C ist ziemlich viel höher als ASM. Erwarten Sie nur nicht, Klassen darin zu verwenden, obwohl es Möglichkeiten gibt, dies zu tun , wenn Sie dazu neigen.
Robert Harvey
4
Ersetzen Sie in Ihrem Kommentar "Assembler" durch "Brainfuck", und dies sollte weiterhin zutreffen. Das heißt aber nicht, dass ich bald Brainfuck verwenden werde.
Robert Harvey
6
Ihre Argumentation über die Funktionen von C ist wirklich nur dann sinnvoll, wenn Sie glauben, dass Klassen (und Speicherbereinigung usw.) ein notwendiges Element für das Unterrichten eines neuen Programmierers sind (was ich nicht tue). Niemand hier befürwortet den Versuch, Klassen in einer klassenlosen Sprache zu verwenden.
Robert Harvey
5
@Robert, mein Argument ist, dass C eine Sprache auf niedrigerer Ebene ist und als solche kaum die beste Sprache für das Verständnis von Programmierprinzipien, die wir auch über Assembler sagen können, und nur weil es sich um Sprachen auf niedrigerer Ebene handelt, heißt das nicht Sie sind irgendwie näher an "wahren" Prinzipien der Programmierung. Diese Sprachen verstehen stattdessen besser, wie Hardware und Betriebssysteme funktionieren. Wenn dies von Interesse ist, empfehle ich, beim Erlernen der Befehlssatzarchitektur und der Maschinensprache direkt auf die unterste Ebene zu springen. Ansonsten stehen viele Sprachen zur Auswahl.
Erik Eidt
8

C und die (abstrakte) Maschine

Die meisten Programmiersprachen werden als abstrakte Maschinen beschrieben. Anschließend werden sie mithilfe von Tools wie Compilern, Linkern, Assemblern, Interpreten, statischen Analysatoren, Zwischensprachen und Hardware implementiert , die zusammen ein Ergebnis liefern, das mindestens das gesamte erwartete Verhalten der abstrakten Maschine berücksichtigt, das von einem Programm beobachtet wird .

C ist keine Ausnahme von der obigen Regel. Es wird als abstrakte Maschine beschrieben, die keine Ahnung von Ihrer tatsächlichen Hardware hat.

Wenn Leute sagen, dass C Ihnen beibringt, wie Ihr Computer tatsächlich funktioniert, bedeutet dies normalerweise, dass C Ihnen beibringt, wie C funktioniert. Da C in der Systemprogrammierung so weit verbreitet ist, ist es verständlich, dass viele Leute anfangen, es mit dem Computer selbst zu verwechseln. Und ich persönlich würde sogar sagen, dass es oft wichtiger ist zu wissen, wie C funktioniert, als zu wissen, wie der Computer selbst funktioniert.

Aber noch, C und die Computer sind verschiedene Dinge. Die eigentliche Hardware ist tatsächlich kompliziert - so, dass die C-Spezifikation wie ein Kinderbuch gelesen wird. Wenn Sie daran interessiert sind, wie Ihre Hardware funktioniert, können Sie jederzeit ein Handbuch nachschlagen und Code in einem Assembler schreiben. Oder Sie können jederzeit etwas über digitale Schaltkreise lernen, um selbst Hardware zu entwerfen. (Zumindest werden Sie zu schätzen wissen, wie hoch C ist.)

Wie Sie lernen Sie? Und wie lernst du ?

Okay, das Erlernen von Hardware beinhaltet andere Dinge als C. Aber kann C Programmierern heute noch etwas anderes beibringen?

Ich denke es kommt darauf an.

  • Einige würden sagen, dass Sie ein Konzept besser lernen können, indem Sie in einer Umgebung arbeiten, die es bietet und fördert, oft auf verschiedene Weise.
  • Einige würden sagen, dass Sie ein Konzept besser lernen können, indem Sie in einer Umgebung arbeiten, die es nicht bietet und in der Sie es stattdessen selbst erstellen müssen.

Seien Sie nicht zu schnell, um eine dieser Möglichkeiten zu wählen. Ich schreibe seit vielen Jahren Code und habe immer noch keine Ahnung, welche die richtige Antwort ist oder ob die richtige Antwort nur eine der beiden ist oder ob es zu diesem Thema eine richtige Antwort gibt.

Ich bin ein wenig geneigt zu glauben, dass Sie wahrscheinlich beide Optionen irgendwann anwenden sollten, lose in der Reihenfolge, in der ich sie beschrieben habe. Aber ich denke nicht, dass dies wirklich eine technische Angelegenheit ist, ich denke, dass es eine hauptsächlich lehrreiche ist. Jeder Mensch scheint auf deutlich unterschiedliche Weise zu lernen.

Ausschließlich in C.

Wenn Sie die obige Frage zumindest mit der von mir vorgeschlagenen zweiten Option beantwortet haben, haben Sie bereits einige Antworten: Alles, was in höheren Sprachen gelernt werden kann, kann besser gelernt werden, indem Sie es in C oder at neu erfinden am wenigsten durch Zugabe von C zu der Mischung erweitert.

Aber unabhängig von Ihrer Antwort gibt es sicherlich einige Dinge, die Sie fast ausschließlich von C (und vielleicht einer Handvoll anderer Sprachen) lernen können.

  • C ist historisch wichtig. Es ist ein Meilenstein, den Sie sich ansehen und schätzen können, woher wir kommen, und vielleicht ein bisschen mehr Kontext darüber bekommen, wohin wir gehen. Sie können erkennen, warum bestimmte Einschränkungen bestehen, und Sie können erkennen, dass bestimmte Einschränkungen aufgehoben wurden.

  • C kann Ihnen beibringen, in unsicheren Umgebungen zu arbeiten. Mit anderen Worten, es kann Sie trainieren, auf Ihren Rücken zu achten, wenn die Sprache (jede Sprache) dies aus irgendeinem Grund nicht für Sie tun kann oder will. Dies kann Sie selbst in sicheren Umgebungen zu einem besseren Programmierer machen, da Sie selbst weniger Fehler verursachen und die Sicherheit vorübergehend deaktivieren können, um die zusätzliche Geschwindigkeit Ihres ansonsten sicheren Programms zu verringern (z. B. Verwendung von Zeigern) in C #) in den Fällen, in denen Sicherheit mit Laufzeitkosten verbunden ist.

  • C kann Ihnen beibringen, dass für jedes Objekt Speicheranforderungen, ein Speicherlayout, die Tatsache, dass über einen endlichen Adressraum auf Speicher zugegriffen werden kann, usw. vorliegen. Während andere Sprachen Ihre Aufmerksamkeit in diesen Angelegenheiten nicht benötigen, gibt es einige Fälle, in denen eine erworbene Intuition Ihnen helfen kann, fundiertere Entscheidungen zu treffen.

  • C kann Sie über das Build-System über die Details von Verknüpfungs- und Objektdateien sowie über andere Feinheiten informieren. Auf diese Weise erhalten Sie nützliche praktische Informationen darüber, wie ein nativ kompiliertes Programm häufig vom Quellcode zur Ausführung übergeht.

  • C kann Ihren Geist dazu bringen, auf neuartige Weise durch das Konzept des undefinierten Verhaltens zu denken. Undefiniertes Verhalten ist eines meiner Lieblingskonzepte in der Softwareentwicklung, da die Untersuchung seiner Auswirkungen auf nicht-klassische Compiler eine einzigartige mentale Übung ist, die Sie in anderen Sprachen nicht ganz finden können. Sie müssen jedoch Versuch und Irrtum ablehnen und die Sprache sorgfältig und absichtlich lernen, bevor Sie diesen Aspekt vollständig verstehen können.

  • Aber die vielleicht wichtigste Erkenntnis, die C Ihnen als kleine Sprache gewähren kann, ist die Idee, dass die gesamte Programmierung auf Daten und Operationen hinausläuft . Vielleicht möchten Sie Dinge als modulare Klassen mit Hierarchien und Schnittstellen zum virtuellen Versand oder als elegante unveränderliche Werte betrachten, die mit rein mathematischen Funktionen bearbeitet werden. Und das ist alles in Ordnung - aber C wird Sie daran erinnern, dass alles nur Daten + Operationen sind . Es ist eine nützliche Denkweise, weil es Ihnen ermöglicht, einige mentale Barrieren abzubauen.

Theodoros Chatzigiannakis
quelle
5

Der Grund, warum C gut zum Lernen ist, ist nicht, dass es irgendwelche Prinzipien lehrt . Es lehrt Sie, wie die Dinge funktionieren .

C kann mit einem dieser guten alten Autos aus den 70ern oder 80ern verglichen werden, die nur zum Fahren gebaut wurden. Sie können sie zerreißen, Schraube für Schraube und verstehen, wie jedes Teil funktioniert und wie es mit den anderen Teilen zusammenarbeitet, die Sie in die Hände nehmen können, um sie anzusehen. Wenn Sie alle Teile verstanden haben, haben Sie ein sehr klares Bild davon, wie das Ganze funktioniert.

Moderne Sprachen ähneln eher einem modernen Auto, bei dem der Motor im Grunde genommen eine Black Box ist, viel zu komplex, um von einem durchschnittlichen Autobesitzer verstanden zu werden. Diese Autos können viel, zum Teufel, in diesen Tagen lernen sie aktiv, selbstständig zu fahren. Und mit dieser Komplexität und diesem Komfort wurde die Benutzeroberfläche viel weiter von dem entfernt, was tatsächlich im Motor vor sich geht.

Wenn Sie das Programmieren in C lernen, kommen Sie mit vielen Schrauben und Muttern in Kontakt, aus denen ein Computer besteht. Auf diese Weise können Sie ein Verständnis für die Maschine selbst entwickeln. So können Sie beispielsweise verstehen, warum es keine gute Idee ist, eine lange Zeichenfolge wie diese zu erstellen:

java.lang.String result = "";
for(int i = 0; i < components.size; i++) {
     result = result + components[i];
};

(Ich hoffe, dies ist korrektes Java, ich habe es eine Weile nicht mehr verwendet ...) Aus diesem Codebeispiel geht nicht hervor, warum die Schleife eine quadratische Komplexität aufweist. Dies ist jedoch der Fall, und es ist der Grund, warum dieser Code zum Stillstand kommt, wenn Sie einige Millionen kleiner Komponenten verketten müssen. Der erfahrene C-Programmierer weiß sofort, wo das Problem liegt, und wird es wahrscheinlich vermeiden, solchen Code überhaupt zu schreiben.

cmaster - Monica wieder einsetzen
quelle
Ich stimme vollkommen zu. C wird Ihnen viel darüber beibringen, wie Dinge funktionieren, was einen großen Beitrag zum Verständnis von a) warum Sprachen höherer Ebenen geschrieben wurden (z. B. was sie zum Abstrahieren bedeuteten) und b) wie diese Sprachen höherer Ebenen hinter den Kulissen funktionieren, was auf jeden Fall gute Kenntnisse zu haben. Es wird keine Prinzipien lehren und ist vielleicht nicht so einfach, aber Sie werden dadurch Respekt dafür, Computer und ein tieferes Verständnis der höheren Sprachen entwickeln. Lesen Sie auch Back to Basic von Joel Spolsky: joelonsoftware.com/articles/fog0000000319.html
jleach
1
Ihre Antwort ist sicherlich in Ordnung, aber wenn Sie for(int i = 0; i < strlen(s); i++)in C schreiben , hat die Schleife auch eine quadratische Komplexität und ist genauso offensichtlich wie in Ihrem Java-Beispiel ;-)
Doc Brown
Ich bin mir nicht sicher, aber ich würde dem Java-Compiler vertrauen, um dies zu optimieren :-)
Bruno Schäpper
Der erfahrene Java-Programmierer weiß auch sofort, wo das Problem liegt, und wird es wahrscheinlich vermeiden, solchen Code überhaupt zu schreiben. Dieses spezielle Problem wird in elementaren Java-Tutorials behandelt. Das kann man also sicherlich nicht von C lernen, aber nicht von Java.
Peter Taylor
@PeterTaylor Wenn Sie einen Java-Lehrer haben, der sein C kennt, ja. Aber ich bezweifle, dass diese Art von Wissen bestehen bleibt, wenn die Leute, die C kennen, tot sind. Für den C-Programmierer ist es genau die Definition eines C-Strings, die besagt, dass mein Codebeispiel nicht effizient sein kann. Für den Java-Programmierer ist es ein tiefes, arkanes und wenig genutztes Wissen über die von ihnen verwendeten Abstraktionen, das ihn auffordert, diese Art von Code zu vermeiden. Ok, ich übertreibe hier ein bisschen, aber Sie haben die Idee: Der C-Programmierer muss es wissen, der Java-Programmierer kann davonkommen, wenn er es nicht weiß.
cmaster - wieder Monica
2

Es gibt bessere Sprachen als C, um "die Prinzipien hinter dem Programmieren" zu lernen, insbesondere theoretische Prinzipien, aber C kann gut sein, um einige praktische, wichtige Dinge über das Handwerk zu lernen. Die Antwort von greyfade ist sicherlich richtig, aber meiner Meinung nach können Sie von C mehr lernen, als wie Sie das Gedächtnis selbst verwalten. Beispielsweise,

  • wie man Programme mit einer vollständigen Fehlerbehandlung ohne Ausnahmen erstellt

  • wie man eine Struktur in einem Programm erstellt, ohne Sprachunterstützung für die Objektorientierung zu haben

  • Umgang mit Daten ohne Datenstrukturen wie dynamische Listen, Wörterbücher oder eine nützliche Zeichenfolgenabstraktion

  • So vermeiden Sie häufige Fehler wie Array-Überläufe, auch wenn der Compiler oder die Laufzeitumgebung Sie nicht automatisch warnt

  • Erstellen generischer Lösungen ohne Sprachunterstützung für Vorlagen oder Generika

  • und habe ich schon erwähnt, dass Sie lernen können, wie Sie das Gedächtnis selbst verwalten können? ;-);

Wenn Sie C lernen, lernen Sie außerdem, woher die syntaktischen Gemeinsamkeiten von C ++, Java, C # und Objective C stammen.

Im Jahr 2005 schrieb Joel Spolsky eine Empfehlung für das Erlernen von C vor jeder anderen höheren Sprache. Seine Argumente sind

  • "Sie werden niemals in der Lage sein, effizienten Code in höheren Sprachen zu erstellen."

  • "Sie werden nie in der Lage sein, an Compilern und Betriebssystemen zu arbeiten, die zu den besten Programmieraufgaben überhaupt gehören."

  • "Es wird Ihnen nie vertraut, Architekturen für Großprojekte zu erstellen."

  • "Wenn Sie nicht erklären können, warum Sie while(*s++ = *t++);einen String kopieren, oder wenn das für Sie nicht das Natürlichste auf der Welt ist, dann programmieren Sie auf Aberglauben

Natürlich ist das, was er geschrieben hat, sicherlich umstritten, aber meiner Meinung nach sind viele seiner Argumente noch heute gültig.

Doc Brown
quelle
1
C ist eine sehr gute Sprache, die Sie lernen müssen, bevor Sie diese "übergeordneten Dinge lernen, von denen Sie glauben, dass C sie nicht unterstützt", da sie Ihnen helfen, zu verstehen, wie diese Dinge tatsächlich funktionieren (und wie teuer sie sind).
Brendan
@Brendan: Ich bin nicht sicher, ob die Absicht Ihres Kommentars darin besteht, eine Vereinbarung, eine Meinungsverschiedenheit oder nur eine Nebenbemerkung zu meiner Antwort auszudrücken.
Doc Brown
Von Profis geschriebene C-Programme werden mit Pufferüberläufen und harten Abstürzen veröffentlicht. Während sich ein disziplinierter Programmierer dafür entscheidet, diese Dinge zu lernen , lehrt die Sprache die Sprache nicht von Natur aus nur durch Verarmung. Es gibt viele schlechte Möglichkeiten (und schlimmer noch, mehrere inkonsistente Methoden zu mischen), um beispielsweise eine Fehlerbehandlung ohne Ausnahmen durchzuführen und eine Struktur ohne Objekte zu erstellen.
Erik Eidt
@ErikEidt: in der Tat, aber besonders in der Ökosphäre gibt es viele Bücher, Tutorials und anderes Material, das sich mit diesen Themen befasst. Zum Beispiel "Writing Solid Code" von Steve Maguire. Wenn jemand nur die erste Ausgabe von K & R zum Erlernen der Sprachsyntax auswählt, wird er wahrscheinlich kein besserer Programmierer.
Doc Brown
1

Die beiden grundlegenden Abstraktionen des Rechnens sind Turing-Maschinen und Lambda-Kalkül, und C ist eine Möglichkeit, mit der Turing-Maschinen-Sicht der Berechnung zu experimentieren: Meistens eine Folge von Aktionen auf niedriger Ebene, aus denen ein wünschenswertes Ergebnis hervorgeht. Sie müssen jedoch berücksichtigen, dass C über ein eigenes Rechenmodell verfügt. Wenn Sie also C lernen, lernen Sie die Details der abstrakten C-Maschine kennen, die sich stark von den tatsächlichen Architekturen unterscheidet. Eines der ersten Dinge, die mir in C beigebracht wurden, war, niemals zu versuchen, den Compiler durch "clevere" Tricks zu überlisten, und es scheint, dass der Trend zu immer mehr Optimierungen bei Compilern geht. Wie in anderen Hochsprachen verstehen Compiler beim Schreiben in C, was Sie auf der abstrakten C-Maschine erwarten, und sorgen dafür, dass dies auf der eigentlichen Hardware geschieht.

Ich meine also, dass das Lernen von C nicht unbedingt ein gutes Bild davon gibt, was tatsächlich in der Hardware passiert. "C ist nah an der Maschine" sollte als "näher als die meisten höheren Sprachen" verstanden werden. Das direkte Erlernen der Softwarearchitektur ist lohnender, wenn Sie ein genaueres Bild davon erhalten möchten, wie es funktioniert.

Auf der anderen Seite kann das Lernen von C Sie mit Systemprogrammierung, Low-Level-Typen, Zeigern und insbesondere der Speicherzuweisung vertraut machen. Ich habe keinen Vorteil darin, Algorithmen und Datenstrukturen in C und nicht in anderen Sprachen zu lernen.

Core-Dump
quelle
1
Also, was kann C Ihnen beibringen
Philip Kendall
2
Ich denke, die implizite Antwort lautet: " Nichts , zumindest nicht die Dinge, die Befürworter normalerweise behaupten". So verstehe ich die Antwort trotzdem.
Jörg W Mittag
-3

Es ist eine sehr offene Frage, die möglicherweise keine schlüssige Antwort liefert. Sie können so ziemlich alles in jeder Sprache lernen, vorausgesetzt, Sie verstehen die Interna des Sprachrahmens. C zwingt Sie, niedrigere Details zu verstehen, da es hauptsächlich zum Schreiben eines Betriebssystems entwickelt wurde. Selbst nach so vielen Jahren ist es immer noch eine der am häufigsten verwendeten Sprachen, vor allem dank eingebetteter Systeme und Open Source-Projekten. Die Frage ist also, was Sie lernen möchten? Und in welchem ​​Bereich?

Varun Mishra
quelle