Frage

Ich werde einen Kurs über die Grundlagen der Programmierung im nächsten Herbst, Informatikkurs im ersten Jahr, unterrichten. Was sind die Vor- und Nachteile von Unterrichtszeigern in einem solchen Kurs? (Meine Position: Sie sollten unterrichtet werden).

Bearbeiten: Mein Problem mit dem Argument "Cater Your Publication" ist, dass wir in den ersten Jahren an der Universität (Profs) nicht wissen, ob Studenten Wissenschaftler sein möchten oder nicht ... wir wünschen, wir wüssten, aber wir müssen zuschlagen Ein Gleichgewicht zwischen denen, die in der Schule bleiben (4 Jahre, macht kein Wissenschaftler) und denen, die Ingenieure sein werden.

Endgültige Entscheidung: Zumindest Referenzen, aber möglicherweise Zeiger ohne Zeigerarithmetik.

War es hilfreich?

Lösung

Zumindest sollten Sie Referenzen oder ein gleichwertiges Konzept unterrichten. Ich denke, Sie sollten sich wahrscheinlich Dinge wie Zeiger -Arithmetik, C -Arrays und Saiten leicht machen, aber die Indirektion ist ein sehr wichtiges Konzept in der Informatik, und die Schüler sollten darauf vorgestellt werden.

Andere Tipps

Ja.

Zeiger untermauern eine große Anzahl von Konzepten in anderen Sprachen auf höherer Ebene, und ich bin fest über die Meinung alle.

Sobald Sie ein wenig darüber verstanden haben, wie das Gedächtnis zugewiesen wird und wie es mit Zeigern angesprochen und manipuliert wird, wird es einfacher, viele andere Konstrukte zu erklären. Zum Beispiel a erklären a NullPointerException In Java oder sogar das Konzept der Referenzen in solchen Sprachen ist das Spiel des Kindes, wenn Sie jemanden haben, der Zeiger in C versteht (und noch besser, wenn sie auch Referenzen in C ++ haben).

Lehren Sie sie absolut. Das Verständnis der Indirektion ist für die Programmierung wesentlich, sei es mit Zeigern, Referenzen, dynamischer Bindung oder einer beliebigen Anzahl anderer Dinge. Beginnen Sie jetzt offensichtlich nicht mit ihnen, aber das Verständnis der Indirektion ist mindestens so wichtig wie das Verständnis von Kontrollflussideen.

Die Betrügerin ist natürlich, dass einige Leute es einfach nicht bekommen und schlecht abschneiden oder aussteigen. Wenn dies ein Kurs für Leute ist, die CS -Majors sein wollen, dann schwitzen Sie nicht, weil Sie ihnen nur den Anreiz geben, die Majors früher als später zu wechseln. Wenn es mehr oder ein allgemeiner ED -Kurs für Menschen ist, die sich für Programme interessieren, sollten sie wahrscheinlich noch vorgestellt, aber nicht hart oder schwer bewertet werden.

In meinem ersten Jahr als CS -Student belegte ich im Herbst einen Java -Kurs, der das allgemeine Intro war. Der Professor unterrichtete keine direkten Zeiger, aber er lehrte das Konzept der Referenzen und warum Sie Objekte ändern können und nicht, wenn der Grundelemente, wenn beide in einem Argument übergeben werden.

Während meines 2. Semesters nahm ich den nächsten Kurs in der Serie, in der es um C war, und diese Klasse stützte sich stark auf Zeiger.

Für ein Intro in die Programmierklasse würde ich sagen, dass ich nur Referenzen erwähnen würde, aber nicht direkt Zeiger.

Ich denke, dass ein Kurs "Grundlagen des Programmierens" zumindest die grundlegende Prozessorarchitektur und die Versammlungssprache berühren sollte, und wenn dies der Fall ist, können Sie nicht wirklich einen Fall für die Diskussion von Zeigern machen. Wenn Sie nur höhere Sprachen auf höherer Ebene unterrichten, würden Zeiger wohl das Publikum verwirren.

Profis: solides Verständnis der Art und Weise, wie das Gedächtnis von der Maschine verwendet wird, der Unterschied zwischen (und den Fallstricken von) Zeiger auf Daten über den Heap vs. Zeiger auf Daten zum Stapel, die Übergabe von Methoden nach Adresse usw.

Nachteile: Komplex für ein Publikum, das noch nicht kompetent ist (oder nicht genug Zeit hatte, um die Konzepte der Computerarchitektur zu assimilieren), einschließlich des Stapel, was Register, Konventionen usw.

