Meine erste Programmiersprache war PHP ( keuchen ). Danach habe ich angefangen mit JavaScript zu arbeiten. Ich habe kürzlich in C # gearbeitet.
Ich habe noch nie Sprachen mit niedrigem oder mittlerem Sprachniveau wie C gesehen.
Der allgemeine Konsens in der Programmiergemeinschaft ist, dass "ein Programmierer, der etwas wie C nicht gelernt hat, ehrlich gesagt einfach nicht mit Programmierkonzepten wie Zeigern, Datentypen, Übergeben von Werten als Referenz usw. umgehen kann".
Ich stimme nicht zu. Ich behaupte, dass:
- Da Hochsprachen leicht zugänglich sind, tauchen immer mehr "Nicht-Programmierer" ein und sorgen für Chaos
- Um wirklich etwas in einer höheren Sprache zu erledigen, muss man die gleichen ähnlichen Konzepte verstehen, über die die meisten Befürworter der Evangelisierung "auf niedriger Ebene lernen".
Einige Leute müssen C kennen; Diese Leute haben Jobs, bei denen sie Code auf niedriger bis mittlerer Ebene schreiben müssen. Ich bin sicher, C ist großartig, und ich bin sicher, es gibt ein paar schlechte Programmierer, die C kennen.
Warum die Voreingenommenheit? Wenn ich als guter, ehrlicher und hungriger Programmierer C lernen müsste (aus unvorhergesehenen Gründen), würde ich C. lernen. Sollten sich gute Programmierer angesichts der Vielzahl von Sprachen nicht darauf konzentrieren, das zu lernen, was uns voranbringt? Sollten wir nicht lernen, was uns interessiert? Sollten wir unsere endliche Zeit nicht nutzen, um vorwärts zu kommen ? Warum sind einige Programmierer damit nicht einverstanden?
Meiner Meinung nach ist das Streben nach Exzellenz in Ihrer Arbeit das grundlegende deterministische Merkmal zwischen guten und schlechten Programmierern.
Hat jemand Beispiele aus der Praxis, wie etwas, das in einer höheren Programmiersprache geschrieben wurde - beispielsweise Java, Pascal, PHP oder JavaScript - wirklich von C-Vorkenntnissen profitiert? Beispiele würden am meisten geschätzt.
quelle
Antworten:
C zu kennen hat den Vorteil, dass Sie eine sehr gute Vorstellung davon haben, wie ein Computer funktioniert. Nicht nur, wie Ihr Programmiermodell funktioniert, sondern auch, wie der Speicher aufgebaut ist und dergleichen.
Die einzige Ebene unter C ist die von einer bestimmten CPU gesprochene Assembly.
(Wenn Sie C kennen, wissen Sie auch, wie viel weniger Arbeit Sie in einer höheren Sprache erledigen müssen. Und hoffentlich auch, wie hoch die Kosten für die Arbeit in dieser höheren Sprache sind.)
quelle
Ich glaube nicht, dass die Antworten hier wirklich das sind, wonach die OP gesucht hat, also werde ich meine eigene Meinung einbringen.
Schau, ich bin ein unglücklicher C-Snob. Ich bin der Meinung, dass Sie, wenn Sie C nicht kennen, bis zu einem gewissen Grad nicht wirklich wissen, was Sie als Programmierer tun. Also, ich denke, ich bin die Art von "voreingenommener" Person, von der Sie hier sprechen.
In der Praxis hindert Sie die Tatsache, dass Sie wirklich wissen, was Sie als Programmierer tun, nicht unbedingt daran, eine wirklich großartige, nützliche Software mit hochrangigen Tools zu entwickeln. Ich meine, der Schöpfer von Stack Overflow, Jeff Atwood, kennt anscheinend nicht einmal C, und dennoch würde ich sagen, dass Stack Overflow eine verdammt gute Webanwendung ist.
Ob Sie sich für C (oder C ++ oder Assembly) entscheiden, hängt davon ab, welcher Programmierertyp Sie sein möchten. Wenn Sie einfach nur coole Web - oder Business - Apps entwickeln möchten, ist das in Ordnung - Sie müssen nicht unbedingt C lernen. Wenn Sie jedoch wirklich hervorragende Leistungen erbringen möchten, möchten Sie an wirklich coolen Projekten arbeiten, die den Stand der Dinge verbessern Kunst, dann müssen Sie sich als Programmierer wirklich ernst nehmen, um wirklich zu verstehen, wie Computer funktionieren. Da C im Wesentlichen die Verkehrssprache des Betriebssystems und die Sprache ist, die fast alles andere unterstützt (vom Linux-Kernel über die meisten Java-VMs bis hin zu den Python- und Ruby-Interpretern, SQL-Datenbanken, Webservern und nahezu allen Gerätetreibern) Ein vertrautes Verständnis der Sprache reicht weit.
Ganz zu schweigen davon, dass die Kenntnis von C (oder C ++) eine große Chance bietet, zu großen Open-Source-Projekten beizutragen, von denen Millionen (oder Hunderte von Millionen) Menschen betroffen sind. Möchten Sie den Python-Interpreter oder den Chromium-Webbrowser verbessern? Nun, Sie müssen C für das erste und C ++ für das letztere kennen.
Deshalb ist es völlig falsch, C mit toten natürlichen Sprachen wie Latein oder veralteten Technologien wie Pferd und Wagen zu vergleichen. Ein großer Teil unserer Software-Infrastruktur des 21. Jahrhunderts basiert auf C-Code, weshalb C auch heute noch relevant ist.
Ob Sie also C lernen sollten oder nicht, hängt davon ab, was Sie von Ihrer Karriere als Programmierer erwarten.
quelle
Eine praktische Faustregel ist, dass Sie mindestens eine Abstraktionsebene verstehen müssen, die unter derjenigen liegt, in der Sie normalerweise arbeiten. Beachten Sie, dass Ihr PHP- oder JavaScript-Interpreter möglicherweise tatsächlich in C oder C ++ implementiert ist. Schließlich werden Sie einen Fehler im Interpreter oder sogar einen C-Laufzeitfehler feststellen. Wenn Sie C nicht verstehen, können Sie dem Betreuer nur einen Fehlerbericht senden, in der Hoffnung, dass er ihn reproduzieren und sich darum kümmern kann, und dann mit den Daumen drehen. Wenn Sie C kennen, können Sie ihnen genau sagen, wo das Problem liegt und woran es liegt.
Dies bedeutet auch, dass Sie, wenn Sie in C / C ++ arbeiten, zumindest die Assembly auf Ihrer Plattform lesen können sollten.
Was das Erlernen von C bei Bedarf angeht: Meiner Beobachtung nach können die meisten Programmierer Perl / Python / Javascript bei Bedarf erlernen, aber Assembler / C / Lisp scheint viel mehr Zeit zu benötigen, sodass es sich lohnt, zumindest einige Grundlagen zu erlernen, bevor dies erforderlich ist entsteht.
quelle
Ich stimme nicht zu, dass Sie zuerst C lernen müssen , aber ich glaube, dass Sie C irgendwann lernen sollten . Alle Abstraktionen sind undicht und das Verstehen von C erleichtert das Verstehen, was wirklich passiert, wenn Sie eine ausgefallene Abstraktion auf hoher Ebene verwenden. Das heißt, ich denke auch, dass alle ernsthaften Programmierer aus dem gleichen Grund lernen sollten, Assembler zumindest zu lesen.
Das Erlernen dieser Konzepte auf niedriger Ebene bietet eine überraschende Möglichkeit, über Inhalte auf hoher Ebene nachzudenken. In C ++ und D werden Standardargumente für virtuelle Funktionen beispielsweise durch den statischen Typ (Kompilierungszeit) des Objekts und nicht durch den dynamischen Typ (Laufzeit) bestimmt. Dies ist nur dann sinnvoll, wenn Sie verstehen, wie vtables und Aufrufkonventionen funktionieren und warum es äußerst schwierig ist, virtuelle Funktionen auf die entgegengesetzte Weise zu implementieren.
quelle
All abstractions are leaky
Aussage.Die Voreingenommenheit ist eine von Status Quo. In den alten Zeiten (1980er und früher) war C / C ++ eine ziemlich wichtige Voraussetzung für Leistungsanwendungen. Das hat sich geändert, aber ältere Entwickler kommen im Allgemeinen aus dieser alten Schule und sehen die Dinge in diesem Kontext.
Für tatsächliche Entwicklung andere Sprachen werden verwendet - C # ein beliebter ist, als Java ist, während PHP und Python für interne Projekte beliebt ist und es ist immer sinnvoll , jemand zur Hand zu haben , mit zumindest Grundkenntnisse in diesem Bereich für den Fall , wählen Sie ein offenes Quell-PHP-Projekt für Ihr Bug-Tracking-System. Die Jobspezifikationen scheinen jedoch immer noch von dieser Standardvorlage zu stammen, die vor 25 Jahren geschrieben wurde.
quelle
So sehr ich es hasse, den obligatorischen Joel-Blogeintrag zu veröffentlichen, stimme ich ihm hier zu . C ist die Verkehrssprache der Programmierung. Ich kann mir keine Hochsprache vorstellen, die irgendwie nicht mit ihr kompatibel ist. Aus diesem Grund ist C nach wie vor eine beliebte Wahl für Systemprogrammieraufgaben. Sie können einfach nicht mit einigen OS-Level-Dingen ohne C kommunizieren.
Was planen Sie im Übrigen, wenn Ihre Hochsprache nicht schnell genug ist? Das Schreiben von C ist besonders wichtig, wenn Sie eine dynamische Hochsprache wie Ruby, Python oder PHP verwenden. Aber auch Java- und C # -Programmierer müssen von Zeit zu Zeit auf C umsteigen.
quelle
Was für ein tolles Schneckenfest! (Wie sie angeblich sagen: Ist das ein privater Kampf oder kann jemand mitmachen?)
Ich war Professor, und nach einigem Ausprobieren stellte ich fest, dass es viel einfacher war, die Schüler durch die komplizierten Konzepte der Programmierung zu führen, wenn sie auf einer Basisebene genau verstanden, was ein Computer tat. Nicht in allen Details, sondern im Grundprinzip, wie Speicher, Anweisungen usw. Was ich an C mag, ist die Nähe zur Maschine.
Das heißt nicht, dass andere Lehrer an den gleichen Ort kamen. Sie begannen in der Hochsprache (BASIC :-) und gingen von dort ohne offensichtliche negative Auswirkungen weiter.
Unterm Strich könnten Sie also Recht haben, Stephen. Das würde ich nicht glauben, aber ich habe mich vorher geirrt.
quelle
Ich denke, das ist ein Fortschritt.
Vor zwanzig Jahren war die übliche Weisheit, dass Sie Assembler lernen mussten, um zu verstehen, was Sie von höheren Sprachen wie C gelernt haben (weshalb ich mit VAX Macro einen Assembler-Kurs am College belegen musste; raten Sie, wie nützlich das ist stellte sich nach dem Abschluss heraus).
Es gibt einen Aberglauben, dass C, weil es etwas schwer zu lernen ist und fast keine Abstraktionen bietet (Zeiger und Byteströme sind so ziemlich alles), Sie irgendwie zu einem besseren Programmierer macht oder Ihnen einen besseren Einblick in die Funktionsweise der Hardware gibt Niveau.
Dies ist nicht (unbedingt) wahr. Mit Standard C kommen Sie dem Metall nicht näher als mit jedem anderen 3GL (Pascal, Fortran usw.). Einige C- Implementierungen bieten möglicherweise Hooks, die Ihnen einen besseren Zugriff auf bestimmte Bereiche ermöglichen. Im Allgemeinen sind nackte Zeiger jedoch so nah wie möglich, was überhaupt nicht nah ist. Sie können beispielsweise nicht direkt auf Register oder Statuswörter zugreifen.
Am Ende dreht sich alles um Opcodes und Adressierungsmodi. Wenn Sie also wirklich daran interessiert sind, wie die Dinge auf der unteren Ebene funktionieren, sollten Sie Assembler über C lernen.
Das Erlernen von C allein macht Sie (nicht unbedingt) zu einem besseren Programmierer. Es wird Ihnen jedoch definitiv eine Wertschätzung für tatsächliche Zeichenfolgentypen und standardisierte Container-Bibliotheken geben.
quelle
Eine Sprache ist ein Werkzeug. Wenn Sie nur Webseiten und ähnliches schreiben müssen, können Sie sicher davonkommen, ohne C lernen zu müssen, genauso wie Sie, wenn Sie nur Plastikmodellbausätze herstellen, nur ein scharfes Messer und Klebstoff benötigen, a Ein Schraubenschlüssel ist normalerweise nicht erforderlich.
Ich schreibe Code für eingebettete Systeme mit stark eingeschränkten Speicherressourcen (der größte, den ich kürzlich gemacht habe, ist 16 KByte und das war RIESIG) In diesem Markt sind C oder Assembler die einzigen Optionen, und eine der flockigen höheren Sprachen funktioniert einfach nicht.
quelle
Nach meiner Erfahrung war C / C ++ für eine Weile ein guter Puffer, der die guten Programmierer von den VB6-Codierern trennte. Nachdem ich fünf ungerade Jahre in C / C ++ gearbeitet hatte, bekam ich einen Job in VB6. Ich war erstaunt über die Qualität (oder das Fehlen davon) der Codierer. Sie hatten wenig Interesse an den Eingeweiden der Sprache, am Design oder an der Performance. Als das Unternehmen zu .Net wechselte, verwendeten die C / C ++ - und .Net-Codierer leider dieselben Tools. Die VB-Codierer waren noch schlimmer VB.Net-Codierer. Die Situation verschlimmerte sich, als die gesamte Entwicklung auf ASP.NET überging. Plötzlich war jeder, der ein Steuerelement ziehen und ablegen konnte, ein Programmierer.
Auf dem Arbeitsmarkt gab es jedoch nicht viel zu unterscheiden zwischen den Hardcore-Programmierern (ex C / C ++) und den Touristen.
Aus diesem Grund kann es hilfreich sein, C oder C ++ in Ihrem Lebenslauf zu haben, um sich vom Riff-Raff zu unterscheiden.
quelle
Prokoativ gefragt: Bitten Sie um Bestätigung, dass Sie C nicht lernen müssen? Wenn Sie reines C lernen (nicht unbedingt C ++), erhalten Sie ein umfassendes Verständnis des Ausführungsmodells eines Computers. Vor allem über Speicher und Zuordnung. Dieses Zeug ist auch wichtig für Leute, die in höheren Sprachen programmieren.
Für einen PHP-Programmierer ist es nur wenig transparent, wie Code auf der gegebenen Maschine ausgeführt wird. Für den PHP-Programmierer spielt dies möglicherweise keine Rolle, da die Netzwerkübertragung der Engpass in der Anwendung usw. ist.
Normales PHP / Python / C # hat viele Abstraktionsebenen zwischen der Sprache und der CPU. Diese Schichten sind so dick, dass man sie nicht durchschauen kann. Wenn Sie C lernen, gibt es eine dünne Schicht zwischen Ihnen und der CPU und dem Betriebssystem. Das macht die Programmierung nicht einfacher (und es könnte auch nicht besser sein). Aber Sie können tatsächlich lernen, wie die CPU funktioniert. Sobald Sie das "mittlere" C kennen, können Sie tatsächlich anfangen, dieses Wissen mit der höheren Sprache zu verknüpfen. Dies ist der unmittelbare Vorteil, den Sie erhalten.
Meiner Meinung nach sollte ein Programmierer immer einige Zeit damit verbringen, verschiedene Programmierkonzepte zu erlernen. Es lohnt sich auf jeden Fall, einen Blick auf C zu werfen, aber auch auf noch übergeordnete Programmiersprachen wie Clojure, Haskell, Prolog.
Sie müssen in diesen nicht Meister werden, sie werden Ihnen nur die Lektion erteilen, dass "Ebenen" von Programmiersprachen nicht binär sind, aber es gibt viele Ebenen. Lernen Sie sie von oben nach unten kennen (Assembler). Es wird Sie zu einem besseren Programmierer machen.
quelle
Sie müssen genug C kennen, um in C geschriebenen Code zu lesen, da in der Sprache eine große Menge sehr wichtiger Code geschrieben ist. Das ist ungefähr alles, was Sie tun müssen, um ein gründliches Handbuch zu diesem Thema durchzuarbeiten (ich habe Kochans "Programmierung in C" verwendet), ohne dass Sie tatsächlich in der Sprache programmieren müssen. Sollten Sie jemals in einer Situation landen, in der Sie die Sprache ausgiebig verwenden müssen, haben Sie eine gute Basis, auf der Sie aufbauen können. Sie möchten wahrscheinlich so etwas wie das Duntemanns Assembly-Buch studieren, wenn die Maschine für Sie eine abgestimmte Blackbox ist. Ich empfehle auch Petzolds "Code".
Abgesehen davon - Grundkenntnisse in C und Grundkenntnisse der zugrunde liegenden Maschine - sollten Sie Ihre Lernzeit am besten mit echten Dingen wie SICP, TCP / IP Illustrated oder Büchern über konkrete Mathematik, Algorithmen oder Datenstruktur verbringen . Das echte Zeug.
Es ist einfach nicht die Opportunitätskosten wert, viel Zeit damit zu verbringen, C während des Programmierens in PHP zu lernen. Es gibt weitere hilfreiche Dinge zu lernen. C ist wirklich nur eine andere Sprache, die Sie gut lernen können, wenn Sie lernen und verwenden, aber lernen können, wenn Sie müssen.
Schwitzen Sie das harte Zeug.
quelle
C ist die Sprache, in der andere Sprachen geschrieben werden. So können Sie mit der CPU und der anderen Hardware so vertraut werden, wie Sie möchten.
Wenn Sie C nicht kennen, wissen Sie nicht, wie andere Sprachen die Ergebnisse erzielen, die sie erzielen.
Abstraktion ist natürlich ein wichtiges Konzept, und nicht jeder muss wissen, wie sein Entscheidungsrahmen die versprochenen Ergebnisse erzielt. Sie müssen nicht 20 Jahre damit verbringen, C zu schreiben oder darüber nachzudenken, was mit Ihren vtables passiert, wenn Sie Mehrfachvererbung verwenden, um guten Code zu schreiben.
Jetzt können Sie ein Auto fahren, ohne zu verstehen, wie ein 4-Takt-Motor funktioniert, oder ohne eine Schalthebelschaltung (Schaltgetriebe) verwenden zu können.
Wenn Sie jedoch verstehen, was sich unter der Haube abspielt, können Sie von Zeit zu Zeit außergewöhnliche Ergebnisse erzielen, bei denen sich jemand ohne dieses Wissen nur schwer wiederholen kann.
quelle
C (und möglicherweise C ++) ist das Meer, in dem Sie schwimmen. Das Betriebssystem, unter dem Ihr Code ausgeführt wird, ist wahrscheinlich in C (und C ++) codiert. Ihre native API für den Zugriff auf Betriebssystemdienste befindet sich also in C.
Wenn Sie nicht wissen müssen, was sich im Folgenden befindet, müssen Sie C nicht kennen. Die meisten Programmierer müssen jedoch irgendwann in ihrem Leben in niedrigere Ebenen eintauchen.
Es basiert auch auf Ihrer Spezialisierung der Entwicklungsbereiche. Zum Beispiel muss ein Webentwickler, der HTML, Javascript und einige serverseitige Skripte schreibt, möglicherweise nie etwas über C wissen, ein Entwickler eines verteilten Systems oder eines Spiels wird dies jedoch tun.
Es tut nie weh, ein paar Wochen damit zu verbringen, etwas so Grundlegendes für Ihren Beruf zu lernen.
quelle
C hat viele Vorteile:
quelle