Ist C ++ als Muttersprache geeignet? [geschlossen]


26

Ein lokales College unterrichtet C ++ an College-Studenten im ersten Jahr (16 Jahre) ohne vorherige Programmiererfahrung.

Ist C ++ als erste Programmiersprache geeignet?


56
Jede Sprache kann eine Muttersprache sein. Es ist nicht wirklich wichtig.
Adam Lear


19
@Anna Lear: Natürlich kann jede Sprache eine Muttersprache sein, aber das qualifiziert C ++ nicht als gute Muttersprache. Wenn Ihre Antwort eine tatsächliche Antwort wäre, würde ich sie als nicht hilfreich abstimmen.
Ed James

6
@Doug: Ich programmiere C ++, um meinen Lebensunterhalt zu verdienen ... wozu?
Matthieu M.

9
@Dough - 70% der heutigen Computerprojekte umfassen das Schreiben von Software für eingebettete Systeme und Mikrogeräte. Ratet mal, welche Sprachen für diese Projekte verwendet werden? Ratet mal, wer am besten für Einstiegspositionen gerüstet ist? Mit Sicherheit keine Java- oder .NET-One-Trick-Ponys. Hört sich hart an, aber die Schulen haben einer ganzen Generation von CS-Absolventen großen Schaden zugefügt, indem sie sie nur für 30% des Arbeitsmarktes für Programmierer ausgebildet haben. Wir haben eine Überfülle von Programmierern für den App-Sektor (30%) und wir haben einen Mangel im Systemsektor (70%). Diese Zahlen gehen nirgendwo hin. Zukünftige Karrieremöglichkeiten? Ja, genau.
Luis.espinal

Antworten:


61

Nachdrücklich nein .

Für jedes Ziel, das Sie für Studenten vorhaben, wäre eine andere Sprache oder eine andere Folge von Sprachen schneller und besser. Beispiele.

"Die Schüler müssen grundlegende Konzepte verstehen."

"Low-Level" -Codierung besteht nicht darin, Objekte newabzurufen, sie zurückzuspeisen deleteund gelegentlich einen Zeiger zu haben, der auf eine Stelle zeigt, an der er nicht sein sollte. Funktionen, Klassen und Vorlagen sind keine Low-Level-Funktionen. RAII, 12 Möglichkeiten zu nutzen const, std::ostream::operator<<, protectedund newsind nicht Low-Level - Konzepte. Diese Dinge haben geringe Auswirkungen, und Sie überspringen diese für Monate oder bis zu einer zukünftigen Klasse und unterrichten stattdessen Berge von C ++ - Semantik.

Ich empfehle Assembler mit einer guten Umgebung und Lehrmaterial wie MIPS oder MMIX. Wenn Sie es eilig haben, bringen Sie C mit Umwegen bei, um sich zumindest die Assembler-Ausgabe anzusehen. Dies wird Ihnen das gesamte Verständnis vermitteln, das C ++ und noch viel schneller macht.

"Die Schüler müssen die Objektorientierung verstehen."

Die in C ++ integrierte Objektorientierung ist für das Unterrichten von OO-Konzepten oder fast jedem anderen übergeordneten Konzept viel zu kompliziert. Siehe Die C ++ FAQ für eine schöne, warum lange Liste der möglichen Gründe. Entweder müssen Sie all diese Dinge erledigen, was bei neuen Programmierern sehr, sehr lange dauern wird. oder Sie müssen eine Menge davon überspringen und die neuen Programmierer im Dunkeln lassen - effektiv, weil Sie C ++ nicht wirklich kennen!

Ich empfehle, zuerst eine einfachere Hochsprache mit Objekten zu lernen (Python, Ruby, Squeak, Common Lisp, Racket), wenn Sie überhaupt C ++ unterrichten müssen. Darüber hinaus lernen Sie Polymorphismus als ein Konzept, das durch den Besuch einer funktionalen Sprache von OO getrennt ist.

"Die Schüler müssen Vorlagen und Vorlagen-Metaprogramme verstehen."

Niemand fragt das wirklich, aber ich wünschte, sie würden. C ++ hat nette Vorlagen und STL ist cool, aber sie sollten keine ausreichend hohe Priorität haben, um C ++ zuerst zu unterrichten. Das Erlernen des OCaml- oder Haskell-Systems und das anschließende Nachrüsten dieser Konzepte sind möglicherweise schneller.

"Die Schüler müssen lernen, Probleme zu lösen."

Ja, Sie bekommen das in jeder Sprache und Sie bekommen mehr, wenn es in fast jeder anderen Sprache als C ++ ist, weil es viel weniger Gepäck gibt. In den häufig gestellten Fragen zu C ++ finden Sie eine Liste aller Dinge, die die Schüler lernen werden, anstatt Fähigkeiten zur Problemlösung.

"All dies und wir müssen nur eine Sprache verwenden." oder "Arbeitgeber wollen es." oder "Wir brauchen eine Sprache im C-Stil." oder...

Unterrichten Sie mehr als eine Sprache.

Die Idee, dass Sie Zeit oder Energie sparen, indem Sie nur eine Sprache lehren oder lernen, ist geradezu lächerlich. Es basiert auf der Idee, dass das Erlernen einer Sprache genau X Mannmonate dauert ( TIPP! TIPP! ), Wobei X eine einzelne Zahl oder eine Zahl pro Sprache ist. Dies ist fast identisch mit der Idee, dass Sie Zeit und Geld sparen können, indem Sie all diese "Anforderungen" und "Test" -Müll überspringen.

