Als ich anfing zu programmieren, konnten echte Programmierer Assembler im Schlaf schreiben. Jede ernsthafte Informatikausbildung würde ein hohes Maß an Schulung und Übung in der Programmierung mit Assembler beinhalten. Das hat sich seitdem geändert, bis ich sehe, dass die Abschlüsse in Informatik mit Montage, wenn überhaupt, für insgesamt zwei Wochen Arbeit nach vierjähriger Schulzeit auf einen Auftrag und ein Kapitel verwiesen werden.
Die C / C ++ - Programmierung scheint einen ähnlichen Weg eingeschlagen zu haben. Ich bin nicht länger überrascht, Universitätsabsolventen zu interviewen, die nicht mehr als zwei Wochen mit Programmieren in C ++ verbracht haben und irgendwo nur C in einem Buch gelesen haben. Während die schwerwiegendsten CS-Abschlüsse anscheinend immer noch das Erlernen einer oder beider Sprachen beinhalten, geht der Trend eindeutig zu weniger erzwungenem C / C ++ in der Schule.
Es ist eindeutig möglich, Karriere zu machen und gute Arbeit zu leisten, ohne jemals eine einzige Zeile C- oder C ++ - Code zu lesen oder zu schreiben.
Lohnt es sich angesichts all dessen, die beiden Sprachen zu lernen? Müssen sie überhaupt exzellent sein? (Über die offensichtlichen, nicht sprachspezifischen Ratschläge hinaus, wie "eine gute Auswahl von Sprachen ist wahrscheinlich wichtig für eine umfassende Ausbildung", und "es ist wahrscheinlich eine gute Idee, während der gesamten Karriere eines Programmierers immer wieder neue Sprachen auszuprobieren und zu lernen die grauen Zellen strecken ")
quelle
Antworten:
Joel Spolsky (ja, dieser Joel) argumentierte vor einiger Zeit, dass echte harte Programmierer wissen, wie man härtere Sprachen (wie C, C ++ und Lisp) und ihre Konstrukte (wie Zeiger und Funktionsmerkmale) verwendet, und dass höhere Sprachen normalerweise nicht "Schwer genug", um Ihre Kompetenz unter Beweis zu stellen.
Ich kann seinen Standpunkt verstehen, dass Leute, die C und C ++ kennen und tatsächlich gut darin sind, viel mehr darüber wissen, was unter der Haube vor sich geht, als Leute, die beispielsweise in Ruby (und nur in Ruby) programmieren . Ich würde sagen, dass dies so aussieht: Wenn Sie eine "harte" Sprache beherrschen, ist dies wahrscheinlich ein guter Beweis dafür, dass Sie programmieren können, während Sie strenge Auflagen einhalten oder komplexe Denkweisen beherrschen. Wenn Sie sich in einer höheren Sprache gut auskennen, können Sie zwar auch unter Einhaltung strenger Auflagen programmieren, aber es gibt keinen Beweis dafür.
Ich glaube nicht, dass das Erlernen von C oder C ++ Ihrem Gehirn schaden wird (manche Leute scheinen dies jedoch zu glauben). Eigentlich könnte es eine gute Idee sein, es nur zu lernen, um höhere Sprachen zu schätzen.
quelle
Ja, Kenntnisse in C (oder C ++) sind erforderlich, um (in unserer heutigen Zeit) ein hervorragender Programmierer zu sein.
Es ist nicht die Sprache selbst, es ist die Umwelt.
Programme laufen nicht im luftleeren Raum. Ein ausgezeichneter Programmierer kennt seine Umgebung, so wie ein guter Bildhauer sein Material kennt. Unsere aktuelle Programmierumgebung (Betriebssysteme, Compiler, Netzwerke usw.) basiert auf C / C ++.
Ausgezeichnete Programmierer schreiben effiziente Programme und debuggen sie in realen Situationen. Er muss die Umgebung kennen - und heutzutage muss er C / C ++ kennen.
Bearbeiten: Kann nicht widerstehen, Matrix-Referenz hinzuzufügen. Morpheus könnte fragen: Möchten Sie die Java-Pille einnehmen und weiterhin in einer komfortablen Welt leben, die von der virtuellen Maschine bereitgestellt wird? Oder nimmst du die C-Pille und siehst, wie tief das Kaninchenloch geht?
quelle
Ich muss auf einen anderen Joel-Artikel verweisen. In The Law of Leaky Abstractions bedeutet das Erlernen von Sprachen wie C, Lisp, C ++ und Sprachen, die das Speichermanagement beinhalten, auch das Erlernen einer Denkweise, die uns für den Rest unserer Karriere definiert.
Mein Professor in meiner Klasse für Datenstrukturen und Algorithmen, William Spears, erzählte einer Menge skeptischer Informatikstudenten, warum wir nicht die neuesten Tools gelernt haben. Die Studenten beklagten sich, dass sie sich nicht auf die "reale Welt" vorbereitet fühlten, weil wir kein Java lernten. Wir haben kein JavaScript gelernt. Es gab keine HTML-Klassen. Wir haben [[INSERT TECHNOLOGY HERE]] nicht gelernt.
Warum haben wir nicht die neuesten Werkzeuge gelernt? Laut unserem Professor ändert sich die Technologie so schnell, dass die Werkzeuge, die wir lernen, in 4 Jahren möglicherweise überholt sind. Nun, nach ein paar Jahren in der Branche muss ich sagen, dass ich seiner Einschätzung zustimme.
Der Zweck einer Informatikausbildung besteht darin, das Lernen zu erlernen. Das Herausfinden von Lösungen für viele Probleme in der Entwicklung erfordert oftmals die Fähigkeit, über den Tellerrand hinaus zu denken, was nur durch das Erlernen grundlegender, grundlegender, unter der Haube liegender Informatik möglich ist, die aus der Arbeit mit C, C ++ und Lisp resultiert.
Wenn diese Abstraktionen in der realen Welt undicht werden, ist ein Verständnis der Grundlagen das, was den Durchschnitt vom Besten unterscheidet.
quelle
Lassen Sie es mich so sagen. Angenommen, Sie müssten jemanden einstellen, der C ++ - Arbeit leistet, und jemand bewirbt sich, der ein C ++ - Projekt am College durchgeführt hat, aber seit dem Abschluss nur in Java programmiert hat. Nehmen wir umgekehrt an, Sie müssten jemanden für eine Java-Arbeit einstellen, und jemand bewirbt sich, der ein Java-Projekt im College durchgeführt hat, aber seit dem Abschluss nur in C ++ programmiert hat.
Wen werden Sie bequemer einstellen? Ich würde den C ++ Typen argumentieren, da es viel einfacher ist, eine Sprache zum Sammeln von Müll zu verwenden, als sich von einer zu entfernen. Ebenso für andere Konzepte und andere Sprachen, wie den Übergang von kompilierter zu interpretierter oder von statischer zu dynamischer Typisierung. In fast jedem Feature-Vergleich, den Sie zwischen Sprachen durchführen können, hat C ++ das schwierige Ende, was das Programmieren zu einer schwierigen Angelegenheit macht, aber auch eine hervorragende Grundlage für die Beurteilung eines Programmierers.
Können Sie Karriere machen, ohne jemals C- oder C ++ - Code zu berühren? Klar, aber ich würde trotzdem niemanden einstellen wollen, der das nicht kann oder fürchtet.
quelle
Nein, es ist nicht erforderlich, C oder C ++ zu lernen, um ein guter Programmierer zu sein, aber zu verstehen, würde helfen, einige grundlegende Konzepte wie Memory Management zu klären.
quelle
Es ist eindeutig möglich, Karriere zu machen und gute Arbeit zu leisten, ohne jemals eine einzige Zeile C- oder C ++ - Code zu lesen oder zu schreiben.
quelle
Kurz gesagt, nein, das sind sie nicht. Sie sind nützliche Sprachen zum Lernen, aber Sie können leicht ein ausgezeichneter Programmierer sein, ohne eine Zeile von C oder C ++ zu berühren. Die meisten hervorragenden Programmierer werden sie wahrscheinlich berührt haben, aber das ist auch der springende Punkt - in vielen Anwendungen werden sie heutzutage nicht annähernd so häufig wie .NET und Java verwendet, und daher ist ihre Notwendigkeit etwas gesunken.
Beachten Sie, dass ich nicht sage, dass sie es nicht wert sind, gelernt zu werden. Ich denke, sie sind beide wichtige Sprachen zum Lernen, besonders wenn Sie vorhaben, aus dem Programmieren eine Karriere zu machen. Aber können Sie ein anständiger Programmierer sein, ohne jemals etwas angerührt zu haben? Sicher.
quelle
Es hängt von Ihren Interessen ab.
Wenn Sie in der Systemprogrammierung mitarbeiten möchten, müssen Sie C / C ++ lernen, da dies die Standardsprachen von CS sind. Um sich mit Betriebssystemkonzepten, Compilern, Datenstrukturen, Speicherverwaltung usw. vertraut zu machen, müssen Sie C / C ++ kennen. Zusätzlich sind auf C / C ++ unzählige gute Texte, Bücher und Artikel verfügbar, die Ihre Programmierkenntnisse optimieren. Vor ein paar Tagen las ich in / * Programmers * / eine exzellente Antwort für Why C - weil es nah am Metal ist .
Umgekehrt, wenn Sie sich auf die Anwendungsprogrammierung beschränken möchten, müssen Sie sich nicht für C / C ++ entscheiden. Beginnen Sie direkt mit C # (.Net) / Java, und Sie erhalten einen guten Entwicklerjob. Aber wenn Sie Hardcore-Programmierung wirklich lieben, werden Sie sicher eines Tages C / C ++ lernen.
quelle
Es hängt ganz davon ab, in welcher Anwendungsdomäne Sie arbeiten möchten. Wenn Sie in der eingebetteten Landschaft spielen möchten, müssen Sie C oder C ++ kennen. C ++ ist wahrscheinlich auch die am häufigsten verwendete Sprache in der Spieleentwicklung. Wenn Sie an Webanwendungen arbeiten möchten, ist C oder C ++ möglicherweise nicht so wichtig. Es gibt keine Sprache, die das Prestige hat, als Präzedenzfall für die Definition eines guten Software-Ingenieurs bezeichnet zu werden.
quelle
C wurde "portably assembly" genannt, was sehr richtig ist. Es wurde entwickelt, um Unix prozessorübergreifend portabel zu machen und Code zu beschreiben, der dem Befehlssatz des zugrunde liegenden Prozessors sehr nahe kommt.
Wenn Sie feststellen, dass Sie in der Nähe der eigentlichen Hardware arbeiten möchten, sich in eingebetteter Software oder Gerätetreibern usw. befinden, führt kein Weg an C vorbei. Wenn Sie in den gängigsten Sprachen arbeiten möchten, sind Hochsprachen eine bessere Idee Viele der Features, die C mächtig machen, machen C auch gefährlich, so dass sie verringert oder einfach entfernt wurden.
Persönlich halte ich es für sehr wichtig, zu verstehen, was eventuell zum Ausführen Ihrer Programme erforderlich sein wird, da viele Entwurfsentscheidungen davon abhängen. Daher sollten Sie zumindest mit der Zuordnung von Code zum Assembly-Anweisungssatz und der tatsächlichen Funktionsweise vertraut sein Hardware. Was Sie für selbstverständlich halten, braucht Zeit und warum.
Daher würde ich zumindest vorschlagen, dass Sie sich C und einen fortgeschrittenen Zeiger-Arithmetikcode ansehen, damit Sie wissen, womit Sie sich nicht täglich befassen müssen.
quelle
C ist nützlich zu lernen, weil es nahe am Silizium liegt. C oder Assembler geben Ihnen ein gutes Gefühl dafür, was Computer können und wie sie es tun. Dies ist wahrscheinlich hilfreich, um zu verstehen, was möglich und was praktisch ist. Darüber hinaus gibt es eine Menge C-Code, an dem Sie interessiert sein könnten, und eine viel modernere Sprache verwendet einen Großteil ihrer Syntax und Semantik.
C ++ ist eine höhere Sprache, die einige sehr interessante Funktionen enthält. Es hat viele gute Verwendungen und ist eine mächtige Sprache. Auf der anderen Seite gibt es viele andere mächtige und nützliche Sprachen.
Daher empfehle ich dringend, etwas über die Vorgänge auf den unteren Ebenen zu lernen, und C ist eine hervorragende Methode, um sie zu lernen. Daher empfehle ich dringend, C ++ zu lernen. Wenn Sie es lernen, werden Sie Dinge lernen, aber es gibt andere Möglichkeiten, die meisten davon zu lernen. Wenn Sie bereits in einer Standardsprache arbeiten, gibt es bessere Sprachen, um neue Konzepte zu erlernen.
quelle
Dies hängt von der Art der Software ab, von der Sie glauben, dass Sie sie erstellen werden. Spiele werden oft in C / C ++ geschrieben, da es sich bei dem ausführbaren Code klassisch um eine optimierbare Sprache handelt. Was Sie codieren, ist in gewisser Weise nur das, was Sie erhalten.
Allerdings wurde C # auch zum Programmieren von Spielen verwendet. C # ist wahrscheinlich eine der besten Sprachen für die Entwicklung von Desktopanwendungen, zumindest auf der Windows-Plattform.
Neben Visual Studio ist C # fast die einzige Softwareentwicklungssprache, die ich verwende (mit Ausnahme von Sprachen wie SQL und PHP usw.), da es meiner Meinung nach in jeder Hinsicht absolut fantastisch ist .
Wenn Sie unter Windows entwickeln, empfehle ich dringend, neben allem anderen auch C # .NET zu lernen.
Ich glaube nicht, dass C ++ per se eine Voraussetzung ist, aber es ist schön, dass man über ein geringeres Wissen über Zeiger, Speicherverwaltung und andere Konzepte verfügt.
quelle
@ Nick Bedford stimmt mit der Domain überein, in der Sie arbeiten. Meine Software-Kollegen schreiben Gerätetreiber und eingebettete Software. C ist der Weg dorthin. Und denken Sie nicht an C ++ als zweite Sprache, sie haben enorme Überschneidungen.
quelle
Viele haben gesagt, dass C für das Speichermanagement gut zu lernen ist, und ich stimme zu. Meiner Meinung nach ist C zu lernen, dass es sehr gut ist, zu lernen, wie man ein Programm debuggt. Beim Schreiben von C kann eine Menge schief gehen, sodass Sie überlegen müssen, wie Sie Ihre Programme debuggen sollen. Ich verwende selten ein Debugging-Tool in meiner Programmierung (in C oder anderen Sprachen), nur weil C mir beigebracht hat, wie man integrierte Debugging-Dienstprogramme zu Programmen hinzufügt.
Ist das Erlernen von C / C ++ für eine Karriere erforderlich? Nein, aber ich habe auch viele Java-Entwickler gesehen, die nicht viel über Programmiergrundlagen wissen, weil sie nur Java gelernt haben. Gleiches gilt für Perl-Programmierer. Das Erlernen von mehr als einer Sprache sollte eine Voraussetzung für eine Karriere sein, unabhängig davon, ob C / C ++ eine dieser Sprachen ist oder nicht.
quelle
Am Anfang dachte ich, dass meine Universität in der Generation von Dennis M. Ritchie ist, weil ich C für 2 Semester aufgenommen habe, wenn es viele relativ neue Sprachen wie Java, Visual Basic und so weiter gibt. Aber Tatsache ist, oder zumindest glaube ich, dass C eine der besten Sprachen ist, die Ihnen helfen, die grundlegenden Konzepte der Programmierung zu verstehen.
Und über die Karriere ohne C (oder C ++) zu lernen - Ja, es ist möglich, aber C zu lernen wird Ihre Programmierkenntnisse demonstrieren.
quelle
Die Antwort für mich war ja. Sowohl C als auch C ++ waren Pflichtkurse in meinem CS-Studiengang, und ich bin der Überzeugung, dass ein CS-Abschluss oder ein verwandter Abschluss eine Mindestvoraussetzung ist, um ein "guter Programmierer" zu sein. Ein "guter Programmierer" zu sein bedeutet außerdem, die auftretenden Probleme rationalisieren zu können und zu verstehen, warum etwas nicht so funktioniert, wie man es erwarten könnte. Zu oft in meiner Karriere habe ich gesehen, wie Menschen von Problemen überrascht wurden und dachten, es würden übernatürliche Kräfte gegen sie arbeiten ... es ist lächerlich.
IMO, C zu kennen, zeigt die Fähigkeit, jede der imperativen Sprachen zu verstehen und Probleme mit einem der mächtigsten Werkzeuge zu lösen, die die Menschheit jemals erfunden hat.
quelle
Ein gut gerundeter Programmierer hat mehrere Trickkisten im Ärmel, darunter:
1) Low-Level-Programmierung ... C mindestens. Eine Versammlung würde nicht schaden.
2) Funktionale Programmierung ... Eine reine Funktionssprache, kein Hybrid - hier funktioniert das Schema.
3) OOP ... Normalerweise würde ich Smalltalk sagen, aber ich denke, wir könnten jetzt mit Java arbeiten.
quelle
C ist die Mutter aller Programmiersprachen ... Expertenwissen in C ermöglicht es Ihnen, in kurzer Zeit jede andere Sprache wie Java zu beherrschen.
C ++ ist ein ganz anderes Ballspiel und das komplexeste unter allen.
quelle
Es ist nicht erforderlich, C oder C ++ zu lernen, um ein guter (exzellenter) Programmierer zu sein. Es ist jedoch erforderlich, Assembly zu lernen, um ein guter (exzellenter) Programmierer zu sein. Hervorragende Programmierung bedeutet, Speicher, MHz, Bandbreite und Leistungsbeschränkungen zu optimieren und dann das beste Design und / oder die beste Implementierung für die jeweilige Aufgabe auszuwählen. Bei den Informatikern besteht die primäre Schwäche nach Jahrzehnten der Weiterentwicklung der Technologien immer noch darin, Daten optimal zu verwalten. Hierbei handelt es sich um eine Reihe von Fähigkeiten, die durch das Schreiben von Assembly vermittelt werden (beliebige Assemblys, z. B. ARM, MIPS, x86, Mikrocontroller, DSP oder sogar niedriger über Verilog / VHDL).
quelle
Ich würde sagen, dass es keinen Sinn macht, eine bestimmte Sprache zu lernen, um ein guter Programmierer zu sein, wenn ich C, C ++, Assembly und Lisp beherrsche. Meine Erfahrung mit dem, was einen guten Programmierer ausmacht, ist, dass ich in der Lage bin, so zu denken, dass Probleme gelöst werden. Sprachen ermöglichen es Ihnen lediglich, Ihre Fähigkeiten zur Problemlösung auszudrücken. Zum Beispiel ermöglicht die Einfachheit von C das einfache Ausdrücken von Algorithmen, während Sie mit Lisp Probleme rekursiv lösen können. Eine Sprache macht Sie also nicht zum Programmierer. Sie müssen zuerst ein Problemlöser sein, bevor Sie ein guter Programmierer werden. Sprachen sind nur Werkzeuge, mit denen Sie Probleme lösen können.
quelle
Es lohnt sich, C gut zu lernen, um ein solides Verständnis des Speichermanagements zu erlangen. Das Gleiche gilt für C ++, außer mit dem Ziel, Datenstrukturen zu lernen.
quelle
Nein. Es gibt viele miese Programmierer, die C / C ++ - Code schreiben. Was Sie zu einem guten Programmierer macht, ist das Verständnis, wann und warum Sie etwas in C / C ++ schreiben müssen
quelle