Ich weiß nicht C. Und warum sollte ich es lernen? [geschlossen]


58

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:

  1. Da Hochsprachen leicht zugänglich sind, tauchen immer mehr "Nicht-Programmierer" ein und sorgen für Chaos
  2. 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.


@ Stephen Oh, sorry ... Ich habe falsch verstanden. (Aber du verstehst, warum du c / c ++ lernen musst, oder?)
ApprenticeHacker

1
@burningprodigy Ja, für den Fall, dass ich etwas tun muss, wo C / C ++ erforderlich ist oder am sinnvollsten ist, würde ich natürlich C lernen. Mein Rindfleisch ist mit Leuten, die sagen, dass Sie C lernen müssen, um es effektiv zu können in Hochsprachen zu entwickeln. Und das ist absurd.
Stephen

@burningprodigy lassen Sie uns diese Diskussion im Chat fortsetzen
Stephen

Können Sie uns einen Kontext (URL) geben, aus dem "Programmierkonzepte wie Zeiger nicht verarbeiten können ..." stammt?
k3b

Wenn es eine Sprache gäbe, von der ich mir wünschte, ich könnte sie lernen, dann wäre es Common Lisp und nicht C. Als C # -Entwickler bin ich mir ziemlich sicher, dass ich mehr davon profitieren würde. Wir haben bereits Zeiger in C #. Meistens würde ich lieber mehr Möglichkeiten lernen, ein Problem anzugehen, als zu versuchen, dieselbe Lösung schwieriger umzusetzen. (Nur als Notiz, ich lüge halb. Ich habe ein C gemacht und ich weiß, dass es seine Vorteile hat. Ich wollte nur eine unglaublich mächtige und ausdrucksstarke Sprache würdigen, die ein Jahrzehnt älter war als C.)
Magus

Antworten:


113

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.)


12
Frank: Du hast den Nagel auf den Kopf getroffen. Das Verständnis der Funktionsweise eines Computers, die Speicherverwaltung und -zuweisung sowie die Idee, dass Sie höhere Sprachen besser verstehen können, sind der Grund für das Erlernen von C. Ich bin froh, dass wir C lernen mussten, um Klassenprojekte wie das Implementieren einer grundlegenden TCP-Schicht über UDP zu implementieren .
Chris

12
Ich stimme dem zu, obwohl: C Sie nur ein paar Schritte näher an die Graswurzeln bringt, nicht bis zum Boden. Ok, es gibt eine Sache namens Speicherlayout. Aber was bedeutet das physikalisch? Verstehen Sie, wie Computer funktionieren, wenn Sie die Elektronik nicht verstehen? Quantenmechanik? Und so weiter. Ich bin mir nicht sicher, ob es einen einzigen Geist auf der Welt gibt, der die gesamte Nahrungskette von einer Hochsprache über C bis hin zur Quantenmechanik tiefgehend versteht.
Joonas Pulakka

14
Meine Frage ist, wie Sie davon profitieren können, wenn Sie wissen, wie ein Computer intern funktioniert. Was gewinnst du? Die Wertschätzung dessen, was Sie jetzt haben, ist kein guter Grund, eine Sprache mit sehr niedrigem Sprachniveau wie C zu lernen. Als ob ich Fortran lernen sollte, um zu schätzen, was ich jetzt habe
TheLQ

18
@TheLQ Ich bin sprachlos. Wie können Sie davon profitieren, zu wissen, wie ein Computer intern funktioniert? Sie gewinnen ein klareres Verständnis für das, was Sie tun, und das, was Sie gewinnen. Eher: Sie lernen, was Sie eigentlich mit der Maschine machen.
Frank Shearar

15
Ich werde dies als richtig markieren, da es die Lieblingsantwort zu sein scheint. Trotzdem ist es mir im Grunde egal, wie ein Computer funktioniert, da es mir nicht hilft, die nächste coole Funktion meiner Anwendung zu entwickeln. Es ist wie beim Autofahren: Ich bin sehr gut darin, aber es ist mir egal, wie der Bremsflüssigkeitsdruck funktioniert. Es hört nur auf, wenn ich die Bremse trete. Ich bin mir auch sicher, dass ich Autofahren mehr schätzen würde, wenn ich zum ersten Mal fünf Jahre lang mit einem Pferdebuggy herumfahren müsste. Das heißt nicht, dass ich nicht in der Lage bin zu postulieren, wie viel besser das Auto ist als der Buggy.
Stephen