Bei Mehrfachsyntaxen können Sie die Schüler in gefährlicher Weise lähmen, wenn Sie ihnen beibringen, die C-Syntax in jeder Sprache zu erwarten, indem Sie sie wild gegen andere Sprachen voreingenommen machen.

Fast jeder Pfad ist schneller und besser als der Start mit C ++. Das Erlernen einer einfachen Hochsprache und dann C ++ wäre schneller. Assembler und dann C ++ zu lernen wäre schneller. Alles andere als C ++ wird die Schüler schneller dorthin bringen und sie werden viel mehr wissen, um zu booten. Unterrichten Sie C ++ einfach nicht zuerst.


4
Gute Antwort! In der Tat haben viele C ++ - Funktionen überhaupt nichts mit Low-Level-Programmierung zu tun.
Marco Mustapic

7
+1, sehr gute Antwort. Es ist wahr, dass manchmal die Launen von C ++ fälschlicherweise mit "Low-Levelness" gleichgesetzt werden. Sie haben auf die C ++ - FAQ verwiesen , aber ich würde auch empfehlen, sich die C ++ - FQA (oder "Frequently Questioned Answers": P)
Andres F. vom

2
Wow. Das erinnert mich an das Java IAQ ...
Jesse Millikan

Stimme voll und ganz zu. Sogar Malbolge wäre für einen Anfänger besser als C ++.
Rightfold

2
Meine einzige Einschränkung: Sie können viel unterrichten, ohne auf die Details einzugehen, die zumeist nur für Personen relevant sind, die Bibliotheken entwickeln. Solange Sie klarstellen, dass Sie nur Basic C ++ verwenden ... aber was haben Sie schon jemandem beigebracht?
Steve314

54

Nein, C ++ ist selbst für erfahrene C ++ - Entwickler eine schwierige Sprache. Selbst für die einfachsten Algorithmen müssen Sie viele der sprachlichen Feinheiten erklären. Betrachten Sie ein Hello World-Beispiel:

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
}

Was ist das für ein #includeBefehl? Was ist std::cout. Warum das ::? Was ist <<? Ohhh, es ist ein überladener Operator! Was ist ein überladener Operator? Sooo, denn intses verschiebt sich ein bisschen, aber was auch immer es std::coutist, es gibt Sachen an die Konsole aus. Ohhh, std::coutist ein Stream und Streams haben ihren <<und >>Operator überladen.

Sehen wir uns das gleiche Beispiel in Python an:

print("Hello World!")

Das war's, lass uns ein paar Algorithmen programmieren.


15
Python ist für einen Siebtklässler geeignet. Ein Student kann viel mehr begreifen.
Gulshan

13
Klar, aber wir sprechen über eine Muttersprache. C ++ ist bekannt dafür, dass es im Vergleich zu anderen Sprachen schwierig zu lernen und zu beherrschen ist. Warum es verwenden, um Programmierung zu unterrichten? Ein Student kann C ++ später lernen, wenn er einige Programmiergrundlagen kennt.
Marco Mustapic

8
Sie haben nicht einmal die argumentabhängige Suche von << :)
MetricSystem

6
Sie müssen nicht unbedingt alles wissen, um mit einer Sprache zu beginnen. cout << was auch immer; "Funktioniert einfach", Sie müssen nicht auf die Details eingehen, bis Sie sich später mit dem Überladen von Operatoren usw. befassen.
Colen

6
Ich würde Python jeden Tag der Woche als Einführungssprache für C ++ verwenden.
Jprete

21

Es ist wahrscheinlich keine gute Muttersprache: komplexe Syntax, viele Regeln, alte Sprache, fehleranfällige Speicherverwaltung. Bringen Sie Ihren Schülern lieber etwas Besseres wie Smalltalk bei, oder etwas Schöneres zum Programmieren wie Python oder etwas Funktionales wie Haskell.

Sie können später im Leben C ++ lernen (wenn sie nicht anders können), nachdem sie bessere Sprachen gelernt haben.


5
Haskell als Muttersprache wäre ein interessantes Experiment.
Larry Coleman

@ Larry, der CS-Kurs der Universität Cambridge, unterrichtet SML als erste Sprache.
Peter Taylor

1
Funktionale Programmierung verändert Ihr Gehirn - Ich weiß, dass MIT schon ziemlich früh mit Scheme anfängt, aber ich bin froh, dass ich erst nach zwei Jahren eines hybriden Verfahrens / OO-Stils in der Schule mit funktionaler Programmierung begonnen habe.
Justkt

11
@justkt: Alle Sprachen verdrehen dein Gehirn. Es ist nur eine Frage, wie Sie es verdreht haben wollen.
David Thornley

+1, aber ich würde andere Sprachen als C ++ nicht unbedingt als "besser" bezeichnen.
greyfade

18

Kurze Antwort: Ja!

Ich würde sagen, dass jede Sprache ein geeigneter Anfang ist, aber insbesondere C ++ (oder Äquivalent). Heutzutage sind C # und Java die wichtigsten Programmiersprachen, mit denen Sie schnell lernen, sich auf APIs und IDEs zu stützen. Mit C ++ haben Sie jedoch die Möglichkeit, das Programmieren von Grund auf zu erlernen, einschließlich Leistungsoptimierung usw.

