Als Lehrer: Auswahl einer geeigneten Programmiersprache


8

Ich bin mir nicht sicher, ob es der richtige Ort für diese Frage ist. Tut mir leid, wenn ich etwas vom Thema abweiche.

Die Auswahl einer geeigneten Sprache für den ersten Programmierkurs ist eines der wichtigsten Dinge, die jeder verwandte Lehrer / Dozent berücksichtigen sollte. vor allem, wenn die Schüler jung sind oder nur begrenzte mathematische Kenntnisse haben.

Ich unterrichte derzeit eine Gruppe hochbegeisterter junger Leute (ungefähr 16 bis 17 Jahre alt) mit mittleren Mathematikkenntnissen . Sie besuchen gerade die High School in der 10. Klasse . Ich werde für das kommende Semester anfangen, eine Programmiersprache zu unterrichten.

Sie sind eine Gruppe handverlesener Studenten in der ganzen Stadt mit einem außergewöhnlichen Maß an Kreativität und Fleiß, daher sehe ich, dass die Arbeit mit einer echten Programmiersprache für sie keine schwere Aufgabe sein würde. Die Auswahl einfacher grafischer und Drag'n'Drop-Lösungen wie Turtle Art, Scratch und Tynker wird daher nicht als Option betrachtet.

Es gibt einige Faktoren, die überprüft werden sollten, bevor Sie eine Auswahl treffen:

  • Einfachheit : Die meisten von ihnen haben wahrscheinlich noch nie eine echte Codierungsaktion erlebt.
  • Wieder Einfachheit : Eine der Hauptideen ist es, zu lehren, wie man algorithmisch denkt . Eine ausgefeilte oder kaum syntaxierte Sprache wird sie vom Weg ablenken.
  • Allgemeines : Es ist besser, die Sprache nicht für spezielle Entwicklungsfälle zu entwickeln. Nehmen Sie als Beispiele PHP und MATLAB, die jeweils für die Webentwicklung und Berechnung / Modellierung entwickelt wurden.
  • Minimum Objective Zeug : Keine erzwungene OO-Programmierung (wie Java). Oder zumindest mit der minimalen Abhängigkeit von OO-Konzepten.
  • Plattform : Es ist wichtig, Windows als unterstützte Entwicklungsumgebung zu haben, da fast alle unter Windows ausgeführt werden.
  • Einfach einzurichten : Es ist besser, die Entwicklungsumgebung auf einfache Weise einzurichten.
  • Branchenpräferenz : Kein ernstes Problem. Aber es sollte zumindest eine derzeit aktive Sprache sein, die es den Schülern ermöglicht, nahezu reale Entwicklererfahrungen zu machen.
  • Hardware-Portabilität : Es ist wichtig (aber nicht erforderlich), dass die Sprache flexibel genug ist, um für die Hardware-Programmierung verwendet zu werden. (Ich spreche nicht von Hardwarebeschreibungssprachen wie Verilog und VHDL.) Ziel ist die Programmierung für einfachere prozessorbasierte Hardware wie AVR-Mikroprozessoren oder Raspberry Pi GPIO-Schnittstelle .

ich will das wissen

  1. Gibt es noch andere Faktoren, die mir fehlen?
  2. Und welche Sprachen schlagen Sie als Auswahl vor?

2
Weitere Kriterien, die Ihnen möglicherweise fehlen, finden Sie in dieser Frage .
David Richerby

1
@ DavidRicherby Ich hatte es gesehen, bevor ich die Frage gestellt habe, und natürlich hat es sehr geholfen.
zxcmehran

Probieren Sie Lua aus.
Ankur

1
@zxcmehran Zum Thema Programmierparadigmen bin ich heute auf Wikipedia darauf gestoßen und dachte, es könnte für Ihre Frage relevant sein: Vergleich von Programmiersprachen mit mehreren Paradigmen
tehDorf

Antworten:


11

Meine Antwort? Python.

