Python jako pierwszy język


Original: http://mcsp.wartburg.edu/zelle/python/python-first.htmlAbstrakt

Derzeit gibt es wenig Konsens darüber, welche Programmiersprache ist am besten geeignet für einführende Informatik-Klassen. Die meisten Schulen verwenden eine traditionelle System Programmiersprache wie C, C + +, Java oder Ada in CS1 und CS2. Allerdings sind Skriptsprachen wie Tcl, Perl und Python immer beliebter Software-Entwicklungswerkzeugen. Dieser Artikel beschreibt die Vorteile der Verwendung einer Skriptsprache als erste Sprache in der Informatik Lehrplan. Skriptsprachen sind einfacher, sicherer und flexibler als Systemsprachen. Python in allem erweist sich als nahezu ideale Kandidat für eine erste Programmiersprache.

1 Einleitung
Noch vor fünf Jahren vereinbart praktisch jeder, dass Pascal die richtige Sprache zur Darstellung Konzepte in der Informatik war. Angehende Informatiker begann zu lernen Programm in Pascal und oberen Ebene Studenten verwendet Lehrbücher über Pascal basiert. Dann kam der objekt-orientierten Revolution. Heute, über das einzige Konsens über Sprachen in der Informatik Lehrplan ist, dass Pascal passe ist. Die Abkehr von Pascal hat in den letzten Jahren ausgesprochen worden, aber keine einzige Sprache ist als klarer Nachfolger aufgetaucht. Eine aktuelle Umfrage von CSAB akkreditierten Programmen zeigten die beliebtesten erste Sprache, C + +, wobei nur 22% der antwortenden Institutionen (McCauley & Manaris, 1998) gelehrt. Zusätzlich zu der Verwirrung ist der kometenhafte Aufstieg von Java in Industrie und Wissenschaft.

Einige haben vorgeschlagen, dass die “ Sprachkämpfe” sind vorbei und die (nur) angemessene Auswahl stehen:. C, C + +, Java, Ada (und vielleicht Eiffel) ([Fußnote] Dies schien der Konsens der Podiumsdiskussion ` `Mögliche Futures für CS2” at SIGCSE ’98.) Ich glaube, erklären die Kriege vorbei ist die Niederlage einzugestehen zu früh. Eine Zeit, gibt es wenig Konsens über eine einzige erste Sprache scheint der richtige Zeitpunkt, um wieder auf erste Prinzipien und bedenken, was eine erste Sprache sein sollte. Entlang des Weges können wir feststellen, dass einige der besten Kandidaten noch gar nicht berücksichtigt.

In diesem Papier, argumentiere ich, dass sehr hohem Niveau Skriptsprachen wie Python, Perl, Tcl, Rexx, und Visual Basic sind bessere Kandidaten für eine erste Sprache. Eine insbesondere, Python, scheint fast ideal.
2 Kriterien für eine erste Sprache
2,1 Annahmen über CS1 und CS2
Die Erkenntnis, dass es erhebliche Meinungsverschiedenheiten darüber, welche Material sollte in CS1 und CS2 gelehrt werden, muss jeder intelligente Diskussion über welchen Sprachen am besten geeignet sind mit den grundlegenden Annahmen über die Kurse selbst beginnen. Die folgenden Annahmen widerspiegeln eine ziemlich gemeinsamen Ansatz, aber ich verstehe, dass sie nicht ganz unumstritten.

Erstens ist die CS1/CS2 Reihenfolge grundlegend über Computer-Programmierung. Während diese Kurse sicherlich ansprechen breiteren Themen der Informatik Theorie und Praxis, ist der Kern der Informatik und dieser ersten Klassen noch Problemlösungs-, Design und Programmierung. Programmieren lernen ist sehr viel ein Hands-on-Aktivität, und diese Klassen beinhalten Design und Programmierung Projekte in verschiedenen Größen entweder in offenen oder geschlossenen Labor-Einstellungen.

Zweitens ist die Programmiersprache per se nicht im Fokus dieser Klassen. Während unsere Schüler oft auf dieser Klassen als “ die C + +-Klasse” oder “ die Java-Klasse,” die Kurse sind so konzipiert, um eine Einführung in das Gebiet der Informatik bieten. Die Sprache, die verwendet wird, ist wirklich eine untergeordnete Rolle. Die Tendenz, der CS1 als eine Einführung in eine bestimmte Sprache denken, ist ein Symptom der Komplexität der Sprachen, die häufig verwendet werden.

Drittens, diese Klassen Schüler einführen, um den primären Paradigmen für Design und Problemlösung heute im Einsatz, nämlich strukturierte und objektorientierte Methoden in einer imperativen (Erklärung orientiert) Sprache implementiert. Zwar gibt es starke Befürworter für andere Ansätze (z. B. mit einer funktionalen Sprache in der ersten Klasse) sind, neigen die überwiegende Mehrheit der Einführungskurse zu den eher traditionellen Weg zu folgen.