Es ist nie eine schlechte Idee, die Grundlagen des Programmierens, Schleifens und Sortierens zu erlernen, bevor Sie sich blind auf eine in .Sort () integrierte Sprache verlassen.


11
Looping und Sortieren, ja. Sie können das mit jeder Sprache machen. Aber warum sollte man anfangen, mit Zeigern und seltsamer Syntax zu arbeiten, wenn man das vermeiden kann? All diese Dinge können Sie später lernen, wenn Sie mehr Programmiererfahrung haben.
Marco Mustapic

4
@Marco: In Stroustrups Einführungslehrbuch "Programmieren: Grundlagen und Üben mit C ++" werden Zeiger etwa in der Mitte des Buches vorgestellt. Sie können in C ++ eine Menge Dinge tun, ohne einen Zeiger einzuführen.
David Thornley

4
„Es ist nie eine schlechte Idee , die Grundlagen zu lernen ... vor ...“ Sie haben jede Forschung auf diesen Anspruch zu unterstützen ? Ich weiß, dass viele kluge Leute als allgemein bekannt anpreisen, dass „Bottom-up“ die einzig wahre Art des Lehrens ist, aber dies ist ein sehr kontroverser Punkt und die einzige (zugegebenermaßen sehr begrenzte) didaktische Forschung, die ich kenne, weist auf das Gegenteil hin.
Konrad Rudolph

1
@David: Das Problem ist, dass "viele Dinge in C ++" ohne Zeiger noch schlimmer sind. Ohne Zeiger werden alle Ihre Objekte auf dem Stapel deklariert, was eine der schlechtesten Programmierideen überhaupt ist. Wertetypen und Vererbung / Polymorphismus passen einfach nicht zusammen, und der Versuch, sie zu mischen, führt zu ganzen Fehlerkategorien, die in besser gestalteten Sprachen nicht existieren.
Mason Wheeler

9
Oh Gott nein! Warum brennen begrenzte Versorgung von Gehirnzyklen auf unnötige Eigenheiten von C ++? Warum sollte man sich auf irrelevante Dinge auf niedriger Ebene wie Speicherverwaltung konzentrieren, wenn das Ziel darin besteht, grundlegende Konzepte in der Programmierung zu erlernen? Warum ins tiefe Ende springen ?!
Maglob

14

Eigentlich glaube ich, dass es aus einem sehr praktischen Grund eine gute Wahl als Muttersprache ist: Nach dem Erlernen von C ++ scheint es ein Kinderspiel zu sein, jede andere Sprache zu lernen, auf die Sie stoßen.


10
Bei allem Verdienst von Dijkstra ist es praktisch unmöglich, Schülern, die zuvor mit C ++ vertraut waren, gutes Programmieren beizubringen. Als potenzielle Programmierer sind sie mental verstümmelt, ohne auf eine Regeneration zu hoffen. ;)
Mason Wheeler

3
Sie müssten viele schlechte Gewohnheiten von C ++ verlernen. Macht Sie der Assembler zu einem besseren Java-Programmierer? Ich würde sagen, dass dies NICHT der Fall ist.
Andres F.

16
@ Andrés F .: Ich muss dem nicht zustimmen. Wenn Sie Assembler kennen, sind Sie ein besserer Programmierer, egal in was Sie schreiben, denn dann können Sie verstehen, was wirklich passiert.
Mason Wheeler

2
@Andres: Ich habe zu viele Java / C # -Programmierer gesehen, die in andere Sprachen gekommen sind und alles in Objekte gepackt haben ... es fehlt ihnen an Erfahrung.
Matthieu M.

3
@Andres F. - In meinen 12 Jahren als Java-Entwickler bin ich auf meinen Anteil an Java-Programmierern gestoßen, die wirklich schlecht dastehen, weil sie sich nicht mit Themen wie Ressourcenallokation, RAII auskennen und nicht wissen, wie man gc-freundliche Anwendungen programmiert. usw. Wenn Sie Assembler kennen und kompilierte Sprachen ohne automatische Garbage-Unterstützung und mit Unterstützung für andere Paradigmen als OO (C, C ++, Ada oder fast jede kompilierte Sprache der Algol-Familie) kennen, lernen Sie, wie Sie effiziente und große Systeme in Java schreiben. C #, Python, Sie nennen es. Außerdem ist das Objektmodell in C ++ Java überhaupt nicht so ähnlich.
Luis.espinal

10

Ich habe mir C ++ beigebracht, als ich 15-16 war.

Es ist besser, die Magie anderen zu überlassen und das Innenleben der Dinge selbst zu lernen.


Kurz gesagt, wenn Sie die C ++ - Einstiegssyntax und -Semantik nicht verstehen, sind Sie nicht so gut im Umgang mit Computern. Es ist nicht so schwer. Es gibt keinen guten Grund, "C mit Klassen" zu vermeiden.

Wenn Sie davon ausgehen, dass die Schüler anfangen, an der Metaprogrammierung von Vorlagen zu arbeiten, polymorphe Aufrufe abzuleiten und Hierarchien für mehrere Vererbungen zu entwirren, ist dies für eine Einstiegsklasse für jede Art von Sprache lächerlich.