Lassen Sie mich erklären, indem Sie alle Ihre Punkte ansprechen.

  1. Einfachheit . Python-Code liest sich wie Englisch. Im Ernst, wie einfach ist print("Hello World!")
  2. Allgemeinheit . Python kann aufgrund der Vielzahl an Bibliotheken für die Webentwicklung (über Flask / Django), Datenanalyse (über NumPy / Pandas / SciPy), Spiele (über PyGame) sowie für eine Vielzahl anderer Aufgaben verwendet werden sind.
  3. Minimales objektives Zeug . Sie können OOP in Python ausführen, dies ist jedoch nicht erforderlich.
  4. Plattform . Python2.7 ist in so ziemlich jeder Linux-Distribution enthalten und es gibt viele YouTube-Videos zum Einrichten unter Windows / Mac. Wenn überhaupt, können Sie den von Repl.It angebotenen Online-Interpreter verwenden.
  5. Branchenpräferenz . Korrigieren Sie mich, wenn ich falsch liege, aber Python wurde durchweg als eine der beliebtesten Sprachen eingestuft.

Nach meiner Erfahrung im Unterrichten ist es äußerst wichtig sicherzustellen, dass die Syntax so einfach wie möglich zu schreiben und zu verstehen ist. Für einen neuen Programmierer kann es ziemlich entmutigend sein, wenn er nur Code schreibt, um eine Fehlermeldung anzuzeigen (insbesondere, wenn er nicht in der Lage ist, eine Fehlermeldung zu lesen und zu debuggen).

Nebenbei bemerkt, PythonTutor wird sehr hilfreich sein, um einige wichtige Konzepte der Informatik / Programmierung zu erklären.


Danke fürs teilen. Ich stimme Ihnen zu und denke, dass Python eine der besten Möglichkeiten ist.
zxcmehran

1
In Bezug auf PythonTutor ist JetBrains PyCharm Edu auch ein gutes Werkzeug, um mit Python zu beginnen.
zxcmehran

Ich arbeite in der Erforschung von Programmiersprachen und glaube, dass gute universelle Programmiersprachen statisch typisiert werden sollten, aber ich denke auch, dass Python eine großartige Lernsprache ist, insbesondere für junge Studenten. Es gibt viele Faktoren, auf die andere hingewiesen haben, aber lassen Sie mich auch Folgendes sagen: Nach meiner Erfahrung muss ein Anfänger sehen, wie sein Programm abstürzt und mit eigenen Augen brennt. Wenn der große schlechte Compiler immer wieder sagt "Sie können dies nicht tun, weil es abstürzt und brennt", ist das wenig hilfreich. Ein bisschen so, als würde ich meinen Kindern sagen: "Fass den Ofen nicht an, es ist heiß."
Andrej Bauer

1
Und unterschätzen Sie niemals die Tatsache, dass in Python das Einrücken von Blöcken die Programmstruktur selbstverständlich macht. Das bloße Eingeben {und }/ beginund endAbgrenzen von Codeblöcken ist eine erhebliche kognitive Belastung für Anfänger. Wenn Sie anders denken, wechseln Sie zum Schema und sehen Sie, was Sie über die Klammern denken.
Andrej Bauer

Sie können auch in Python auf dem Himbeer-Pi programmieren, was sehr schön ist.
Heidekraut

10

Hintergrund

Diese Frage wirft alle 5 Jahre in unserer Abteilung ihren hässlichen Kopf auf. Wir hatten Miranda und Pascal vor langer Zeit, dann hatten wir Haskell, jetzt haben wir C, weil die EE-Abteilung beschlossen hat, uns ihre Schüler wie zuvor zu schicken, aber "etwas Praktisches wie C" verlangte und unsere rückgratlose Führung nichts Besseres zu tun hatte, als zu befolgen.

Warum nicht einer der oben empfohlenen?