Viertens, und vielleicht umstrittensten, gehe ich davon aus, dass das Ziel der CS1 zu engagieren und zu erziehen Informatik Majors und vielleicht rekrutieren neue ist. Angesichts der aktuellen Nachfrage nach unseren Absolventen und die Notwendigkeit für alle gebildeten Menschen die Informationstechnologie zu verstehen, ist es ein großer Bärendienst für CS1 als “ weedout” Klasse betrachten. Die Programmierung ist hart, aber wir sollten uns bemühen, es nicht schwieriger, als es sein muss.
2,2 Implikationen für Programming Language Wahl
Wenn die Einführungskurse sind wirklich über Informatik, anstatt die Details einer bestimmten Sprache, folgt daraus, dass die gewählte Sprache sollte eine einfache Syntax und Semantik haben. Wir haben alle die Frustration eines CS1 natürlich festgefahren wird in der Diskussion über Syntax-Fehler und Sprache Konstrukte erlebt. Soweit möglich, sollten wir eine Sprache auswählen, die diese Komplexität minimiert, so dass mehr Zeit auf die Entwicklung von Design-Fähigkeiten ausgegeben werden können. Eine logische Folge dieser Philosophie ist, dass einfache Probleme einfach gelöst werden sollte. Eine Sprache, die signifikante notational Overhead benötigt noch triviale Probleme zu lösen zwingt die Sprache eher als die Techniken der Problemlösung zum Gegenstand der Studie sein.

Das Hands-on, experimentelle Art der Einführungskurse hat auch Auswirkungen auf die Wahl der Sprache. Eine Sprache, die Designs mit minimalem Overhead ausgedrückt werden kann fördert Experimentierfreude und Rewriting. Daher sollte die Sprache sein auf sehr hohem Niveau und flexibel, so dass Studenten schnell und einfach experimentieren mit alternativen Designs. Dies erleichtert darüber nachzudenken Algorithmus und Design-Fragen eher als Low-Level-Details der Implementierung. Soweit möglich, sollte die Sprache auch Sicherheit für Experimente. Wir sollten begünstigen Sprachen, die gegen mysteriöse Abstürze von Zeiger oder Array-Grenzen Fehlern zu schützen. Schüler auf dieser Stufe sind nur Lerntechniken für das Aufspüren und Beheben von Fehlern, die Sprache sollte ihnen helfen, zu lernen, nicht vereiteln.

Es ist auch wichtig, dass die sprachliche Unterstützung moderner Ansätze zu entwickeln mit Abstraktion, Kapselung und objektorientierte Techniken. Während Objekt-basierte Designs in einer beliebigen Sprache implementiert werden kann, damit in einer Sprache, die Objekte unterstützt, ist viel intuitiver und einfacher. Auch ermöglicht dies der Kurs auf höherer Ebene konzeptionelle Fragen, anstatt Details der Implementierung konzentrieren.

Schließlich gibt es praktische Erwägungen bei der Auswahl einer Sprache. Es ist höchst wünschenswert, dass die Sprache weit verbreitet auf verschiedenen Plattformen sein. Ebenso ist eine Sprache, die von außerhalb der Hochschule Praktiker eingesetzt wird bevorzugt, eine Sprache, die für “ lehrt nur, vorausgesetzt” entspricht es den anderen Kriterien oben diskutiert. Unterrichtssprache X einfach, weil es eine häufig verwendete Sprache ist nicht eine wichtige Überlegung sein, von selbst aus. Unsere Studenten lernen und verwenden viele Sprachen während ihrer Karriere. Was ist in den ersten Kursen wichtig ist ihnen die bestmögliche Grundlage von Grundprinzipien und Techniken, die es ihnen ermöglichen, die Übernahme und Anpassung an die verschiedenen Sprachen, die sie in der “ realen Welt konfrontiert werden wird.”
3 Die Python-Vorteil
3,1 The Case for Scripting Sprachen
Ousterhout (1998) unterscheidet zwischen System Programmiersprachen (zB C, C + +, Pascal, Ada, Java) und Skriptsprachen (zB Perl, Tcl, Python, Rexx, Visual Basic). Die ersteren sind statisch typisiert, in der Regel erstellt, und stellen eine bescheidene Abstraktion von der zugrunde liegenden Maschine. Letztere werden dynamisch typisierte, in der Regel interpretiert und auf sehr hohem Niveau. Skriptsprachen sind in der Regel als “ Kleber Sprachen” für den Anschluss von unabhängigen Komponenten in großen Anwendungen oder als Prototyping-Tools für die schnelle Entwicklung von Anwendungen beschrieben. Doch wie Ousterhout (1998, 23) weist darauf hin:

… Einige aktuelle Trends wie schnellere Maschinen, bessere Scripting-Sprachen, die zunehmende Bedeutung von grafischen Benutzeroberflächen und Komponenten-Architekturen und dem Wachstum des Internet, haben stark die Anwendbarkeit von Skriptsprachen erhöht. Diese Trends werden sich in den nächsten zehn Jahren mehr und mehr neue Anwendungen vollständig in Skriptsprachen und System Programmiersprachen vor allem für die Erstellung von Komponenten geschrieben fortsetzen.

Traditionell haben die Informatik-Programme System-Programmierung Sprachen über Skriptsprachen betont. Jedoch würde Skriptsprachen scheinen eine Reihe von Vorteilen bieten, insbesondere für die einleitende Programmiersequenz. Skriptsprachen haben in der Regel einfacher Syntax und Semantik als System Sprachen. Aufgrund der dynamischen Typisierung und Interpretation sind sie sehr flexibel und fördern Experimente. Die sehr hohen Niveau der Natur ermöglicht es den Studierenden immer ausgefeilter und interessante Projekte mit weniger Implementierungsaufwand zu bauen.

Wahrscheinlich hat das mangelnde Interesse in Skriptsprachen aus der Wahrnehmung, dass sie “ Spielzeug” Sprachen sind und nicht zu Allzweck-Programmiersprache geeignet stammten. Während das könnte wahr frühen Skriptsprachen (zB Unix-Shell-Script) haben, ist es sicherlich nicht für moderne Varianten.
3,2 A Little Bit of Python
Von den verschiedenen populären Skriptsprachen Python wird wahrscheinlich in Form traditionellen System Sprachen (Laird & Soraiz, 1998b) am nächsten. Darüber hinaus, wohl, hat die beste Konstellation von Funktionen, die es als erste Programmiersprache empfehlen. Es ist nicht die Absicht dieses Papiers, um eine Python-Tutorial geben, einige gute Referenzen sind für diesen Zweck (Lutz, 1996; Watters, Van Rossum, und Ahlstrom, 1996). ([Fußnote] Eine Vielzahl von guten Python-Ressourcen können Sie im Internet unter http://www.python.org gefunden werden.). Stattdessen werde ich auf die Features von Python, die es eine besonders gute Wahl unter den Skriptsprachen als erste Programmiersprache machen konzentrieren. Im Verlauf der Diskussion werde ich vergleichen Python C + +, die derzeit die häufigste erste Sprache und Java, die Sprache am häufigsten als “ in Betracht aufgeführt. (McCauley und Manaris, 1998)”
3.2.1 Python ist einfach
Im Allgemeinen sind Skriptsprachen viel einfacher als System Sprachen wie C + + und Java (Laird & Soraiz, 1998b). Python hat eine einfache, regelmäßige Syntax. Statements werden von Ende der Zeile beendet und Blockstruktur wird durch Einrückung angezeigt. Python-Programme aussehen ausführbare Pseudo-Code. Dadurch entfällt eine Vielzahl von lästigen Fehler für Anfang Programmierer, vor allem Platzierung von Semikolons Bracketing und Vertiefung. Zum Beispiel ist ein häufiger Fehler in C + + und Java das Versäumnis, einen Block in Klammern als beifügen:

if (x <0)
cout << “x negativ war”;
x =-x;

In Python wird der entsprechende Code ausführt wie erwartet, da die Vertiefung selbst bestimmt den Block:

wenn x <0:
print “x negativ”
x =-x

Python unterstützt die Verwendung von Funktionen und Klassen, aber nicht erzwingen. Einfache Programme sind wirklich einfach. Betrachten Sie zum Beispiel die allgegenwärtige “ Hallo Welt” Programm in Python:

print “Hallo Welt!”

C + + benötigt dieses Programm in eine Funktion verpackt und mit einem vorangestellten Präprozessordirektive:

“># Include <iostream.h>
int main ()
{
cout << “Hallo Welt!”;
}

In Java ist die Situation noch schlimmer, da alle Code innerhalb einer Klasse sein müssen:

public class helloWorld
{
public static void main (String [] args)
{
System.out.println (“Hallo Welt!”);
}
}

Semantisch ist Python ebenfalls einfach. Python dynamisch typisiert ist, so gibt es keine Notwendigkeit für Variablendeklarationen. Dies reduziert die Menge an Code, dass die Schüler zum Schreiben und beseitigt auch häufige Fehler, die sich aus Missverständnis die subtilen Unterscheidungen der Deklaration, Definition und Verwendung. Zum Beispiel, Studenten in C + + und Java oft “ versehentlich” redeclare Variablen, bei denen sie wirklich nur diese nutzen möchten (Tippen int count = 0; wenn sie meine count = 0). Solche Fehler können schwer aufzuspüren.

Python hat eine minimale, aber komplette Reihe von einfachen Kontrollstrukturen: eine Auswahl Konstrukt (if-elif-else), ein bestimmter Schleife (for) und ein Endlosschleife (while). Python hat auch eine moderne Ausnahmebehandlung Mechanismus ähnlich wie in C + + und Java gefunden. Im Gegensatz zu Java, allerdings müssen Sie nicht, um die Ausnahme-Mechanismus, um einfache Programme zu schreiben verstehen. Aus pädagogischer Sicht ist Python for-Schleife illustrativ. Es ermöglicht eine Regelgröße auf aufeinanderfolgende Werte in einer Folge zu nehmen. Es kann verwendet werden, um eine beliebige Sequenz wie eine Liste (Array) oder String durchlaufen werden. Zum Beispiel können die Elemente in einer Liste wie folgt gedruckt werden:

für Artikel in der Liste:
Druckelement

Der Bereich Betrieb erzeugt eine Folge von Zahlen in einem gegebenen Bereich liegt. Zum Beispiel produziert Bereich (5) der Liste [0,1,2,3,4]. Dies kann verwendet werden, um numerisch gesteuerten Schleifen bereitzustellen. Der vorherige Code hätte geschrieben haben (weniger deutlich) als:

for i in range (len (List)):
Liste drucken [i]

Die for-Schleife ist einfach und sicher, so dass sie sehr früh, ohne Angst vor Endlosschleifen eingeführt werden.

Python hat einen einfachen einheitlichen Datenmodell. Variablen sind immer Verweise auf Heap-Werte (Objekte). Das Modell konsistent ist, vermeiden die Verwirrung über Haufen gegenüber automatischen Variablen in C + + oder primitive gegenüber Objekttypen in Java. Beide Sprachen erfordern die Lehre der Mehrfachbelegung Modelle sogar relativ einfache Programme zu implementieren.

Ebenso hat Python nur einen einzigen Parameterübergabe-Mechanismus (nach Wert). Parameterübergabe ist einfach Zuordnung der tatsächlichen formalen Parameter auf Gesprächsdauer. Sobald die Schüler die einfache Zuweisung Modell zu verstehen, werden sie Parameterübergabe kostenlos.
3.2.2 Python ist sicher
Python bietet volle dynamische Laufzeit-Typprüfung und Überprüfung von Grenzen auf Array-Indizes. Python beschäftigt Garbage Collection, so gibt es kein Problem mit baumelnden Zeigern oder Speicherlecks. Es ist unmöglich für den Benutzer-Code in Python einen segmentation violation zu produzieren. In dieser Hinsicht Python ist ähnlich wie Java, und beide sind viel sicherer als C + +.
3.2.3 Python unterstützt die objektorientierte Programmierung
Obwohl man nicht haben, um Klassen verwenden, um Python-Programme zu schreiben, tut Python Unterstützung der objektorientierten Programmierung durch eine Klasse-Mechanismus ähnlich dem von C + + und Java zur Verfügung gestellt. Die Klasse Modell Python ist eine Vereinfachung der C + +-Modell und unterstützt Mehrfachvererbung. Da Python dynamisch typisiert ist, gibt es keine Notwendigkeit für abstrakte Klassen a la C + + oder die Schnittstelle Mechanismus der Java. In dieser Hinsicht ist Python tatsächlich näher zum reinen Objektmodell durch Smalltalk vorgesehen.

Eine Schwäche von Python aus einer Systementwicklung Perspektive ist, dass Kapselung wird nur durch Konvention durchgesetzt. Es gibt keinen Mechanismus für die Angabe, dass die Teilnehmer privat sind. Pädagogisch, scheint dies nicht zu eine große Schwäche, da es noch möglich ist, die Grundsätze der Daten-Versteck zu lehren, es ist einfach nicht von der Sprache durchgesetzt. Die Sprache bietet eine elegante Mechanismus, sondern hält es einfach, die Vermeidung der Komplexität der verschiedenen “ Sichtbarkeit Modi” das muss in C + + oder Java diskutiert werden.

Die dynamische Typisierung Modell Python macht es besonders bequem für die Diskussion Container-Klassen in einer Datenstrukturen Kurs. Ein Stapel Klasse, kann beispielsweise verwendet werden, um jede Art von Objekt zu speichern. Es kann ein int Stapel, ein Schwimmer Stapel, eine Zeichenfolge Stapel oder eine Mischung verschiedener Arten sein. Dies wird ohne Generika (Templates) einzuführen oder Ausführen einer dynamischen Typumwandlung durchgeführt. Abbildung 1 zeigt ein Beispiel Definition eines einfachen begrenzten Stack-Klasse.

class Stack:
def __ init__ (self, Größe):
self.data = [None] * Größe
self.size = 0

def push (self, item):
self.data [self.size] = item
self.size = self.size + 1

def pop (self):
self.size = self.size – 1
zurück self.data [self.size]

def is_empty (self):
zurück self.size == 0

def is_full (self):
zurück self.size == len (self.data)

Abbildung 1: bstack.py–eine einfache beschränkten Stapel.

Python stellt auch ein System, das saubere Modul lädt dynamisch Dateien zur Laufzeit ähnlich wie Java (abzüglich der umständlichen Paket Organisation Einschränkungen). Dies ermöglicht eine einfache Verwaltung von modularen Projekte (Laird & Soraiz, 1998a), ohne die Notwendigkeit für die Header-Dateien und Präprozessordirektiven von C + +. Die Umsetzung des Stapels könnte über eine import-Anweisung verwendet werden:

von bstack Import Stapel

myStack = Stack (100)
myStack.push (“Hallo”)

Eine andere Umsetzung kann durch einfaches Ändern des Modul-Namen in der import-Anweisung ersetzt werden.
3.2.4 Python macht Spaß
Die Einfachheit von Python macht es leicht zu erlernen. In Ergänzung zu der Liste (dynamic array) Datenstruktur, stellt Python Tupel (unveränderliche Listen) und Wörterbücher (Hash-Tabellen). Zusammen mit der Klasse-Mechanismus, können diese verwendet werden, um schnell zu bauen anspruchsvolle Datenstrukturen für interessante Projekte. Das Fehlen von Typdeklarationen sorgt für weniger Code und mehr flexible Programmierung. Es gibt auch eine riesige Bibliothek von Standard-und trugen Module Bereitstellung von Komponenten für die Programmierung GUIs, Client-Server-Anwendungen, HTML-Viewer, Datenbanken, Animationen und vieles mehr. Die steigende Popularität von Skriptsprachen ist direkt auf die Leichtigkeit, mit der anspruchsvolle Anwendungen durch die Kombination von off-the-shelf-Komponenten aufgebaut werden kann. Interessante Projekte können mit nur einem Bruchteil der Code, der in einem System Sprache erforderlich wäre entwickelt werden. Wenn wir es ernst meinen Entwurf Eingriff Einführungskurse sind, scheint Python eine natürliche Wahl.
3.2.5 Python ist praktisch
Scripting Sprachen im Allgemeinen sind an Popularität gewinnt ([Fußnote] Siehe zum Beispiel, der Februar-Ausgabe 1998 von Dr. Dobbs Journal, eine Sonderausgabe mit Skriptsprachen.). Nach einigen Berichten wird mehr Software in Skriptsprachen als in traditionellen System Sprachen geschrieben. Obwohl Python ist etwas dunkler als seine Vettern (Perl, Tcl, Visual Basic), ist es eine reife Sprache und genießt breite Anwendung in der Industrie (Laird & Soraiz, 1998a). Python ist für alle gängigen Plattformen (Windows, MacOS, Linux, Unix, BeOS, Java). Und es ist völlig kostenlos.
4 Einige Hindernisse (realen und eingebildeten)
Angesichts der Vorteile der Verwendung einer Skriptsprache wie Python für den einleitenden Informatik Klassen wird die zögernde Frage, warum ist nicht jeder (wirklich jeder) es zu tun? Scripting Sprachen werden häufig ohne ausreichende Prüfung abgelehnt. In diesem Abschnitt werde ich diskutieren einige der typischen Einwände.
4,1 Mangelnde Compile-Time Checking
Einige Pädagogen widersprechen dynamische Sprachen, weil sie compile-time Kontrolle, insbesondere Typprüfung fehlt. Früher dachte ich, dass starke statische Typisierung notwendig war für eine erste Sprache. Meine Theorie war, dass der Compiler so viele Fehler wie möglich für Studenten fangen. Wir alle kennen die Software-Entwicklung Weisheit, dass Fehler leichter, je früher sie erkannt werden zu beheben sind.

Erfahrung im Unterrichten von Sprachen wie Pascal, C + + und Java hat mich davon überzeugt, dass die angeblichen Vorteile der Kompilierung Fehlerprüfung für Neophyten Programmierern illusorisch sind. Erstens sind die überwiegende Mehrheit der Fehler von einem Compiler erkannt ganz Fußgänger (zB das allgegenwärtige fehlt “;”). Eine Sprache wie Python beseitigt viele dieser gemeinsamen Fehler durch eine einfachere Syntax. Darüber hinaus werden die meisten verbliebenen reinen Syntaxfehler auch sofort von der Python-Interpreter, der die Syntax des Programms zur Ladezeit analysiert gemeldet werden. Zweitens gibt es wenig Vorteile zu fangen subtiler Fehler (z. B. Typ Unverträglichkeiten) bei der Kompilierung. Eine verbreitete Art Fehler wird durch Diskrepanzen zwischen Deklaration und Verwendung entstehen. Viele dieser Fehler sind einfach Fehler in der Erklärung. In einer Sprache, ohne Erklärungen, diese Fehler nicht auftreten. Wenn der Fehler ein echter Fehler, wie ein Typ verwendet wird, wird der Fehler immer noch in einem dynamisch typisierte Sprache gefangen werden. Der Unterschied ist, dass es abgefangen wird und diagnostiziert werden zur Laufzeit. Für die Art der Programme in der Regel in den ersten beiden CS-Klassen geschrieben, ist der Kompilierung Überprüfung nicht viel von einem Vorteil. Die Einfachheit der Bearbeitung interpretieren Zyklus überwiegt bei weitem keinen Nutzen zu finden, mehrere Fehler bei der Kompilierung.

Compile-time Kontrolle kann tatsächlich schädlich sein für einige Schüler in ein paar Möglichkeiten. Zuerst wird demoralisierend. Studenten müssen eine komplette syntaktisch korrektes Programm, bevor sie irgendwelche Ergebnisse zu erzielen. Kompilieren eines Programms und starrt auf einen ganzen Bildschirm der nagende Nachrichten ist ein dumpfer und ärgerlich Aktivität. Mit einer interpretierten Sprache, passiert wenigstens etwas; generiert das Programm einen Teil der Ausgabe vor dem Anhalten für einen Fehler. Der Student sieht das Programm im (Teil-) Aktion und hat nur einen Fehler zu einem Zeitpunkt zu fixieren. Jeder fix bringt mehr Fortschritt. Dies ist eine viel erfreuliche Situation.

Eine zweite detraction umfangreicher Kompilierung Überprüfung ist, dass es Schüler gibt die Illusion Gründlichkeit. Sie glauben, dass, sobald ein Programm kompiliert, es muss ziemlich viel richtig. Ein Symptom dafür ist unzureichende Tests. Ein weiteres Problem ist, dass es Erkennung von Design-Fehler verzögert. Nach meiner Erfahrung ist es nicht ungewöhnlich für Studenten zu viel Zeit an einem Programm zu investieren und fühlen sie fast fertig sind, da gibt es nur eine kleine Wanze sie nicht herausfinden können. Nur stellt sich heraus, das ein kleiner Bug ist immer noch ein Compiler-Fehler. Weit davon entfernt, “ fast fertig,” die Zuordnung durch in ein paar Stunden, und sie haben noch nicht einmal das Programm noch kompiliert bekommen! Sie haben nicht die Chance hatten zu großen Fehlern in der Logik ihrer Lösung zu entdecken. In einer interpretierten Sprache, Fehler zu finden geht Hand in Hand mit der Prüfung, die Anwesenheit des Typs Fehler nicht unbedingt verhindern, dass die Entdeckung von mehr schweren Design-Fehler.
4,2 Scripting Sprachen sind zu ineffizient
Es ist wahr, dass eine interpretierte Sprache wird langsamer (typischerweise um einen Faktor von 10) als einer kompilierten Sprache. Viele frühe Skriptsprachen waren sogar noch viel schlimmer als diese. Allerdings ist eine moderne Skriptsprache wie Python, Perl oder Tcl schnell genug, um wichtige Anwendungen zu bauen. Zum Beispiel haben Python und Tcl sowohl verwendet worden, um voll funktionsfähige grafische Web-Browser implementieren. Sicherlich für die Arten von Programmen, die in CS1 und CS2, Skriptsprachen entwickelt werden, auch die auf bescheidene Hardware, sollte mehr als ausreichend sein.

In jedem Fall diese Sorge für die Ausführung Effizienz ist unangebracht. Beginnend Programmierer sind in der Regel nicht schriftlich Produktion Code. Ihre Programme in der Regel nicht schwer haben Zeitdruck und werden nur dann ein paar Mal laufen. Die wirkliche Effizienz Anliegen ist die Menge an Zeit in die Entwicklung des Programms. Dies ist, wo Skriptsprachen glänzen. Die schnelle Bearbeitung / interpretieren Zyklus, das Fehlen von Erklärungen, und das auf sehr hohem Niveau Natur Skriptsprachen machen sie zu einem perfekten Werkzeug für diese Umgebung.
4,3 Studenten müssen ein System Sprache zu lernen
Es ist wahr, dass kein Computer Science wichtigen sollte ohne zu lernen, mindestens ein System Programmiersprache wie C + +, Java oder Ada absolvieren. In der Tat wäre es gut sein, mehr als eine zu lernen. Skriptsprachen nicht ersetzen Systemsprachen, sondern sie sind komplementär. Immer mehr Software-Systemen aus Komponenten in dem System programmiert und Sprachen zusammen mit einer Skriptsprache verklebt gebaut. Daher ist es ebenso wahr, dass die Schüler sollten auch lernen, eine Skriptsprache. Auf diese Weise werden sie mit einer Reihe von Werkzeugen ausgerüstet, so daß sie den einen besten geeignet, um eine bestimmte Aufgabe anwenden können.

Die Frage wird, dann sollte das die Sprache der ersten Klasse (n) sein? Ein Argument für den Unterricht einer Sprache wie C + +, Java oder Ada in der ersten Klasse ist, dass diese Sprachen selbst so komplex und schwierig, dass die Schüler dem Lernen zu beginnen sie sofort brauchen, um genug Zeit, um sie zu meistern haben werden. Dieses Argument wird es rückwärts. Die ersten Klassen sollten nicht über die Sprache zu sein, sondern darum, Informatik und im Grunde Design. Der Versuch, eine komplexe Sprache inhärent lehren lenkt von diesem Ziel, da die Schüler mehr Zeit Beherrschung der Sprache und damit weniger Zeit Mastering anderes Material ausgeben müssen. Dies ist der Grund, warum einige Pädagogen auf Java suchen als einfachere Alternative zu C + +, aber auch Java ist sehr komplex im Vergleich zu Python.

Ein sinnvoller Ansatz ist die Gestaltung zuerst beibringen, beginnend Studenten mit einem einfachen, aber mächtige Sprache. Über ein solides Verständnis der Programmierung und Design ist es viel einfacher Begriffe wie statische Typisierung, Sichtbarkeit, Generika und Polymorphismus verstehen. Als Gedankenexperiment vorstellen, wirklich zu erklären, die Bedeutung der einzelnen Teil des helloWorld Java-Programm auf einen neuen Programmierer. Stellen Sie sich vor, wie viel einfacher wäre es, öffentliche, Klasse, statisch, nichtig und String [], um einen Studenten, der versteht schon Funktionen, Klassen, Instanzvariablen, Klasse Variablen, Datentypen und Arrays zu erklären. Die komplizierteren Konstrukten des Systems Sprachen (zB C + +-Templates, virtuelle Methoden, dynamische Casts) sind wirklich Mechanismen zur Erreichung etwas von der Flexibilität durch dynamische Sprachen innerhalb einer statisch typisiert Framework bereitgestellt. Warum nicht lehren die Konzepte zunächst in einer Sprache, die nicht erforderlich ist, so komplex, um sie auszudrücken? A sophomore-level Prinzipien von Programmiersprachen Klasse oder einer Systemprogrammierung Klasse scheint eine geeignete Ort, um die Feinheiten eines Systems Sprache anzugehen.
4,4 Python ist Unfamiliar
Einige Lehrkräfte können Python als erste Sprache widersprechen, weil es ungewohnt ist. Allerdings sind Skriptsprachen einfach, und jeder qualifiziert Informatik lehren abholen können Python in Tagen, wenn nicht Stunden. In der Tat würde ich es wagen, dass nach ein paar Tagen spielen mit Python, viele Dozenten, die jetzt lehre sind C + + würde wissen, Python besser sagen. C + + hat bei der Standardisierung entwickelt, und vieles von dem, was man sieht, in den Lehrbüchern ist veraltet. Echte Kenner der modernen C + + sind relativ selten.
4,5 Unsere Studenten wollen Sprache X
Schüler (und Eltern und Arbeitgeber) haben vorgefassten Vorstellungen von dem, was sollte in den Lehrplan unterrichtet werden. Allerdings sollte keiner behaupten, dass es nicht in ihrem besten Interesse, die stärkste mögliche Grundlage in der Programmierung und Design bekommen. Wie oben besprochen, beginnend mit einer Skriptsprache ist nicht wahrscheinlich zu verzögern den Fortschritt der Schüler beim Lernen Sprache X (was X ist). Vielmehr ist es wahrscheinlich, sie besser zu machen Programmierer in welcher Sprache (n) sie am Ende mit. Wenn ich eingeführt Python in der oberen Ebene Klassen, hat die nahezu universelle Reaktion “ Warum haben wir nicht dies in erster Linie benutzen?”
4,6 Es gibt keine Lehrbücher
Eine Hauptschwierigkeit bei dem Versuch, einen nicht standardmäßigen Sprache im einleitenden Sequenz lehren, ist der Mangel an Lehrbuch Unterstützung. Eine Option könnte sein, eine Sprache-neutral Buch verwenden und zu entwickeln unterstützt Labors mit einer der verfügbaren Python Referenzen. Was wirklich gebraucht wird ist für einige Pioniere Einführungskurse mit Skriptsprachen zu lehren und entwickeln entsprechende Hinweise, die Schulbücher werden könnte. Zahlreiche Pädagogen wagte den Sprung mit Java bevor es Texte, als Ergebnis, es gibt viele neue Titel mit Hilfe von Java kommen jetzt auf den Markt.

Dieser Artikel ist ein Weckruf für diejenigen, die denken über eine Umstellung auf Java sind. Wenn Sie vielleicht Einschalten werden Sprachen, sorgfältig zu prüfen, die Motive für den Switch. Pädagogische Überlegungen sprechen für eine Abkehr vom System Sprachen Skriptsprachen und Python ist eine sehr gute Wahl. Was benötigt wird, ist ein paar dicke Seele, den Sprung mit Python und entwickeln die entsprechenden Materialien. Vielleicht haben einige aktuelle Autoren könnte auch sein überredet werden, um Python-Versionen von populären Texten zu entwickeln.
4,7 What About Scheme?
Für diejenigen, die zuvor verwendet haben Scheme im einleitenden Klasse, ist die Forderung nach einer einfachen erste Sprache nichts Neues. Scheme hat viele Gemeinsamkeiten mit Skriptsprachen, dass es klein ist, dynamisch und interaktiv. (In der Tat, es wird oft als Skriptsprache verwendet.) Scheme ist eine gute Wahl für eine erste Sprache, weil es einfach und mächtig ist. Schema ermöglicht die Diskussion verschiedener Programmier-Paradigmen, und es gibt einige sehr gute Lehrbücher für CS1 mit Scheme. Es scheint eine ideale Wahl.

Die Schwäche des Scheme ist, dass es als eine marginale Sprache, die ganz anders als das System Sprachen, die an anderer Stelle in den Lehrplan verwendet werden, ist wahrgenommen wird. Dies hat seine Popularität in CS1 begrenzt. Python bietet viele der Vorteile des Scheme, während immer noch ähnlich wie Sprachen wie C + +, Java und Ada, um damit den Übergang zu dieser Sprachen. Für diejenigen, die mehrere Programmiersprachen Paradigmen in den ersten Kursen zu erkunden, hat Python-Unterstützung für die funktionelle Stil mit Funktionen erster Ordnung, Karte, gelten, Lambda und Verschlüssen.
5 Schlussfolgerungen
Die Entstehung von Skriptsprachen wie Python, Tcl und Perl als wichtige Werkzeuge in der Software-Entwicklung stellt eine potenziell revolutionäre Veränderung in Computer-Programmierung. Derzeit werden Skriptsprachen in der Informatik Lehrplan unterrepräsentiert. Dies ist überraschend, wie aus pädagogischer Sicht wäre Skriptsprachen scheint ideal geeignet für die Art der Programmierung, die typischerweise in den Einführungskursen ist getan.

Eine der wichtigsten Lehren versuchen wir bei unseren Schülern zu vermitteln ist die Idee, das richtige Werkzeug für einen bestimmten Job. Wenn ein Client kam zu mir und schlug vor, sie brauchte ein Programm in einem sehr kurzen Zeitrahmen geschrieben, dass das Programm keine engen Zeit oder Speicher Einschränkungen hatten, und dass einmal abgeschlossen wäre es nur ein paar Mal ausgeführt werden, würde ich sofort deuten auf eine Skriptsprache Sprache als geeignetes Instrument. Dies sind genau die Bedingungen, unter denen Programmierung erfolgt in den meisten CS1 und CS2 Klassen. Angesichts der Existenz von Skriptsprachen wie Python, die auch eine gute Unterstützung für modulare und objektorientierte Programm-Design, es gibt keinen guten Grund, nicht mit ihnen. Skriptsprachen sind die am besten geeignete Werkzeug für unsere Einführungskurse. Angesichts der derzeitigen Mangel an Konsens über eine einzige erste Sprache, wie es scheint, der ideale Zeitpunkt, um eine Bewegung zu Skriptsprachen beginnen. Erwägen Sie Python in Ihren einleitenden Klassen.
Referenzen
Laird, C., Soraiz, K., (1998). Erste Schritte mit Python, SunWorld Online, Februar, http://www.sun.com/sunworldonline/swol-02-1998/swol-02-python.html Schritte

Laird, C., Soraiz, K., (1998). Get a Grip auf Scripts, Byte, Juni, S. 89-96.

Lutz, M., (1996). Programming Python, O’Reilly & Associates, Inc.

McCauley, R. und Manaris, B., (1998). Computer Science Programme: Was sehen sie aus? Proceedings of the 29. SIGCSE Technical Symposium on Computer Science Education, Februar, S. 15-19.

Ousterhout, J., (1998). Scripting: Higher Level Programming für das 21. Jahrhundert, IEEE Computer, März.

Watters, A., van Rossum, G., Ahlstrom, J., (1996). Internet-Programmierung mit Python, M & T Books, New York, New York.