Es besteht eine sehr schlechte Tendenz, die Komplexität der Programmierung für Studenten zu verbergen. Das ist nicht gut (vgl. Spolsky's Java Schools Essay). Diese Leute landen auf dem DailyWTF, wenn sie nicht den Kopf klar kriegen. Abstraktionen lecken, und wenn (nicht wenn) die Abstraktion leckt, ist das schlimmer, als damit umgehen zu müssen. Ich habe gearbeitet für den Einstieg in C ++ Studenten als TA. Entweder müssen Dinge vollständig verborgen sein oder sie müssen in das Licht gebracht werden, um untersucht zu werden. Magie ist der Feind des Lernenden.

Wenn ich eine zu Maschinencode kompilierte Startsprache empfehlen müsste, wäre wahrscheinlich eine Pascal-Variante der beste Ansatz. Es hat einen regelmäßigeren und strukturierteren Ansatz als die C-Familie, wie ich mich erinnere.


1
@ Ed: Nicht wirklich. Ich hatte If und Goto in QBASIC gemeistert und das war es auch schon. Zeiger, Arrays, Funktionen, Klassen usw. befanden sich alle in meiner C ++ - Zukunft. Auch die Rekursion war unverständlich.
Paul Nathan

5
Warten Sie, niemand erwartet, dass jemand mit C ++ an einem Projekt arbeitet, ohne vorher C ++ zu verstehen ! Das würde in der Tat zu Code führen, der TheDailyWTF würdig ist. Aber entgegen Ihrer Behauptung ist es nicht trivial, C ++ zu lernen (und es ist auch kein "C mit Klassen"). C ++ hat eine riesige, verschlungene und manchmal unsinnige Syntax und Grammatik sowie eine Unendlichkeit von Schlüsselwörtern und Regeln. Am Anfang ist es eine schreckliche Sprache. Als Unterrichtssprache ist es schrecklich, weil es die Schüler dazu veranlasst zu denken, dass die Mängel von C ++ in der Programmierwelt natürlich und unvermeidlich sind.
Andres F.

1
Andr: Sie bestehen auf einer falschen Zweiteilung: "~ C ++ oder All C ++". Das ist trügerisch.
Paul Nathan

1
@ Paul: fair genug. Beachten Sie jedoch Folgendes: Sogar die Syntax und Grammatik eines vereinfachten C ++ ist kompliziert, da alle Funktionen der vollständigen Sprache unterstützt werden müssen. Sie haben also bereits Kompromisse bei der Verwendung einer hässlichen Sprache eingegangen, auch wenn Sie sie in ihrer einfacheren Form unterrichten. Ich gehe davon aus, dass Sie nicht nur in C mit etwas syntatischem Zucker codieren (auch bekannt als "C mit Klassen"), weil Sie in diesem Fall besser mit einfachem C bedient werden!
Andres F.

2
@Andr: Nicht wirklich. C ++ bietet eine erhebliche syntaktische Vereinfachung gegenüber C89. Außerdem sind die Dinge für Einsteigerzwecke in all den Fällen, an die ich denken kann, sehr einfach ...
Paul Nathan,

8

Ich würde 'nein' sagen - ich hatte die Begeisterung und den Wunsch, Programmieren zu lernen, und bin gleich mit C ++ in mein Einführungsjahr am College gestartet. Zusammen mit einem Lehrer, der C ++ unterrichtete, als wäre es eine andere Sprache (Konzepte, die für ihn Sinn machten, nicht unbedingt Konzepte der Sprache oder der realen Welt), und Projekten, die jede Woche sofort auf uns geworfen wurden, stürzte ich ab und verbrannte mit die Hälfte der Klasse. Als ich überhaupt verdauen, experimentieren und anwenden konnte, was mir beigebracht wurde, hatte ich Probleme mit den Hausaufgaben des Projekts, die gleichzeitig als Tests dienten. Ich würde argumentieren, dass es mehr ein 200-Level-Kurs als 100 war.

Ich habe wirklich mein Bestes versucht. Ich habe nicht um Mitgefühl gebeten, ich wusste, dass es eine Herausforderung sein würde, aber der Lehrer würde mir nicht einmal helfen. Ich habe gerade gesagt, ich soll das Lehrbuch lesen, so wie ich es getan habe.

Ich würde argumentieren (und einige würden nicht zustimmen), dass Ruby oder Python eine viel bessere Sprache ist, um jemanden in die Welt der Programmierung einzubrechen. Saubere, übersichtliche, lesbare und klarere Syntax.


8
Jede Sprache ist eine schlechte Muttersprache, wenn sie schlecht unterrichtet wird.
David Thornley

3
@ David Thornley: Allerdings sind einige Sprachen, auch wenn sie richtig unterrichtet werden, eine schlechte Wahl als Muttersprachen. Zum Beispiel Cobol.
Andres F.

Ich bin damit einverstanden, ich bin der Meinung, dass mit einem besseren Lehrer, der darauf bedacht war, andere zu engagieren und nicht nur blitzschnell durch das Kursmaterial zu kommen, das Ergebnis möglicherweise anders ausfällt. Es rollte einfach zu schnell für mich.
Kevin

@ Andrés F .: Dem kann ich nicht widersprechen. In Kevins Bericht ging es jedoch um einen schlechten Lehrer, und ein schlechter Lehrer kann Python oder Scheme als Muttersprache vermasseln (meine beiden Nominierten für eine gute Muttersprache).
David Thornley

2
@ Chris: Ich habe in Cobol programmiert und ich bedaure dich :)
Andres F.

8

Nein.