Ich habe einiges davon unterrichtet und gesehen, wie Schüler in fast 20 Jahren daraus hervorgegangen sind. Das einzige, was auffiel, war, dass die Sprache kaum eine Rolle spielt, solange sie es Ihnen ermöglicht, grundlegende Konzepte der Berechnung mit ausreichender Leichtigkeit auszudrücken, und dass Sie gute Fehlermeldungen erhalten, wenn Sie nicht das Richtige tun, vorzugsweise von der Compiler. Hier versagt Python. Typen sind wichtig! Hier versagt C: Typen sind wichtig und Polymorphismus ist wichtig! (Und nein, es ist keine Lösung, alles vom Typ void zu machen. Sie ziehen lediglich in das Python-Land.) Hier schlägt Java fehl: Programme passen nicht auf Folien - es gibt einfach zu viel Kesselplatte und Ausführlichkeit.

Also persönlich würde ich mit keiner der obigen Antworten gehen. Ich würde mit Haskell gehen. Es ist wunderschön auf die Mathematik abgestimmt. Es ist prägnanter als alle anderen. Sie können sich auf das Wesentliche der Berechnung konzentrieren. Und ghc tendiert dazu, besseren und schnelleren Code zu produzieren als C-Compiler für die schwachen Optimierungsversuche, die ich jedes Mal sehe, wenn ich Schüler C verwenden lasse.

Aber wirklich..

Nach meiner Erfahrung ist das Wichtigste jedoch, dass der Lehrer die Sprache tatsächlich besser kennt als nur ein paar Online-Kurse. Erste Sprachen sind genau das, erste Sprachen. Wenn Ihre Schüler es ernst meinen, werden sie auf dem Weg noch viel mehr lernen. Konzentrieren Sie sich eher auf Konzepte als auf Syntax.


7

Diese Frage hat meiner Meinung nach eine hohe Meinung. Es gibt nichts, was einen heiligen Krieg auslösen könnte, wie "Welche Sprache ist die beste für X". Trotzdem werde ich beißen.

  1. Gibt es noch andere Faktoren, die mir fehlen?

Zunächst würde ich Ihnen empfehlen, zu lesen, was Dijkstra über das Unterrichten gesagt hat . Es ist alt, aber immer noch relevant - möglicherweise heute viel, viel relevanter als früher.

Zweitens würde ich auch empfehlen, einen Blog-Beitrag von Joel Spolsky zum gleichen Thema zu lesen .

Drittens und weniger wichtig wären meine eigenen Kriterien für eine Muttersprache:

  1. Jeder Laufzeitfehler muss mit einer eindeutigen Fehlermeldung gemeldet werden.
  2. Es sollte eingegeben werden.
  3. Es gibt keine einzige Programmiersprache, mit der Sie alle Programmieraspekte verstehen können. Um ein echter Programmierer zu werden, muss man viele Sprachen lernen, besonders radikal andere.

Punkt 1 ist für Anfänger sehr, sehr nützlich. Die meisten Sprachen erfüllen dies, mit Ausnahme von C und C ++. Während ich denke, dass C eine unverzichtbare Sprache für jeden Programmierer ist (siehe Punkt 3), denke ich, dass es für einen Anfänger unnötig hart ist. Die Müllabfuhr ist so ziemlich eine Voraussetzung für Punkt 1.

Punkt 2 ist am umstrittensten. Während ich glaube, dass man auch lernen sollte, in einer untypisierten Sprache zu arbeiten (wieder Punkt 3), denke ich, dass es vorteilhafter ist, mit Typen zu beginnen. Selbst in einer untypisierten Umgebung denken Programmierer häufig darüber nach, welche Art von Daten an eine Unterroutine übergeben werden sollen. Außerdem ist es hilfreich, Fehler früher als zur Laufzeit zu erkennen.

