Damals arbeiteten die Entwickler viel näher am Metall. C war im Wesentlichen ein Ersatz für Baugruppen auf höherer Ebene, der fast so nah an der Hardware ist, wie Sie es bekommen können. Daher war es selbstverständlich, dass Sie Zeiger benötigten, um Codierungsprobleme effizient zu lösen. Zeiger sind jedoch scharfe Werkzeuge, die bei unsachgemäßer Verwendung große Schäden verursachen können. Die direkte Verwendung von Zeigern eröffnet auch die Möglichkeit vieler Sicherheitsprobleme, die damals kein Thema waren (1970 bestand das Internet aus ein paar Dutzend Computern an mehreren Universitäten, und es wurde nicht einmal so genannt) ...), wurde aber seitdem immer wichtiger. Heutzutage sind höhere Sprachen bewusst so konzipiert, dass sie keine rohen Speicherzeiger mehr enthalten.
Zu sagen, dass "fortgeschrittene Dinge, die in VB.Net oder Java gemacht werden, in C nicht möglich sind", zeigt, gelinde gesagt, einen sehr begrenzten Standpunkt :-)
Erstens sind alle diese Sprachen (auch die Assemblierung) vollständig, so dass theoretisch alles, was in einer Sprache möglich ist, in allen möglich ist. Denken Sie nur daran, was passiert, wenn ein Teil des VB.Net- oder Java-Codes kompiliert und ausgeführt wird: Schließlich wird er in Maschinencode übersetzt (oder diesem zugeordnet), da dies das einzige ist, was die Maschine versteht. In kompilierten Sprachen wie C und C ++ können Sie den gesamten Maschinencode, der dem ursprünglichen Quellcode der höheren Ebene entspricht, als eine oder mehrere ausführbare Dateien / Bibliotheken abrufen. In VM-basierten Sprachen ist es schwieriger (und möglicherweise sogar nicht möglich), die gesamte entsprechende Maschinencodedarstellung Ihres Programms abzurufen, aber irgendwann befindet sich das Programm irgendwo in den tiefen Nischen des Laufzeitsystems und der JIT.
Nun ist es natürlich eine ganz andere Frage, ob eine Lösung in einer bestimmten Sprache möglich ist. Kein vernünftiger Entwickler würde anfangen, eine Web-App in Assembler zu schreiben :-) Aber es ist nützlich zu bedenken, dass die meisten oder alle dieser höheren Sprachen auf einer riesigen Menge Laufzeit- und Klassenbibliothekscode aufbauen, einem großen Teil davon die in einer niedrigeren Sprache implementiert ist, typischerweise in C.
Um also auf die Frage zu kommen,
Halten Sie Kenntnisse über Hinweise auf die Jugendlichen [...] für wichtig?
Das Konzept hinter Zeigern ist Indirektion . Dies ist ein sehr wichtiges Konzept und meiner Meinung nach sollte jeder gute Programmierer es auf einer bestimmten Ebene verstehen. Auch wenn jemand nur mit höheren Sprachen arbeitet, sind Indirektion und Referenzen immer noch wichtig. Wenn man dies nicht versteht, kann man nicht eine ganze Klasse von sehr wirksamen Werkzeugen verwenden, was auf lange Sicht die Fähigkeit zur Problemlösung ernsthaft einschränkt.
Meine Antwort lautet also: Ja, wenn Sie ein wirklich guter Programmierer werden möchten, müssen Sie auch Zeiger verstehen (und auch Rekursion - dies ist der andere typische Stolperstein für angehende Entwickler). Sie brauchen vielleicht nicht damit zu beginnen - ich denke nicht, dass C heutzutage als Muttersprache optimal ist. Aber irgendwann sollte man sich mit Indirektion vertraut machen. Ohne sie können wir nie verstehen, wie die von uns verwendeten Tools, Bibliotheken und Frameworks tatsächlich funktionieren. Und ein Handwerker, der nicht versteht, wie seine Werkzeuge arbeiten, ist sehr begrenzt. Fairerweise kann man es auch in höheren Programmiersprachen verstehen. Ein guter Lackmustest besteht darin, eine doppelt verknüpfte Liste korrekt zu implementieren. Wenn Sie dies in Ihrer bevorzugten Sprache tun können, können Sie behaupten, dass Sie die Indirektion gut genug verstehen.
Aber wenn nicht für irgendetwas anderes, sollten wir es tun, um Respekt für die Programmierer der alten Zeit zu erlernen, die es geschafft haben, unglaubliche Dinge mit den lächerlich einfachen Werkzeugen zu bauen, die sie hatten (im Vergleich zu dem, was wir jetzt haben). Wir alle stehen auf den Schultern der Riesen, und es tut uns gut, dies anzuerkennen, anstatt so zu tun, als wären wir selbst die Riesen.