C ++ ist als Unterrichtssprache nur unwesentlich besser als C, eine der schlechtesten Unterrichtssprachen überhaupt. Es führt zu einer Menge Komplexität im Vorfeld, einige Teile der Sprache sind zutiefst nicht intuitiv und die meiste Zeit lernen Sie mehr über C ++ als über das Programmieren im Allgemeinen.

Das soll nicht heißen, dass C ++ (oder C) schlechte Sprachen sind oder dass es sich nicht lohnt, sie zu lernen. Nur, dass es bessere Unterrichtssprachen wie Python gibt.


1
C ist eine schwierige Unterrichtssprache, aber sie gehört mit Sicherheit zu den schlechtesten. COBOL und Java sehen den Kuchen als einen der schlimmsten an, viel schlimmer als C. Das Gute an C ist, dass Sie sich mit dem inneren Metall im Voraus auseinandersetzen müssen (ohne sich mit Assembler befassen zu müssen). Menschen haben erfolgreich mit C als Hauptsprache unterrichtet. Es gibt natürlich auch andere, elegantere Optionen, wie Python oder Ruby (oder eine Sprache, die sich aus mehreren Paradigmen zusammensetzt und die OO nicht unnötigerweise in den Vordergrund rückt, auch wenn es sich um einfachste Aufgaben handelt). C ist nicht die schlechteste Lehre Entscheidungen, bei weitem nicht.
Luis.espinal

1
Etwas besser? Wie findest du das? C ++ nimmt alles Schlechte an C und baut darauf auf !
Mason Wheeler

1
@MasonWheeler: Vor allem , weil C ++ einen ehrlichen-to-Gott stellt stringDatentyp , dass Überlastungen Operatoren wie +, =und ==Dinge zu tun , dass die Schüler mehr oder weniger erwartet, im Vergleich zu , wie String - Verarbeitung Bedürfnisse in C getan werden daher „marginal“ . Ich würde es auch nicht als Unterrichtssprache empfehlen.
John Bode

7

Es gibt zwei wesentliche Arten der postsekundären Bildung: die Universität und die Handelsschule. Der Unterschied besteht darin, worauf Sie nach dem Abschluss vorbereitet sein möchten. Im Automobilbereich ist es egal, ob Sie Mechaniker oder Maschinenbauingenieur sind.

Davon abgesehen ist C ++ eine großartige Muttersprache, wenn Sie Ingenieur werden möchten, und eine miese, wenn Sie das Programmieräquivalent eines Mechanikers sein möchten.

Eine Einführung in C ++ wird viel Zeit damit verbringen, über Datentypen, Definitionen, Deklarationen, Zeiger, Speicherzuweisung usw. zu sprechen. Dies ist eine großartige Grundlage, wenn Sie mehrere Semester damit verbringen möchten, etwas Nützliches zu tun, aber wissen möchten, dass Sie die Grundlage haben, um mit jedem Grad an Komplexität fertig zu werden.

Wenn Sie andererseits in der Lage sein möchten, etwas Nützliches schneller zu erledigen, es aber nicht stört, wenn die Domäne und die Komplexität begrenzt sind, dann wird es eine Verschwendung sein, die gesamte Zeit im Voraus auf diese Konzepte auf niedrigerer Ebene zu verwenden. Es gibt viele Programmierer, die einen großartigen HTML-Formularprüfer schreiben können, aber keine Ahnung haben, wie sie mit dem Entwerfen eines Gerätetreibers umgehen sollen.


5

Sicher. Meine erste Sprache war C, aber das war wirklich nur, um unsere Klasse in C ++ zu erleichtern. Es hat mir die Arbeit mit Java erleichtert, als ich an der Universität war. C ++ hat möglicherweise eine etwas steilere Lernkurve, aber wenn es richtig unterrichtet wird, sollte es in Ordnung sein.


4

Nein, C ++ ist nicht als Muttersprache geeignet. Wie hier gezeigt, teilen viele professionelle Programmierer diese Meinung, aber dies ist auch eine Meinung, die professionelle Lehrer vertreten.

Dies ist ein Bericht des Dekans der Carnegie Mellon University über die Verwendung von C ++ für einen Einführungskurs in das Programmieren für Studienanfänger:

Standardsprachen wie C oder C ++ sind für diesen Kurs nicht geeignet, da ihre Komplexität und Mängel sowohl informelle als auch mechanisierte Argumentationstechniken behindern.

Die CMU bietet zwei Einführungskurse an, einen imperativen und einen funktionalen. SML wurde für die funktionale Programmierung ausgewählt. Ich weiß nicht, was für den Imperativkurs gewählt wurde, aber der Bericht erwähnt unter Verwendung einer Teilmenge von C.


2

Sicher. Es gibt andere Sprachen, die für Studenten im ersten Jahr möglicherweise leichter zu verstehen sind. Es gibt jedoch Möglichkeiten, wie ein Lehrer Konzepte langsam in C ++ einführen kann.


2

Auf jeden Fall kann C ++ die allererste Sprache sein. Aber es geht darum, wie gut es gelehrt wird.

Jeder sagt, die erste Sprache sollte sehr einfach zu verstehen sein. Mein Punkt ist jedoch, dass die meisten Leute mit dem Programmieren im Grundstudium beginnen. So können Sie etwas lehren, das sie erfassen können. Und mit C ++ können Sie von einer niedrigeren zu einer höheren Programmierebene wechseln.