Punkt 2 schließt viele Sprachen aus. Beachten Sie jedoch, dass Python nicht ausgeschlossen ist: Während Python untypisiert ist, gibt es das wunderbare mypy- Projekt, mit dem man einen typisierten Python verwenden kann. Darüber hinaus verfügt Perl6 über eine optionale (schrittweise) Eingabe, sodass diese weiterhin vorhanden ist. Typescript fügt JavaScript auch Typen hinzu. Auch wenn Lisp und Scheme ausgeschlossen sind, stehen viele typisierte funktionale Programmiersprachen zur Auswahl (Ocaml, Haskell, F #, ...).

Punkt 3 ist ebenfalls wichtig. Man muss viele Dinge lernen, um ein guter Programmierer zu sein. Von Sachen auf niedriger Ebene (Zeiger, C) bis zur höchsten Ebene (Rekursion, Verschlüsse, parametrischer Polymorphismus / Generika, ...), verschiedene Paradigmen (Imperativ, Funktional, Logik, ...). Dies kann natürlich nicht in einem einzigen Kurs gelehrt werden. Als ersten Kurs sollten Sie den Weg zur vollen Straße ebnen.


1

Ich würde mit der Python-Antwort gehen, aber ich möchte auch eine Alternative empfehlen: C.

Meine erste Programmiersprache war C und als ich sie lernte, hat es mir wirklich Spaß gemacht. Der Lehrer (und einige Mitschüler) hätten Java als erste Programmiersprache verwendet, aber es wurde C verwendet. Der Lehrer zeigte einige Python-Beispiele, um die Vorteile einer moderneren Programmiersprache aufzuzeigen. Wie auch immer, zurück zum Thema:

  • Einfachheit Die C-Syntax ist ziemlich klein, aber von Zeit zu Zeit etwas seltsam. Sie sind nicht gezwungen, den Vodoo-Ansatz zu wählen, aber Sie könnten.

  • Wiederum Einfachheit Aufgrund der ersten Punkte können Algorithmen ziemlich kompakt und verständlich implementiert werden. Denken Sie an Fibonacci oder an die Knight's Tour.

  • Allgemeines Mit C können Sie implementieren, was Sie wollen. Sie können auch einige Subsysteme wie Skriptsprachen (Lua) verwenden.

  • Minimum Objective Stuff C spricht hier für sich. Sie müssen über gute C-Kenntnisse verfügen, um OO-Inhalte zu implementieren.

  • Plattform Jede wichtige Plattform unterstützt die Sprache, nehmen Sie einen Compiler Ihrer Wahl und beginnen Sie mit dem Codieren.

  • Einfach einzurichten C benötigt keine IDE mit vielen Schaltflächen und einer fetten Toolchain. Nehmen Sie einfach eine make-Datei (oder ein Skript) und kombinieren Sie Ihren Code mit einigen Befehlen. Sie können eine IDE (Codeblocks, ...) verwenden, wenn Sie möchten.

  • Branchenpräferenz Linux, Windows, ...

  • Hardware-Portabilität Es funktioniert gut auf AVR-Mikrocontrollern oder Arduino, das auch mit einfachem altem C programmiert werden kann.


Wie wäre es als Alternative mit der Entwicklung auf einer erschwinglichen Plattform wie Arduino (es könnte bessere Alternativen geben). Sie können ihnen alle algorithmischen Dinge mit einfachen Standarddrucken zeigen oder Hardware einsetzen. Es kann von Vorteil sein, wenn der resultierende Code nicht nur Text (oder Bild oder GUI oder ähnliches ...) druckt, sondern auch eine LED blinken lässt oder so. In meiner Firma gibt es manchmal Schülerkurse, in denen sie einige Dinge auf einem ziemlich einfachen Arduino-Board codieren, und wir erhalten gute Rückmeldungen von den Teilnehmern.


Ich denke, Sie stellen die richtigen Fragen und ich wünsche Ihnen alles Gute für den Unterricht Ihrer Schüler.


Der einzige negative Punkt von C und C ++ ist, dass der Codierer einige fortgeschrittene Syntaxstrukturen (wie Zeiger) verstehen muss, um etwas erstellen zu können, das wie eine echte Aktion erscheint. In der C-Familie können Sie keine ausgefallenen GUIs oder Network Magic Power erreichen, ohne die schwierigen Teile der Sprache zu verstehen. Als Student wäre es langweilig, wenn alle Bemühungen während eines Semesters nur dazu führen würden, dass eine Logik in einem schwarzen Konsolenfenster mit einer seltsamen Schrift ausgeführt wird. Daher denke ich, dass die Verwendung einer Sprache mit einem höheren Niveau für sie interessanter sein und sie ermutigen kann, den Weg der Codierung fortzusetzen.
zxcmehran

1
@zxcmehran Richtig, deshalb habe ich so etwas wie Arduino als alternativen Ansatz vorgeschlagen.
Maxik

C ist einfach wie "Verwalten Sie Ihr Gedächtnis selbst" ist einfach. Viel undefiniertes Verhalten ist ein Problem.
Djechlin

1

Ich würde mich für Swift entscheiden und Swift Playground benutzen. Vielleicht möchten Sie überprüfen, wie viele Personen entweder einen Mac oder ein iPad haben. Unter den Studenten sind es an einigen Stellen 90%. Es ist auch online unter http://iswift.org/playground verfügbar , sodass Sie nur einen Browser benötigen. Sie können es auf Ihrem Telefon verwenden, wenn Sie keinen Computer haben.

Swift ist eine moderne Sprache, eine sichere Sprache und eine Sprache, die Ihnen einen Job verschafft, wenn Sie sie beherrschen. (Jeder neue Code, den Apple schreibt, ist in Swift geschrieben.)


0

Edit: Sorry, darüber - ich habe deinen Standpunkt zur Plattform falsch verstanden. Ich dachte im Grunde, Sie sagten, dass es nur unter Windows laufen musste, aber ich sehe jetzt, dass es nur die Mehrheit Ihrer Benutzer ist, die Windows verwenden.

Microsoft hat Unterstützung für Linux und Mac sowie für VS Code und Visual Studio für Mac und .NET Core entwickelt. Ich denke, dies ist immer noch eine gültige Antwort, wenn auch nicht so stark.


Ich würde vorschlagen, dass Sie sich mit C #, dem .NET Framework und der Visual Studio IDE befassen - sie decken so ziemlich alle Ihre 7-8 Punkte ab. (abhängig davon, wie Sie die ersten beiden zählen; D)

  • Einfachheit : Die Syntax ist ziemlich einfach zu erlernen, und im Internet finden Sie eine große Menge an Informationen für Anfänger-Tutorials.
  • Wiederum Einfachheit : C # ist eine stark typisierte Sprache, mit deren Hilfe Fehler hervorgehoben werden können, bevor die Anwendung überhaupt ausgeführt wird. Visual Studio ist wohl eine der besten IDEs, die Sie mit hervorragender Syntaxhervorhebung, Intellisense- und Debugging-Unterstützung erhalten können.
  • Allgemeines : Obwohl es möglicherweise nicht die beste Wahl ist, habe ich es persönlich für eine Vielzahl von Anwendungen verwendet - von Websites und Desktop-Anwendungen bis hin zu Robotergeräten.
  • Minimale Zielsetzung : Objektorientierte Programmierung bearbeiten ist ein Programmierstil, der sich auf Kapselung, Abstraktion, Vererbung und Polymorphismus konzentriert. C # verfügt über Funktionen, die das Schreiben von OO-Code erleichtern, die jedoch nicht erforderlich sind. Sie können ein C # -Programm prozedural schreiben.
  • Plattform : Bearbeiten Der .NET Core ist die plattformübergreifende Version von .NET Framework. Es funktioniert unter Mac, Linux und Windows.
  • Einfach einzurichten : Ich glaube nicht, dass Sie eine einfachere Sprache und IDE finden können, um unter Windows eingerichtet zu werden. Bearbeiten Wie für Mac und Linux habe ich keine Erfahrung damit, aber es gibt VS Code (Win / Mac / Linux) und Visual Studio für Mac (nur Mac). Ich würde annehmen, dass dies auch relativ einfach wäre.
  • Branchenpräferenz : C # ist definitiv eine professionelle Sprache. Sie können sich jedoch selbst davon überzeugen, indem Sie nach Jobs in Ihrer Nähe suchen, basierend auf den Sprachen, die Sie in Betracht ziehen. Mit Dice habe ich in allen offenen Stellenangeboten ungefähr die gleichen Ergebnisse für C # (6.548) und Python (6.639) erzielt, aber ich weiß nicht, ob Dice auf die eine oder andere Weise eine Tendenz aufweist oder ob es signifikante regionale Unterschiede gibt.
  • Hardware-Portabilität : Vielleicht ein halber Punkt hier - ich glaube, es gibt nicht viel Unterstützung für die Programmierung von Mikrocontrollern mit C #, außer ein paar speziellen .NET-Boards wie dem Netduino , aber der Raspberry Pi wird unterstützt .

Als zusätzlichen Bonus hat Microsoft ein Programm namens Imagine (früher DreamSpark), in dem Lehrer und Schüler der High School und des Colleges eine Menge kostenloser Software erhalten. Sie haben auch einige Wettbewerbe für die Studenten.


Nur für Windows-Leute. Auch ganz OOP
Eugene

@Eugene Mein Fehler, ich habe den Punkt über die Plattform falsch verstanden, daher betraf meine Antwort definitiv nur Windows. Ich habe es aktualisiert, um Linux und Mac anzusprechen. Was "vollständig OOP" betrifft, habe ich dies auch in meiner aktualisierten Antwort unter "Minimum Objective stuff" angesprochen. Bitte sag mir was du denkst.
Dorf

Obwohl C # eine ausgereifte Sprache ist, war sie nicht auf meiner Liste. da ich davon ausgegangen bin, dass es einen begrenzten Umfang auf Plattform und Hardware hat. Ich schätze dich und bin wieder auf der Liste. Danke für die Links, ich werde sie überprüfen.
zxcmehran

-1

Schauen Sie sich Lazarus an:

http://www.lazarus-ide.org

Lazarus ist eine Programmierumgebung, die auf Free Pascal Compiler (FPC) basiert. Es läuft sehr reibungslos unter Windows und ist auch für andere wichtige Plattformen verfügbar. FPC unterstützt eine modernisierte Version von Pascal, die als Object Pascal bezeichnet wird.

Object Pascal ist eine Programmiersprache mit mehreren Paradigmen. Sie können Code in Standard-Pascal schreiben und dann bei Bedarf OO-Funktionen verwenden.

Mit Lazarus / FPC können reale Anwendungen entwickelt werden. Sie sind beide ziemlich ausgereift, aber Sie können Delphi auch als kommerzielle Alternative verwenden.

FPC kann Ihre Programme auf Geräte wie Raspberry Pi oder Android kompilieren.

Außerdem ist die Zukunft von Pascal vielversprechend. Die Programmiersprache Oberon wird schließlich die produktivste Art der Softwareentwicklung sein:

ht tp: //www.projectoberon.com

Hoffentlich werden die in Oberon zu entwickelnden Werkzeuge mit der Zeit reifen. Es gibt bereits einen coolen Compiler für das Win64-Ziel:

https://github.com/congdm/AyaCompiler


In der Frage wird als Kriterium erwähnt: "Branchenpräferenz: Kein ernstes Problem. Aber es sollte zumindest eine derzeit aktive Sprache sein, die es den Schülern ermöglicht, nahezu reale Entwicklererfahrungen zu machen." Es scheint nicht so, dass Lazarus / Pascal so gut zu diesem passt. Es wäre schön, in Ihrer Antwort zu dokumentieren, in welchen Kriterien Lazarus gut abschneidet und in welchen nicht.
DW

en.wikipedia.org/wiki/… <br/> wiki.freepascal.org/Lazarus_Application_Gallery <br/> delphi.wikia.com/wiki/… <br/> jonlennartaasenden.wordpress.com/2014/11/06/… <br/> <br/> Als Lazarus den Meilenstein von 1,0 erreichte, stieß er auf großes Interesse. Die Popularität hat seitdem nicht abgenommen. <br/> Delphi / Lazarus ist eines der beliebtesten Tools für die Entwicklung von Desktop-Anwendungen. Frameworks zur Verwendung von FPC in Server- und Mobilanwendungen werden ebenfalls entwickelt.
srcstorm
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.