72

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.


5
Sie klingen nicht so snobistisch. Okay, vielleicht ein bisschen. :)
Stephen

7
Hervorragende Antwort. Ich habe zehn Jahre lang erfolgreich programmiert, ohne C und C ++ gelernt zu haben, und ich hätte den Rest meiner Karriere machen können, ohne es jemals zu lernen. Aber seit ich es letztes Jahr gelernt habe, habe ich bessere Software geschrieben, nicht nur in C ++, sondern auch in meinen anderen Sprachen.
John M Gant


3
Warum wäre es "völlig falsch", C mit Latein zu vergleichen? Ich denke, es ist eine hervorragende Analogie. Latein ist überall um uns herum. 58% des englischen Wortschatzes wird von Latein beeinflusst (direkt oder durch andere romanische Sprachen). Latein ist auch der Schlüssel zum Verständnis unserer Kultur. Recht, Demokratie, Religion, Infrastruktur, Stadtplanung und eine Reihe anderer Bereiche gehen auf das Römische Reich zurück. Sie können C genauso ignorieren wie Latin, aber Sie können sie niemals vermeiden. "Latein und Griechisch sind keine toten Sprachen. Sie haben einfach aufgehört, sterblich zu sein." (JW McKail)
Anders Sjöqvist

2
@ AndersSjöqvist, es wäre falsch, weil niemand mehr Latein spricht, obwohl es die Entwicklung der modernen Sprachen tiefgreifend beeinflusst hat. Während C aktiv verwendet und im Gebrauch überall - in fast jedem OS, VM, Datenbank oder Dolmetscher. Latein ist eher wie zum Beispiel ... Simula - eine meist tote Sprache, die lebende Sprachen tiefgreifend beeinflusst hat, aber außerhalb der Wissenschaft nicht verwendet wird.
Charles Salvia

12

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.


9
Ok, "C / C ++", mit dem ich leben kann (Sprachjuristen sind verdammt). Und "Perl / Python / Javascript" ist durchaus zumutbar. Aber aus Liebe zu Gott, warum "Assembler / C / Lisp"? Das ist, als würde man "Apfel / Orange / Baracke Obama" sagen. Diese drei Sprachen haben nichts miteinander zu tun.
Jason Baker

@Jason, die einzige Gemeinsamkeit, die ich angedeutet habe, ist, dass es für die meisten Leute schwieriger ist, drei Sprachen im Handumdrehen zu lernen, und es sich daher möglicherweise lohnt, die OPs einige Zeit mit ihnen zu verbringen, bevor ein unmittelbarer Bedarf für deren Verwendung entsteht. Zeigerarithmetik und funktionale Programmierung haben nicht viel gemeinsam, außer dass die Leute sie länger anstarren müssen, bevor sie einen Sinn ergeben.
Charles E. Grant

Ich konnte nicht mehr zustimmen. Umgekehrt, zu höheren Abstraktionsebenen, ist der „Büro-IT-Typ“, der zumindest einige Programmieraufgaben übernimmt, in der Regel besser als derjenige, der dies nicht kann.
Emmet

7

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.


2
Lernen Sie vielleicht, eine Assemblersprache zu lesen. Das Problem ist, dass ich über 10 verschiedene Prozessorfamilien verfüge, die ich verwende. Das Erlernen der sehr unterschiedlichen Varianten ist ein Rezept für Verwirrung und Chaos. Vergleichen Sie AMD SHARC mit Atmel AVR32 und TI MSP430.
uɐɪ

@ Ian: Richtig. Idealerweise sollten Sie die Assemblersprache für jeden Bogen lernen, für den Sie am meisten entwickeln. Für die meisten Leute wird dies entweder x86 oder ARM sein.
Dsimcha