Aber warum nicht auf einem höheren Programmierlevel anfangen ? Auf dieser Ebene lösen wir die meisten Probleme (mit Ausnahme bestimmter domänenspezifischer Probleme natürlich). Wenn sie sich dem Metall nähern müssen, können sie C ++, Assembler usw. lernen.
Andres F.

Ich stimme zu, es geht darum, wie gut es gelehrt wird!
Gary Willoughby

2

Nein auf keinen Fall.

Wenn ich meinen Willen hätte, würde ich seine Verwendung in einem akademischen Umfeld fast vollständig verbieten. Nicht aus Gründen, die den bereits gemachten zuwiderlaufen, sondern weil zu viele glauben, dass C ++ (oder dessen Variationen) die Antwort für fast jedes Problem ist, da Sie es in nahezu jeder Situation verwenden können. Es ist der Schraubenzieher der Programmierung.

Einige Leute benutzen es, um Schrauben festzuziehen, ein absolut vernünftiges Werkzeug für die Arbeit. Andere benutzen ihn wie einen Brecheisen, obwohl er oftmals effektiv ist, nicht wirklich ideal, da ein Schraubendreher, egal was dein Vater dir sagt, kein Brecheisen ist und aufgrund von Missbrauch katastrophal ausfällt, weil die Zusammensetzung des Schafts nicht absichtlich gebaut ist für die Art von Kräften würde ein Prybar begegnen. Wieder andere könnten versuchen, es als Schlag oder Meißel zu verwenden, und sie werden fast immer auf Probleme stoßen, da der Griff des Schraubendrehers nicht für die Art von auffallendem Missbrauch konstruiert wurde, der Schlag oder Meißel standhalten sollen.

Meiner Meinung nach besteht die Aufgabe eines Programmierers darin, echte Probleme generell in Automatisierung umzusetzen, die einen gewissen Grad an verbesserter Effizienz (Verringerung der Ressourcenbindung für eine Aufgabe), Geschwindigkeit (Verringerung der Zeit für die Ausführung einer Aufgabe) und Vorhersagbarkeit (Erhöhung der Wiederholbarkeit) bietet einer Aufgabe) oder Organisation (Sensibilisierung für die Beziehung zwischen Aufgaben).

Während es verständlich ist, dass jeder, der Programme ausführt, über ein allgemeines Wissen über den Betrieb von Computern auf niedriger Ebene und insbesondere über die E / A- und Speicherzuweisung von Geräten verfügen sollte, ist es auf jeden Fall ungewöhnlich, dieses Wissen in nennenswertem Umfang wirklich nutzen zu müssen, geschweige denn für die große Mehrheit der Aufgaben. Der Versuch, dies zu tun, ohne den breiteren Kontext des Problems zu verstehen, birgt ein unnötiges Risiko für eine Anstrengung.

Es ist absurd, dass eine erste Programmiersprache C / C ++ oder nahe Varianten sein sollte, da die Klasse von Problemen, die C und seine Derivate lösen, für einen willkürlich großen Prozentsatz der gegenwärtigen und zukünftigen Probleme sicherlich nicht angemessen ist (es sei denn, man muss sie retten) ein früheres Schraubenzieherprogramm), und in der Tat handelt es sich eher um eine winzige Menge kommender Probleme. Die meisten Programmierer werden trotz der zunehmenden Verbreitung kleiner mobiler, miteinander verbundener Geräte niemals in der Lage sein, Kernfunktionen des Betriebssystems oder direkte Geräteschnittstellen zu entwickeln. Die meisten werden so arbeiten und leben wie wir. Beheben und Auslaufenlassen von Code, der mehr als zwei Generationen alt ist, Implementierung auf Technologie, die bereits in die Jahre gekommen ist, oder Arbeiten am Rande der Technologie in der Killer-App (x + 1).

Als erste Sprache würde ich mir Lego NXT ansehen, eine leichte, aber sehr funktionsreiche Variante von LabView. Während Lego NXT in kommerziellen Unternehmen nicht weit verbreitet ist, wird es die grundlegende Natur dessen darstellen, was es ist, auf eine "sensorreiche" Weise zu programmieren. Ich könnte es mit einer etwas plattformneutralen Skriptsprache wie Javascript oder TCL / TK kombinieren. Beides hat relativ geringe Auswirkungen auf das, was Sie zu entdecken haben, um sehr einfache, aber effektive Aufgaben zu erledigen, mit hoher Rendite in Bezug auf die Rückkopplungsschleife und Flexibilität, um unterschiedliche Grade der Problemkomplexität einzuführen und zu lösen. Darüber hinaus bietet es den Schülern eine gute Gelegenheit, das Potenzial zu erforschen, das in der Dosenumgebung geboten wird: Sie können versuchen, in der Dunkelheit und bei Feuchtigkeit zu arbeiten.

Nachdem sie gelernt haben, die Vierzylinder-Automatik zu fahren, steigen sie in den großen manuellen Hotrod v8 ein, wenn sie wirklich interessiert und motiviert sind. Wenn Joel die Rockstar-Programmierer unter keinem Stein unter seinen Füßen finden kann, muss er möglicherweise weiter woanders suchen oder überdenken, warum er möglicherweise mehr als ein paar Schraubendreher in seinem Werkzeugkasten braucht.


1

Einige Punkte, an denen Anfänger leicht Fehler in C ++ machen, sind:

Zuweisungen machen, wo Sie = vs == testen wollten

