Ich arbeite zur Zeit als Actionscript 3 und Php Entwickler. Ich begann mit dem Lernen von PHP und ging dann zu Actionscript 3 und jetzt lerne ich Python. Diese 3 Sprachen sind High-Level-Sprachen, in denen Sie sich keine Sorgen um Low-Level-Speicherverwaltung machen müssen und Dinge wie den zu verwendenden Datentyp für verschiedene Zahlen.
Es fühlt sich an, als würde ich etwas vermissen, obwohl ich drei verschiedene Programmiersprachen kenne. Zum Beispiel weiß ich nicht einmal, was für ein Stack Overflow (Ja, ich weiß, ich sollte mich schämen, da ich diese Frage auf Stackoverflow schreibe) ist in und warum es auftritt. Ich werde solche Dinge nie erfahren, da ich in meiner Branche nie mit solchen Problemen konfrontiert werde.
Also meine Frage an Sie ist ziemlich einfach. Würde ich davon profitieren, C zu lernen, obwohl ich in meinem Beruf nicht damit arbeiten würde?
Es ist ein guter Schritt, aber es ist, als ob man fragt, ob das Lernen von Italienisch genug ist, um Dantes Göttliche Komödie zu verstehen. Es gibt eine Menge Unterschiede in der OS- und Low-Level-Programmierung, die es in High-Level-Programmen nicht gibt. C ist am Ende des Tages nur eine Sprache.
Ich würde definitiv C lernen, aber ich nutze es, um einige Bücher über Dinge wie Compilerbau, grundlegende Betriebssystemkonzepte usw. zu studieren. Dort lernst du wirklich die Low-Level-Konzepte.
Etwas zu lernen ist selten Zeitverschwendung. Und C ist eine ziemlich einfache Sprache zu lernen. Ich habe es kommerziell gelehrt, und wir haben es in 4,5 Tagen geschafft. Also würde ich sagen, versuchen Sie es.
Etwas zu lernen ist selten Zeitverschwendung. Und C ist eine ziemlich einfache Sprache zu lernen. Ich habe es kommerziell gelehrt, und wir haben es in 4,5 Tagen geschafft. Also würde ich sagen, versuchen Sie es.
Ich schlage vor, Sie lesen diesen Artikel von Joel:
Es ist mehr oder weniger ein Vergleich zwischen Java und C / C ++, aber ich denke, es behandelt einige Ihrer Bedenken.
Als erstes solltest du dich nie schämen, wenn du etwas nicht weißt. Außerdem ist Stack Overflow nicht besonders schwer zu verstehen (die Antwort ist im Namen selbst).
Ich habe immer eine schreckliche Zeit, etwas nur theoretisch zu lernen. Es sei denn, ich kann meine Hände schmutzig machen, ich verstehe das Konzept nicht völlig. Das ist in der Tat, wo C sehr praktisch ist. Sie können über Os Internals lesen & amp; Stack-Überläufe aber nur mit C wären Sie in der Lage, sie in Aktion zu sehen.
C ist eine einfache Sprache zu lernen, aber eine sehr harte Sprache zu meistern (mit all seinen Eigenheiten) .So würde es ein wenig Aufwand erfordern (besonders wenn Sie die fortgeschrittenen Konzepte beherrschen wollen), aber ich spreche aus Erfahrung es ist es total wert.
Wenn Sie ein ernsthafter Programmierer werden wollen, sollten Sie das unbedingt tun.
Ich schlage sogar vor, sich Assembler anzuschauen. Sie müssen keine echten Programme programmieren, aber ich denke, es ist wichtig zu wissen, wie Kontrollstrukturen und Funktionen in Assembler aussehen. Dies gibt Ihnen ein besseres Verständnis dafür, was wirklich passiert und Sie werden ein besseres Gefühl dafür bekommen, welche Dinge in Hochsprachen teuer sind.
Aber C (so etwas wie ein Assembler-Makro) sollte der erste Schritt sein. Versuchen Sie, möglichst viele Indexfehler (Zugriff auf Array-Elemente außerhalb des Bereichs) und Speicherlecks (Speicherzuweisung, ohne sie nach der Verwendung freizugeben) zu erhalten. Halten Sie Ihren Code komplex genug, damit Sie ihn nicht zu früh finden. ;) Du wirst deine höheren Sprachen danach noch mehr lieben.
Und: Was ich im Hinblick auf das Verständnis von OOP sehr aufschlussreich fand, war die objektorientierte Codierung in einfacher C-Form. Das erfordert etwas Wissen über C:
Vielleicht. Ich schreibe C ziemlich exklusiv für jetzt, weil ich von der Unterseite arbeite. Ich habe eine Menge Zeit zu töten, bevor ich aufs College gehe, also dachte ich mir: Ich könnte genauso gut (zumindest etwas) in der Architektur der Software versiert sein, bevor ich anfange. Es macht (in einigen Fällen) die höheren Ebenen Konzepte leichter zu lernen, erhöht Ihre Fähigkeit zur Problemlösung, etc. Als ich viel jünger war, lernte ich PHP und VB6. Als ich zu C und Assembly ging, war es für mich am schwierigsten zu begreifen, dass ein "String" kein einzelner Wert war, sondern eine Reihe einzelner Werte - und ich konnte nicht einfach einen Vergleich mit dem anderen machen - ich musste jede Reihe von Zeichen durchlaufen und den Unterschied finden - usw. Kleine Dinge wie diese ließen mich überdenken und neu lernen, wie Computer tatsächlich funktionierten. Ich meine, bevor ich das Ding über Strings rausgefunden habe - ich dachte, Prozessorregister wären völlig nutzlos (wie könnte man irgendwas Nützliches in 32 Bits stecken!?).
Davon abgesehen kann ich über mögliche Vorteile des Lernens auf niedrigerer Ebene plappern, trotz der Tatsache, dass Sie es nie benutzen werden. Aber für mich, egal aus welchem Grund, komme ich meistens aus dem allgemeinen Interesse. Ich denke C macht Spaß, und je mehr ich damit durchkomme, desto besser fühle ich meine Fähigkeiten. Wenn Sie nicht viel Interesse daran haben, Dinge wie Stacküberlauf, Rechenkalkulation, Low-Level-Speicherverwaltung (ungültige oder Nullzeiger, Heap-Korruption und Fragmentierung usw.) usw. zu lernen, dann gibt es keine Garantie für Sie Davon werde ich wirklich profitieren. Aber Sie könnten.
Wenn du C lernst, um etwas über die Architektur zu lernen - und wie Zeug tatsächlich funktioniert unter der Haube - versuche vielleicht, was ich tue. Ich kompiliere häufig zu Assembler-Code, um zu sehen, wie der Computer tatsächlich damit umgeht, was ich von ihm erwarte. Um jeden einzelnen Schritt zu sehen, der für jede Aufgabe genommen wird. Genau so habe ich den Unterschied zwischen %code% und %code% herausgefunden. Der beste Vorteil für Sie wird jedoch sein, zu erkennen, wie schmerzlos höhere Sprachen wirklich sind: P.
Zur Erinnerung: Jeder Prozess erhält einen Call-Stack. Es ist ein Speicherblock, der eine vorbestimmte Größe hat. Es wird hauptsächlich für lokale Variablen verwendet. Jedes Mal, wenn Sie eine lokale Variable erstellen, wird deren Inhalt am Ende des Stapels hinzugefügt - und wenn eine Funktion zurückkehrt (und diese Variablen den Gültigkeitsbereich verlassen), werden diese Daten wieder entfernt. Ein Stapelüberlauf tritt auf, wenn zu viel Material am Ende des Stapels hinzugefügt wird und Sie den zuvor zugewiesenen Speicherplatz überspringen. Es ist in der Regel als Ergebnis der Platzierung von großen Objekten auf dem Stapel oder zu viel Rekursion (eine Funktion, die sich selbst aufruft). Ich denke auch, wenn Sie sich zu sehr in Funktionsaufrufen innerhalb von Funktionsaufrufen verwickeln, was im Grunde dasselbe ist (in diesem Fall) wie das Rekursionsproblem.
Alles, was Sie brauchen, ist das Programmieren, egal in welcher Sprache. Versuche mindestens eines von jedem Paradigma zu lernen. C ist ein guter Ausgangspunkt.
BTW ... Stapelüberlauf
Es ist ein guter Schritt, aber es ist, als ob man fragt, ob das Lernen von Italienisch genug ist, um Dantes Göttliche Komödie zu verstehen. Es gibt eine Menge Unterschiede in der OS- und Low-Level-Programmierung, die es in High-Level-Programmen nicht gibt. C ist am Ende des Tages nur eine Sprache.
Ich würde definitiv C lernen, aber ich nutze es, um einige Bücher über Dinge wie Compilerbau, grundlegende Betriebssystemkonzepte usw. zu studieren. Dort lernst du wirklich die Low-Level-Konzepte.
Sie sollten sich auch die Compiler-Konstruktion ansehen. Es gibt Ihnen einen Einblick in die "Mechanik" unter den Motorhauben, unabhängig von Programmiersprachen oder Programmierparadigmen.
Heutzutage gibt es praktisch keinen Grund mehr, mit Assembler zu arbeiten. C-Compiler und Chip-Design sind so ineinander verschlungen, dass Sie fast nie effizienter Assembler schreiben können als ein C-Compiler. Zusätzlich können Sie das gesamte zugrundeliegende System mit C verstehen.
Nun, vorher klingt das alles romantisch. Lass mich neu formulieren. Du wirst das zugrundeliegende System verstehen müssen, wenn du in C etwas Sinnvolles schreiben willst. Das bedeutet, dass bevor du etwas entfernteres nützlicher als die Ausgabe von "Hello World" bekommst, wirst du eine Menge lesen, eine Menge Fehler machen. Verständnis und mehr Re-Lektüre, weil die Typen, die die Docs schreiben, verstehen, worüber sie reden, aber die Chaps, die die Docs lesen, tun es sonst nicht, sie würden sie nicht lesen.
C-Syntax ist sehr, sehr einfach und "schreiben" ein Programm ist sehr einfach. Die Schwierigkeit besteht darin, die Interaktion zwischen Ihrem Programm und dem zugrundeliegenden Betriebssystem und der Hardware herzustellen. Nichts ist kostenlos in C, aber Aye! eine schöne Sprache ist es.
Mein Ratschlag zum Erlernen jeder Sprache lautet: Finde ein Projekt, das du tun musst, und zwinge dich dazu, die Sprache zu benutzen, die lernen will.
Ich arbeite zur Zeit als Actionscript 3 und Php Entwickler. Ich begann mit dem Lernen von PHP und ging dann zu Actionscript 3 und jetzt lerne ich Python. Diese 3 Sprachen sind High-Level-Sprachen, in denen Sie sich keine Sorgen um Low-Level-Speicherverwaltung machen müssen und Dinge wie den zu verwendenden Datentyp für verschiedene Zahlen.
Es fühlt sich an, als würde ich etwas vermissen, obwohl ich drei verschiedene Programmiersprachen kenne. Zum Beispiel weiß ich nicht einmal, was für ein Stack Overflow (Ja, ich weiß, ich sollte mich schämen, da ich diese Frage auf Stackoverflow schreibe) ist in und warum es auftritt. Ich werde solche Dinge nie erfahren, da ich in meiner Branche nie mit solchen Problemen konfrontiert werde.
Also meine Frage an Sie ist ziemlich einfach. Würde ich davon profitieren, C zu lernen, obwohl ich in meinem Beruf nicht damit arbeiten würde?
Ich denke, du solltest C lernen.
Nun, anstatt (nur) C zu lernen, sollten Sie K & amp; R2 lesen.
Hier ist eine Wäscheliste, über die K & amp; R2 Ihnen beibringt:
Wenn Sie C wirklich "bekommen", haben Sie auch leichten Zugang zum blanken Metall; Es wird viel einfacher, den maschinenspezifischen Call-Stack zu erreichen. Sobald Sie die Ähnlichkeit zwischen Funktionszeigern, if-then-else-Blöcken, "goto" und "return" sehen, wird es viel einfacher zu verstehen, wie Pufferüberlauf-Exploits funktionieren.
Learning C ist eine gute Sache. Nicht, weil es Ihnen automatisch alles über die Funktionsweise von Programmen beibringt, sondern weil es Sie zu diesem Wissen hinzieht.
So wie ich es sehe, ist Ihr Problem "sollte ich eine Sprache lernen, die ich nie benutzen werde", wäre meine Antwort wie viele Antworten "ja".
Sie würden Ihre Programmierfähigkeiten erheblich verbessern und in einer Weise profitieren, die Sie nie verstehen werden, bis Sie Code in anderen Sprachen schreiben und feststellen, dass Sie nicht nur schneller denken, sondern auch einfacheren, saubereren und besseren Code schreiben.
Die drei Sprachen, die Sie kennen, sind alle Skriptsprachen und nicht viel für die Variablen- und Speicherzuweisung. C würde Sie in eine andere Welt und Programmierung führen als Sie bereits kennen.
Überprüfen Sie diesen Link.
P.S. Zum besseren Verständnis des Stack-Überlaufs überprüfen Sie Jonathans Antwort und beziehen Sie sich auf das schöne Bild von sackoverflow.com oben auf der Seite.
Dies ist eine immerwährende Frage und viele Dinge sind über das Thema verschüttet worden. Die Antwort lautet: Ja.
Selbst wenn Sie es nicht täglich nutzen, ist es immer vorteilhaft, auf niedriger Ebene zu wissen, was den Computer antreibt.
Sie werden das Wissen (und unter Umständen auch C selbst) häufiger verwenden, als Sie vielleicht denken.
Es gibt viele Erfahrungen, die Sie insgesamt zu einem besseren Programmierer machen, auch wenn Sie nicht direkt in den Sprachen programmieren. C ist ein Beispiel. Andere Beispiele sind funktionale Programmierung, Lisp, Assembler und das Schreiben eines Parsers.
C ist auch ziemlich einfach, so dass es einfacher zu lernen ist, als allgemein bekannt ist. Das Buch von K & amp; R ist aus einem bestimmten Grund kompakt. Viele Sprachen wie Python, Lua oder Tcl eignen sich für die Aufnahme von Modulen in C - dies ist oft eine gute Möglichkeit, ein System zu entwickeln.
So wie diese Debatte immer zu lösen scheint: Ja. Lernen Sie C. Sie werden davon viele Vorteile sehen.
Wie andere betont haben, ist es immer etwas wert, etwas Neues zu lernen.
Allerdings als jemand, der C in den letzten paar Jahren gelernt hat; Ich denke, die Antwort auf Ihre Frage hängt davon ab, ob Sie praktische Anwendungen zum Lernen C haben.
In meiner Instanz; Ich genieße C in Server-Programmen, Embedded-Programmierung und grundsätzlich überall, wo Sie so viel wie möglich steuern wollen (ohne weitere Irrsinn in der Montage zu riskieren).
Also mein Vorschlag ist, dass Sie ein Mini-Projekt finden, das Sie interessiert, das sinnvoll wäre, um in C zu entwickeln. Dann lernen Sie, indem Sie tun.
Ich bin auch ein Actionscript 3-Entwickler (mit etwas Python in geworfen). Learning C ist ein aktuelles Projekt. Ich bin ein wenig in Objective-C eingetaucht und habe meine erste App im AppStore eingereicht, aber ich möchte ein tiefergehendes Verständnis dessen, was ich tue. Ich habe kein großes Interesse daran, einen Compiler zu schreiben oder den Linux-Kernel zu hacken, aber im Grunde genommen ist alles, was ich anfasse, C / C ++ im Kern, also denke ich, dass es sich lohnt, zumindest ein oberflächliches Verständnis der Sprache zu bekommen.
Im Hinblick auf die Nutzung Ihrer bestehenden Erfahrung ist das Alchemy-Projekt ziemlich nett und ermöglicht Ihnen, Ihre Vorteile zu nutzen C / C ++ Bibliotheken in AS3. Es gibt einige aufregende Konsequenzen davon.
Persönlich habe ich ein loses Ziel, jedes Jahr eine Sprache zu lernen. In diesem Jahr ist es Objective-C, aber wenn ich mich damit beschäftige, möchte ich einen Schritt zurück machen und direkt C lernen. Es kann sicherlich nicht schaden und wird dich auf lange Sicht zu einem besseren Programmierer machen.
Zum Beispiel weiß ich nicht einmal, was ein Stack überläuft [... ist ...] und warum er auftritt.
Immer wenn eine Funktion eine andere aufruft, muss sich der Computer merken, wo die Ausführung des Aufrufers war. Diese Information wird in einem Stapel gespeichert: das Aufrufen einer Funktion drückt einen neuen Datensatz mit der Aussage "Rückkehr zu $ HIER, wenn fertig", während das Zurückkommen von einer Funktion die Rückkehradresse aufruft und zu der nächsten Sache nach dem Funktionsaufruf zurückkehrt das wurde gerade von zurückgegeben).
In der Regel (durch das Betriebssystem oder die Sprachenlaufzeit festgelegt) haben Sie nur einen begrenzten Speicherplatz für diesen Stapel. Das Auslassen dieses Speicherplatzes wird als Stack-Überlauf bezeichnet.
Siehe auch Ссылка
Die meiste Zeit bist du glücklich damit, etwas zu tun. Aber Sie werden schließlich von, wie zu warum bekommen. Wenn Sie sich fragen, warum Sie etwas tun, kann C Ihnen diese Antwort oft geben, weil es so niedrig ist. Natürlich wird jede andere "rohe" Sprache Ihnen die gleichen Antworten geben. Unter "rohe" verstehe ich eine Sprache, die Ihnen direkten Zugriff auf den Computer ermöglicht und nicht unter einer Vielzahl von API-Ebenen und -Klassen versteckt ist.
Natürlich fragen manche Leute nie, warum ... wie oft genug für sie. Sie sind diejenigen, die nicht lernen wollen, C.
Meine Antwort ist: vielleicht. Diese Fragen können Ihnen bei der Entscheidung helfen:
Es gibt viele andere gute Gründe, um C zu lernen, aber es hängt davon ab, welche Art von Programmierung Sie durchführen wollen und ob es eine Schnittmenge zwischen den Fähigkeiten gibt, die das Lernen C bietet und den Fähigkeiten, die Sie brauchen.
Die Antwort ist auch einfach: Ja, würden Sie.
Es gibt einige Sprachen, die für jeden Entwickler nützlich sein sollten, da sie wie Meilensteine sind. Ich würde sagen, dass C, Java, PHP zu solchen Sprachen gehören. Gerade jetzt lese ich ein Buch über JavaScript nur für Bildung, obwohl meine Website es überhaupt nicht verwendet und wahrscheinlich nicht.
Wenn es Ihnen gefällt, gehen Sie dafür!
Als erstes solltest du dich nie schämen, wenn du etwas nicht weißt. Außerdem ist Stack Overflow nicht besonders schwer zu verstehen (die Antwort ist im Namen selbst).
Ich habe immer eine schreckliche Zeit, etwas nur theoretisch zu lernen. Es sei denn, ich kann meine Hände schmutzig machen, ich verstehe das Konzept nicht völlig. Das ist in der Tat, wo C sehr praktisch ist. Sie können über Os Internals lesen & amp; Stack-Überläufe aber nur mit C wären Sie in der Lage, sie in Aktion zu sehen.
C ist eine einfache Sprache zu lernen, aber eine sehr harte Sprache zu meistern (mit all seinen Eigenheiten) .So würde es ein wenig Aufwand erfordern (besonders wenn Sie die fortgeschrittenen Konzepte beherrschen wollen), aber ich spreche aus Erfahrung es ist es total wert.
Wenn Sie ein ernsthafter Programmierer werden wollen, sollten Sie das unbedingt tun.
Ich schlage sogar vor, sich Assembler anzuschauen. Sie müssen keine echten Programme programmieren, aber ich denke, es ist wichtig zu wissen, wie Kontrollstrukturen und Funktionen in Assembler aussehen. Dies gibt Ihnen ein besseres Verständnis dafür, was wirklich passiert und Sie werden ein besseres Gefühl dafür bekommen, welche Dinge in Hochsprachen teuer sind.
Aber C (so etwas wie ein Assembler-Makro) sollte der erste Schritt sein. Versuchen Sie, möglichst viele Indexfehler (Zugriff auf Array-Elemente außerhalb des Bereichs) und Speicherlecks (Speicherzuweisung, ohne sie nach der Verwendung freizugeben) zu erhalten. Halten Sie Ihren Code komplex genug, damit Sie ihn nicht zu früh finden. ;) Du wirst deine höheren Sprachen danach noch mehr lieben.
Und: Was ich im Hinblick auf das Verständnis von OOP sehr aufschlussreich fand, war die objektorientierte Codierung in einfacher C-Form. Das erfordert etwas Wissen über C:
Vielleicht. Ich schreibe C ziemlich exklusiv für jetzt, weil ich von der Unterseite arbeite. Ich habe eine Menge Zeit zu töten, bevor ich aufs College gehe, also dachte ich mir: Ich könnte genauso gut (zumindest etwas) in der Architektur der Software versiert sein, bevor ich anfange. Es macht (in einigen Fällen) die höheren Ebenen Konzepte leichter zu lernen, erhöht Ihre Fähigkeit zur Problemlösung, etc. Als ich viel jünger war, lernte ich PHP und VB6. Als ich zu C und Assembly ging, war es für mich am schwierigsten zu begreifen, dass ein "String" kein einzelner Wert war, sondern eine Reihe einzelner Werte - und ich konnte nicht einfach einen Vergleich mit dem anderen machen - ich musste jede Reihe von Zeichen durchlaufen und den Unterschied finden - usw. Kleine Dinge wie diese ließen mich überdenken und neu lernen, wie Computer tatsächlich funktionierten. Ich meine, bevor ich das Ding über Strings rausgefunden habe - ich dachte, Prozessorregister wären völlig nutzlos (wie könnte man irgendwas Nützliches in 32 Bits stecken!?).
Davon abgesehen kann ich über mögliche Vorteile des Lernens auf niedrigerer Ebene plappern, trotz der Tatsache, dass Sie es nie benutzen werden. Aber für mich, egal aus welchem Grund, komme ich meistens aus dem allgemeinen Interesse. Ich denke C macht Spaß, und je mehr ich damit durchkomme, desto besser fühle ich meine Fähigkeiten. Wenn Sie nicht viel Interesse daran haben, Dinge wie Stacküberlauf, Rechenkalkulation, Low-Level-Speicherverwaltung (ungültige oder Nullzeiger, Heap-Korruption und Fragmentierung usw.) usw. zu lernen, dann gibt es keine Garantie für Sie Davon werde ich wirklich profitieren. Aber Sie könnten.
Wenn du C lernst, um etwas über die Architektur zu lernen - und wie Zeug tatsächlich funktioniert unter der Haube - versuche vielleicht, was ich tue. Ich kompiliere häufig zu Assembler-Code, um zu sehen, wie der Computer tatsächlich damit umgeht, was ich von ihm erwarte. Um jeden einzelnen Schritt zu sehen, der für jede Aufgabe genommen wird. Genau so habe ich den Unterschied zwischen char *a = "a string"
und char a[] = "a string"
herausgefunden. Der beste Vorteil für Sie wird jedoch sein, zu erkennen, wie schmerzlos höhere Sprachen wirklich sind: P.
Zur Erinnerung: Jeder Prozess erhält einen Call-Stack. Es ist ein Speicherblock, der eine vorbestimmte Größe hat. Es wird hauptsächlich für lokale Variablen verwendet. Jedes Mal, wenn Sie eine lokale Variable erstellen, wird deren Inhalt am Ende des Stapels hinzugefügt - und wenn eine Funktion zurückkehrt (und diese Variablen den Gültigkeitsbereich verlassen), werden diese Daten wieder entfernt. Ein Stapelüberlauf tritt auf, wenn zu viel Material am Ende des Stapels hinzugefügt wird und Sie den zuvor zugewiesenen Speicherplatz überspringen. Es ist in der Regel als Ergebnis der Platzierung von großen Objekten auf dem Stapel oder zu viel Rekursion (eine Funktion, die sich selbst aufruft). Ich denke auch, wenn Sie sich zu sehr in Funktionsaufrufen innerhalb von Funktionsaufrufen verwickeln, was im Grunde dasselbe ist (in diesem Fall) wie das Rekursionsproblem.
Alles, was Sie brauchen, ist das Programmieren, egal in welcher Sprache. Versuche mindestens eines von jedem Paradigma zu lernen. C ist ein guter Ausgangspunkt.
BTW ... Stapelüberlauf
Heutzutage gibt es praktisch keinen Grund mehr, mit Assembler zu arbeiten. C-Compiler und Chip-Design sind so ineinander verschlungen, dass Sie fast nie effizienter Assembler schreiben können als ein C-Compiler. Zusätzlich können Sie das gesamte zugrundeliegende System mit C verstehen.
Nun, vorher klingt das alles romantisch. Lass mich neu formulieren. Du wirst das zugrundeliegende System verstehen müssen, wenn du in C etwas Sinnvolles schreiben willst. Das bedeutet, dass bevor du etwas entfernteres nützlicher als die Ausgabe von "Hello World" bekommst, wirst du eine Menge lesen, eine Menge Fehler machen. Verständnis und mehr Re-Lektüre, weil die Typen, die die Docs schreiben, verstehen, worüber sie reden, aber die Chaps, die die Docs lesen, tun es sonst nicht, sie würden sie nicht lesen.
C-Syntax ist sehr, sehr einfach und "schreiben" ein Programm ist sehr einfach. Die Schwierigkeit besteht darin, die Interaktion zwischen Ihrem Programm und dem zugrundeliegenden Betriebssystem und der Hardware herzustellen. Nichts ist kostenlos in C, aber Aye! eine schöne Sprache ist es.
Mein Ratschlag zum Erlernen jeder Sprache lautet: Finde ein Projekt, das du tun musst, und zwinge dich dazu, die Sprache zu benutzen, die lernen will.
Ich denke, du solltest C lernen.
Nun, anstatt (nur) C zu lernen, sollten Sie K & amp; R2 lesen.
Hier ist eine Wäscheliste, über die K & amp; R2 Ihnen beibringt:
wc
ist --- oder kann gemacht werden - überraschend komplex) Wenn Sie C wirklich "bekommen", haben Sie auch leichten Zugang zum blanken Metall; Es wird viel einfacher, den maschinenspezifischen Call-Stack zu erreichen. Sobald Sie die Ähnlichkeit zwischen Funktionszeigern, if-then-else-Blöcken, "goto" und "return" sehen, wird es viel einfacher zu verstehen, wie Pufferüberlauf-Exploits funktionieren.
Learning C ist eine gute Sache. Nicht, weil es Ihnen automatisch alles über die Funktionsweise von Programmen beibringt, sondern weil es Sie zu diesem Wissen hinzieht.
So wie ich es sehe, ist Ihr Problem "sollte ich eine Sprache lernen, die ich nie benutzen werde", wäre meine Antwort wie viele Antworten "ja".
Sie würden Ihre Programmierfähigkeiten erheblich verbessern und in einer Weise profitieren, die Sie nie verstehen werden, bis Sie Code in anderen Sprachen schreiben und feststellen, dass Sie nicht nur schneller denken, sondern auch einfacheren, saubereren und besseren Code schreiben.
Die drei Sprachen, die Sie kennen, sind alle Skriptsprachen und nicht viel für die Variablen- und Speicherzuweisung. C würde Sie in eine andere Welt und Programmierung führen als Sie bereits kennen.
Überprüfen Sie diesen Link.
P.S. Zum besseren Verständnis des Stack-Überlaufs überprüfen Sie Jonathans Antwort und beziehen Sie sich auf das schöne Bild von sackoverflow.com oben auf der Seite.
Dies ist eine immerwährende Frage und viele Dinge sind über das Thema verschüttet worden. Die Antwort lautet: Ja.
Selbst wenn Sie es nicht täglich nutzen, ist es immer vorteilhaft, auf niedriger Ebene zu wissen, was den Computer antreibt.
Sie werden das Wissen (und unter Umständen auch C selbst) häufiger verwenden, als Sie vielleicht denken.
Es gibt viele Erfahrungen, die Sie insgesamt zu einem besseren Programmierer machen, auch wenn Sie nicht direkt in den Sprachen programmieren. C ist ein Beispiel. Andere Beispiele sind funktionale Programmierung, Lisp, Assembler und das Schreiben eines Parsers.
C ist auch ziemlich einfach, so dass es einfacher zu lernen ist, als allgemein bekannt ist. Das Buch von K & amp; R ist aus einem bestimmten Grund kompakt. Viele Sprachen wie Python, Lua oder Tcl eignen sich für die Aufnahme von Modulen in C - dies ist oft eine gute Möglichkeit, ein System zu entwickeln.
So wie diese Debatte immer zu lösen scheint: Ja. Lernen Sie C. Sie werden davon viele Vorteile sehen.
Die Antwort ist auch einfach: Ja, würden Sie.
Es gibt einige Sprachen, die für jeden Entwickler nützlich sein sollten, da sie wie Meilensteine sind. Ich würde sagen, dass C, Java, PHP zu solchen Sprachen gehören. Gerade jetzt lese ich ein Buch über JavaScript nur für Bildung, obwohl meine Website es überhaupt nicht verwendet und wahrscheinlich nicht.
Wenn es Ihnen gefällt, gehen Sie dafür!
Wie andere betont haben, ist es immer etwas wert, etwas Neues zu lernen.
Allerdings als jemand, der C in den letzten paar Jahren gelernt hat; Ich denke, die Antwort auf Ihre Frage hängt davon ab, ob Sie praktische Anwendungen zum Lernen C haben.
In meiner Instanz; Ich genieße C in Server-Programmen, Embedded-Programmierung und grundsätzlich überall, wo Sie so viel wie möglich steuern wollen (ohne weitere Irrsinn in der Montage zu riskieren).
Also mein Vorschlag ist, dass Sie ein Mini-Projekt finden, das Sie interessiert, das sinnvoll wäre, um in C zu entwickeln. Dann lernen Sie, indem Sie tun.
Zum Beispiel weiß ich nicht einmal, was ein Stack überläuft [... ist ...] und warum er auftritt.
Immer wenn eine Funktion eine andere aufruft, muss sich der Computer merken, wo die Ausführung des Aufrufers war. Diese Information wird in einem Stapel gespeichert: das Aufrufen einer Funktion drückt einen neuen Datensatz mit der Aussage "Rückkehr zu $ HIER, wenn fertig", während das Zurückkommen von einer Funktion die Rückkehradresse aufruft und zu der nächsten Sache nach dem Funktionsaufruf zurückkehrt das wurde gerade von zurückgegeben).
In der Regel (durch das Betriebssystem oder die Sprachenlaufzeit festgelegt) haben Sie nur einen begrenzten Speicherplatz für diesen Stapel. Das Auslassen dieses Speicherplatzes wird als Stack-Überlauf bezeichnet.
Siehe auch Ссылка
Ich bin auch ein Actionscript 3-Entwickler (mit etwas Python in geworfen). Learning C ist ein aktuelles Projekt. Ich bin ein wenig in Objective-C eingetaucht und habe meine erste App im AppStore eingereicht, aber ich möchte ein tiefergehendes Verständnis dessen, was ich tue. Ich habe kein großes Interesse daran, einen Compiler zu schreiben oder den Linux-Kernel zu hacken, aber im Grunde genommen ist alles, was ich anfasse, C / C ++ im Kern, also denke ich, dass es sich lohnt, zumindest ein oberflächliches Verständnis der Sprache zu bekommen.
Im Hinblick auf die Nutzung Ihrer bestehenden Erfahrung ist das Alchemy-Projekt ziemlich nett und ermöglicht Ihnen, Ihre Vorteile zu nutzen C / C ++ Bibliotheken in AS3. Es gibt einige aufregende Konsequenzen davon.
Persönlich habe ich ein loses Ziel, jedes Jahr eine Sprache zu lernen. In diesem Jahr ist es Objective-C, aber wenn ich mich damit beschäftige, möchte ich einen Schritt zurück machen und direkt C lernen. Es kann sicherlich nicht schaden und wird dich auf lange Sicht zu einem besseren Programmierer machen.
Meine Antwort ist: vielleicht. Diese Fragen können Ihnen bei der Entscheidung helfen:
Es gibt viele andere gute Gründe, um C zu lernen, aber es hängt davon ab, welche Art von Programmierung Sie durchführen wollen und ob es eine Schnittmenge zwischen den Fähigkeiten gibt, die das Lernen C bietet und den Fähigkeiten, die Sie brauchen.
Die meiste Zeit bist du glücklich damit, etwas zu tun. Aber Sie werden schließlich von, wie zu warum bekommen. Wenn Sie sich fragen, warum Sie etwas tun, kann C Ihnen diese Antwort oft geben, weil es so niedrig ist. Natürlich wird jede andere "rohe" Sprache Ihnen die gleichen Antworten geben. Unter "rohe" verstehe ich eine Sprache, die Ihnen direkten Zugriff auf den Computer ermöglicht und nicht unter einer Vielzahl von API-Ebenen und -Klassen versteckt ist.
Natürlich fragen manche Leute nie, warum ... wie oft genug für sie. Sie sind diejenigen, die nicht lernen wollen, C.
Tags und Links c php actionscript-3