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
- Gibt es noch andere Faktoren, die mir fehlen?
- Und welche Sprachen schlagen Sie als Auswahl vor?
quelle
Antworten:
Meine Antwort? Python.
Lassen Sie mich erklären, indem Sie alle Ihre Punkte ansprechen.
print("Hello World!")
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.
quelle
{
und}
/begin
undend
Abgrenzen 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.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.
quelle
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.
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:
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.
quelle
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.
quelle
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.)
quelle
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)
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.
quelle
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
quelle