Fehlt;

Lesbarkeit von geschweiften Klammern gegenüber beispielsweise Pascal-Anfang-Ende

Und dann gibt es alle Include-Dateien, Makros, Speicherverwaltung usw. zu verwechseln.

Daher würde ich sagen, dass C ++ nicht die beste Sprache für den Anfang ist - es besteht jedoch kein Zweifel, dass es sehr nützlich sein kann, wenn Sie es gelernt haben.

Ich würde - wie andere auch vorgeschlagen haben - C #, Java oder vielleicht sogar VB verwenden - und eine gute IDE mit Syntax-Highlight, Debugger usw., um die Wiederherstellung nach Fehlern zu vereinfachen.


1

Als ich am College war, war C ++ die Grundsprache, die während des ersten Studienjahres unterrichtet wurde. Die Theorie war, dass es einige komplexe Programmierkonzepte enthielt. Wenn Sie es also beherrschen, können Sie andere Sprachen lernen. Es diente mir gut als eine gute Grundlage.

Trotzdem war ich in meinem letzten Jahr Mitglied eines Komitees, um festzustellen, ob ich die Hauptsprache auf Java umstellen sollte oder nicht. Nach Gesprächen mit mehreren prominenten Arbeitgebern und einigen Alumni der Abteilung wurde festgestellt, dass ein Wechsel zu Java das beste Interesse der Studenten war. Die Arbeitgeber, mit denen wir gesprochen haben, wollten, dass die Leute Erfahrung in einer Sprache haben, die sie verwenden, um sie einzustellen. Ich glaube, jetzt, 10 Jahre später, verwenden sie immer noch Java als ihre Hauptsprache.

In ähnlicher Hinsicht haben wir uns bemüht, ein paar neue College-Absolventen mit wirklich guten C ++ - Kenntnissen einzustellen. Wir konnten keine finden.


1

Ich würde Ja sagen. Aber jede Sprache kann eine Muttersprache sein. Ich denke, C ++ ist gut, denn es ist zwar komplex und manchmal schwierig, aber es zeigt Ihnen, was Sie wirklich tun können (weniger Einschränkungen). Darüber hinaus verfügt es über ein objektorientiertes Design, mit dessen Hilfe Sie sich auf das Erlernen anderer Sprachen vorbereiten können.

C ++ war meine erste Sprache und ich bin froh, dass es so war. Es hat mich früh zum Nachdenken gebracht und ich bin dankbar dafür. Aber am Ende kommt es wirklich darauf an, was Sie tun möchten. Die Sprache spielt keine Rolle, denn wenn Sie mit einer Sprache gut umgehen können, werden Sie wahrscheinlich keine Probleme haben, eine andere Sprache zu lernen. Was möchten Sie tun? Spiele machen? Programm für Handys? Jeder wird Werkzeuge und Sprachen haben, die besser dafür geeignet sind.


1

C ++ ist eine Expertensprache, keine Anfängersprache ... würde ich zuerst C sagen, nicht Java oder C # oder Python ... warum? weil C Ihnen beibringt, sich um Ihr Gedächtnis und einige knifflige Begriffe wie Zeiger zu kümmern, die von allen Sprachen "verborgen" sind und dennoch überall vorhanden sind. Ich habe so viele junge Entwickler gesehen, die nicht einmal verstehen, warum manchmal Speicher freigegeben werden sollte, und glauben, dass der Garbage Collector kein kleiner Zwerg ist, der alle Coding Craps bereinigt: Sie instanziieren, sie instanziieren und boomen, es explodiert, selbst wenn sie XXXXGb haben RAM ... Aber sie verstehen nicht, warum der Müllsammler nicht einfach alles magisch säubert! Und ich habe diese Art von Entwicklern gesehen, die in C ++ (und noch verrückter in Corba) programmiert haben, und es war ein Gemetzel !!!!!!!!!! Ich würde also raten, das Programmieren in C zu lernen und dann nach Python / Java / C # zu gehen, um die Objektkonzepte und den ganzen Zucker zu finden. Wenn du das alles verstehst, gehst du zu C ++ und spürst die Kraft von C ++, aber du entdeckst auch alle seine Gefahren und warum es von niemandem benutzt werden sollte;)


1

NEIN. Es gibt so viele Dinge, die C ++ hat, dass es für Neulinge schwierig ist, sie zu verstehen. Steigen Sie nicht in die Fallacie "Alle Programmiersprachen sind gleich" ein.

Beginnen Sie mit Basic oder Pascal (ignorieren Sie das "Veraltete") und später mit C / C ++ / Java / C # / Perl. Oder wenn Sie eine Chance haben, zuerst mit Logo & Karel und dann mit Basic oder Pascal.

PD Einige Universitäten und Kollegen haben eine Programmiersprachen- und Vergleichsklasse, und es kommt vor, dass ich diese Klasse unterrichtet habe ;-)


0

Sie können eine beliebige Sprache auswählen, um die Grundlagen der Programmierung zu erlernen. Ich habe Sachen in C / C ++ gelernt. aber 7 Jahre später werden die Tools / Sprachen in meiner Schule geändert und sie bevorzugen Java / C #. Die Sprachen sind nur Werkzeuge. Was Sie brauchen, um besser zu werden, sind die Grundlagen. ZB lernen Menschen im MIT die Grundlagen des Algorithmus mit Python. zB Java kann für die Webprogrammierung gut sein. C / C ++ ist jedoch gut für Dienste und Hochleistungsanwendungen. Es hängt also von Ihren Situationen ab.