3
"Alle seriösen Programmierer sollten irgendwann lernen, Assembler zumindest zu lesen." Ich denke, Sie sind einfach voreingenommen, Sir. Ich mag jedoch, was Sie über undichte Abstraktionen gesagt haben. Das macht Sinn. Andererseits machen diese Dinge in meiner Arena keinen großen Unterschied in der "realen" Welt. Ich verwende immer noch die Abstraktion auf hoher Ebene, undicht oder nicht.
Stephen

1
@Stephen, Sie sollten versuchen, eine Assemblersprache zu schreiben. Die 8-Bit-CPUs sind nicht schwer und der Versuch, dasselbe kleine Ding in 6502 (wie dem C64) und Z80 (wie CP / M-Geschäftsmaschinen) zu implementieren, ist tatsächlich sehr lehrreich Erfahrung aufgrund einiger sehr grundlegender Designunterschiede (Indexseite gegenüber Registern).

+1 trotz der offensichtlich falschen All abstractions are leakyAussage.
Thomas Eding

7

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.


6
"Jobspezifikationen scheinen immer noch von dieser Standardvorlage zu stammen, die vor 25 Jahren geschrieben wurde." Sie könnten nicht korrekter sein.
Stephen

Glückwunsch, John!
Mark C

6

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.


lol. Joels Rat in der verlinkten Spalte: "Sie sollten besser ignorieren, was ich hier sage, und stattdessen eine Art Online-Software entwickeln, mit der andere Studenten Leute finden, mit denen sie ausgehen können."
Stephen

3
@Stephen: Wenn du möchtest, dass die Leute dich wirklich bemerken, dann lass sie entweder bezahlen oder legen.
Fred Nurk

@Fred Toller Rat, lol.
Stephen

6

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.


4

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.


Ich denke, "Wertschätzung" ist eine Möglichkeit, es auszudrücken. In meiner High School-Programmierklasse ging es meist nur um die Frage: "Ich muss diese Funktion verwenden. Wie konvertiere ich einen LOLOMGCHAR * in einen WTFBBQCHAR *?"
Katana314

Ich denke, C war leicht zu lernen. Zumindest war es für mich nur das Lesen von Kernighan & Ritchie.
Robert Bristow-Johnson

2

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.


1
Das ist großartig ... Aber das macht nicht jeder. Die Implikation scheint zu sein, dass Leute, die nicht für eingebettete Systeme schreiben, nur spielen und keine ernsthafte Entwicklung machen - zumindest unter Berücksichtigung Ihrer Modellanalogie im Kontext Ihrer eingebetteten Systeme. Das ist eindeutig nicht der Fall und es ist möglich, groß angelegte Produktionsanwendungen zu schreiben, ohne jemals C zu berühren.
JohnL

Natürlich ist es möglich, groß angelegte Produktionsanwendungen zu schreiben, ohne an C heranzukommen. Ich habe 10 Jahre lang Code geschrieben, bevor ich mit C angefangen habe. Ich habe sowohl PL / M, Pascal, ADA als auch Assembler verwendet. Diese waren leicht so gut wie C, um die zugrunde liegenden Mechanismen der Maschine zu erlernen, und oft besser, um fehlerfreien Code zu erzeugen.
uɐɪ

Großartig - obwohl Ihre Antwort oben nicht den Eindruck erweckte, dass Sie so dachten, daher meine Antwort ...
JohnL

Haben Sie Erfahrung mit den Java-Engines, die auf die Embedded-Nutzung ausgerichtet sind?

2

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.


2

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.


2

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.


1

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.


1

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.


1

C hat viele Vorteile:

  1. C ist eine einfache Sprache. Mit c können Sie Kernel und Treiber entwickeln.
  2. C ist die schnellste Sprache. Viele Power-Software werden von c entwickelt. Zum Beispiel: memcached, redis, nginx, apache, mysql etc.
  3. C ist eine plattformübergreifende Sprache. Das von c entwickelte Programm kann auf jeder Plattform ausgeführt werden. Andere plattformübergreifende Sprachen können dies nicht. Java, Python, PHP usw. können nicht auf iOS-Plattformen ausgeführt werden.
  4. C ++ kann auf vielen eingebetteten Systemen nicht ausgeführt werden.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.