Also zusammenfassen, Es hängt sehr von Ihrem Publikum und von der Sprache ab, die Sie angehen werden (Zeiger werden im Kontext von Lisp oder Java bedeutungslos sein) sowie darüber, wie tief Sie bereit sind, in Richtung des Haufens zu gehen, was Stapel ist, wie Scope in Stack übersetzt wird (dh warum niemals zurückkommt, Zeiger auf eine lokale Variable) usw.

Als ich Zeiger zu einer Ingenieurklasse unterrichtete, stellte ich letztendlich einen Debugger für ein einfaches "Hello World" -Programm ein und zeigte den Schülern den tatsächlichen Maschinencode, Registerwerte und entsprechende Speichermüllhalde mit der Stapelmanipulation und dem Parameterübergang usw.. Aber sie waren bereit dafür. Würde Ihr Publikum für eine solche Drill-Down-Expedition empfänglich sein, um ein solides Verständnis dafür zu gewährleisten, was hinter den Kulissen vor sich geht, und würde es tun Sie bereit sein, zu solchen Längen zu gehen? :)

Ich denke, du solltest es nicht unterrichten Erste. Aber später, sobald grundlegende Programmkonzepte erworben werden.

Ein gutes Beispiel ist das letzte StrouSrup -Buch: Programmierung - Prinzipien und Praxis mit C ++ Wo er lehrt, wie man einen Parser, I/O (Streams) Nutzung und GUI -Nutzung macht, bevor er überhaupt über Zeiger spricht!

Ich denke, es wird eine gute Referenz für den Unterricht sein, da es natürlicher ist, zu verstehen, wie wir Ideen erstellen, anstatt wie viel Einschränkungen (zum Beispiel Speichermanagement) wir gleichzeitig bewältigen müssen, um eine Software zum Laufen zu bringen. Ich empfehle Ihnen dieses Buch wirklich, um eine neue Perspektive über das Unterrichten von Grundlagen der Programmierung zu haben.

Es hängt wirklich vom Ziel Ihres Kurses ab - das Unterrichten von Programmierungen und Unterrichten von Informatik sind zwei getrennte Ziele, und obwohl sie sich nicht gegenseitig ausschließen, lehren Einführungskurse im Allgemeinen nicht beide gut. Hier ist ein Beispiel für den Unterschied: Sagen wir, wir möchten lernen, wie man eine Liste sortiert. Ein Programmierkurs in C ++ würde Ihnen beibringen, die Syntax einer std :: Sortierfunktionsvorlage zu verwenden, und Hausaufgaben schreiben möglicherweise mehrere Vergleichsfunktionen. Ein Informatikkurs würde Ihnen erklären, wie eine Zusammenführungsart ist, wie der Algorithmus im Pseudo-Code aussieht, und seine Leistung/Raummerkmale und die Hausaufgaben würden die Sortierfunktion selbst schreiben.

Wenn Sie also einleitende Programme unterrichten, sollten Sie Ihren Schülern die Zeiger beibringen.

Wenn Sie Informatik unterrichten, müssen Zeiger auf einer Einführungsebene nicht verstehen.

Jeder, der sich einen guten Programmierer nennt, muss wissen, wie Zeiger funktionieren. Ein guter Programmierer impliziert, dass sie nicht nur eine einzige Programmiersprache kennen, sondern dass sie wissen, wie Programmiersprachen im Allgemeinen funktionieren, sodass sie sich an Programmiersprachen anpassen können, die sie zuvor noch nicht gesehen haben.

Dies bedeutet jedoch nicht, dass eine Grundlagen des Programmierkurses Zeiger unterrichten sollten.

  • Wenn Ihr Ziel es ist, diesen Menschen eine vollständige, gut abgerundete Vertrautheit mit den Programmiersprachen im Allgemeinen zu geben, dann müssen Ja -Zeiger Teil davon sein.
  • Wenn Sie sie zunächst eine Programmiersprache verwenden möchten, um sie in die Programmierung einzusetzen, um in den folgenden Kursen andere Sprachen zu behandeln, und Zeiger für diese Sprache nicht relevant sind, müssen noch nicht über Hinweise sprechen.

Ich denke, es gibt viel zu sagen, indem sie nur in einer Sprache einteilen, anstatt zu versuchen, jeden Sprachstil auf einmal abzudecken.

Mein erster Einführungskurs verwendete Haskell. Erst als ein nachfolgender Kurs mit C vorgestellt wurde (ich war bereits ein guter Programmierer C und C ++, als ich den Kurs nahm; diese Probanden waren obligatorisch).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top