0

Wenn "geeignet" für "möglich" steht, ja. Wenn für "gut", definitiv nein.

Es ist möglich, C ++ zu mögen, sogar zu lieben, aber dafür sollten Sie mehrere Sprachen lernen und ein Jahrzehnt lang mit verrotteten Codebasen arbeiten. Machen Sie Erfahrungen mit dem "Entwickeln von nicht-trivialer Software, die tatsächlich funktioniert" - dann wird C ++ Charme haben.

Nicht am Anfang, wenn Sie jungfräulich sind, sich mit kleinen, einfachen (aber angeblich interessanten und lustigen) Problemen beschäftigen.

Ich würde mit Python beginnen, gefolgt von SICP (Schema) oder ähnlichem. Möglicherweise umgekehrt oder verschachtelt. Mit denen kannst du einfach loslegen und das Problem lösen. Anstatt das System zu bekämpfen, im tiefen Schlamm herumzulaufen und alle möglichen unlogischen Macken und ihre historischen Gründe zu lernen.

Später, wenn Sie bereits Ihren Weg aus einer Papiertüte heraus programmieren können, wechseln Sie zu Bare-Metal: Lernen Sie Montagemethoden und verschiedene Architekturen sowie möglicherweise Knuths Mix. Ich meine nicht das Speichern von Opcodes oder viele echte Dinge, nur um Speicher, Register, die ALU, Caches, Interrupts und den Lesezustand zu verstehen.

Dann können Sie mit dieser Grundlage anderen Sprachen, einschließlich C ++, ausgesetzt sein. Vielleicht eine gute Idee, zwischendurch etwas "Geschichte und Evolution der Sprachen" hinzuzufügen.


0

Ich habe mit C ++ in der Mittelschule angefangen. Ich habe ein Exemplar dieses Buches gekauft: C ++ How to Program von Deitel und Deitel . Dieses Buch ist ziemlich gut.

Ehrlich gesagt gibt es hier keine richtige oder falsche Antwort, ich persönlich fand, dass C ++ greifbar war. Ich habe es den ganzen Weg zu OOP gelernt (ich bin auf "das" gestolpert, was ich jetzt nicht verstehe, wie ich das nicht bekommen kann, aber was auch immer). Probieren Sie es aus, lassen Sie sich nicht entmutigen. Wenn Sie nicht weiterkommen, schauen Sie sich andere Sprachen an und lernen Sie immer wieder neue. Die Idee ist, dass, wenn Sie dasselbe Konzept in 2-3 verschiedenen Formen sehen, Sie sie besser verstehen werden. Wie ich bereits sagte, verwirrte mich das Konzept des Zeigers "this", aber als ich dasselbe in Python sah (stattdessen "self" genannt), ergab es für mich sofort Sinn, weil ich es in C ++ verstanden hatte. Lerne Java, wenn du es an so vielen Hochschulen unterrichten kannst. Lernen Sie Python oder Ruby, da es die Sprache Ihres Lebens ist und wenn Sie mehr Nischen- / Neuheiten wie Clojure (und all die anderen Lisps), Haskell, Scala ... entdecken können.


-1

Ich würde mit Java oder C # beginnen. Wenn Sie C ++ lernen möchten, ist es wahrscheinlich einfacher, nachdem Sie die Grundlagen erlernt haben, wie z. B. was eine Klasse ist, wie Schleifen und Gabeln (wenn, dann Anweisungen) usw. zu tun sind. Es ist viel wichtiger, das Anschauen zu lernen ein Problem oder eine mathematische Gleichung und programmieren Sie es dann, um herauszufinden, ob Sie Ihr gesamtes Gedächtnis freigegeben haben oder was auch immer.


2
Warum Java oder C #, wenn Python noch einfacher ist?
David Thornley

-3

Es scheint, als stünde hinter dieser Frage die Annahme, dass C ++ so komplex erscheint, dass ein 16-Jähriger es als erste (Computerprogrammier-) Sprache aufgreifen kann.

Wenn wir 4 oder 5 Jahre alt sind, lernen wir die meisten Konstrukte in der Muttersprache kennen, nur mit so viel Kontakt, indem wir anderen zuhören, wie sie sprechen. Es braucht ein Leben, um gute Sätze zu bilden, keine Frage.

C ++ ist sicherlich viel weniger komplex / kompliziert als zum Beispiel die meisten menschlichen Sprachen. 16-Jährige sollten es sicher abholen können. Werden sie damit großartigen Code schreiben? Ich muss warten und zuschauen.


4
Menschliche Sprachen können es sich leisten, eine komplizierte Syntax zu haben, da die Leute Sie immer noch verstehen können, wenn Sie die Grammatik oder Rechtschreibung verstehen. Nicht so bei Computersprachen.
dan04

-3

Anfänger müssen zuerst das Programmieren schätzen. Nach meiner Erfahrung in der Ausbildung einer Klasse von Anfängern schätzten sie zuerst, was sie am besten verstanden. Wie Python vs. C # schätzen sie Python, weil es sehr gut ist und keine Symbole wie C # verwendet, was bedeutet, dass es der menschlichen Sprache sehr nahe kommt und sehr englisch ist. Daher würde ich empfehlen, das Programmieren von High-Level auf Low-Level zu lernen.

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.