Die Debatte um die erste Programmiersprache: die endgültige Entscheidung

Einige beziehen sich auf die Debatte über die Wahl der ersten Programmiersprache wie



folgt : Sie sagen, dass eine Million Faktoren die Wahl beeinflussen, und es macht keinen Sinn, darüber zu streiten. Holivars gehen jedoch weiter.

Vitaly Bragilevsky beschloss, dem ein Ende zu setzen und präsentierte die endgültige Entscheidung auf der Saint AppsConf . Nachdem Sie den Artikel gelesen (oder den Bericht gelesen) haben, wissen Sie, wie Sie richtig auf Verwandte oder Bekannte reagieren können, die erfahren haben, wie viel sie in der IT verdienen und dass die Fernbedienung kein Hindernis darstellt, und sich jetzt fragen, wo Sie anfangen sollen.


Vitaly Bragilevsky arbeitet bei JetBrains und lehrt an der St. Petersburg State University an der Fakultät für Mathematik und Informatik, Mitglied des Haskell-Komitees zur Standardisierung der Programmiersprache und des Haskell Glasgow Haskell Compiler Development Committee, Autor des Buches Haskell in Depth.

Lassen Sie uns also herausfinden, wie Sie mit dem Programmieren beginnen und welche Tools verwendet werden sollen. In der Tat ist dies ein wichtiges Thema.
Dijkstra schrieb 1972: "... die Werkzeuge, die wir verwenden wollen, und die Sprache oder Notation, mit der wir unsere Gedanken ausdrücken oder aufzeichnen, sind die Hauptfaktoren, die bestimmen, was wir überhaupt denken oder ausdrücken können!"
Oft erlaubt uns eine Programmiersprache (und die Sprache im Allgemeinen) einfach nicht, das zu tun, was wir wollen, oder sie macht es nicht so, wie wir es wollen. Sprache ist ein wichtiges Instrument, und ihre Wahl muss ernst genommen werden.

Wenn Sie bei dieser Auswahl einen Fehler machen (oder häufiger trifft jemand eine Entscheidung für den Schüler), können die Folgen schwerwiegend sein. So erschienen Programmierer:

  • von Fortran verwöhnt;
  • betroffen von BASIC;
  • zerkleinertes C ++;
  • erwürgt Java.

Daher die Witze, dass ein echter Fortran-Programmierer ein Fortran-Programm in jeder Sprache schreiben kann. Oder Geschichten über Leute, die im ersten Jahr von C ++ geplagt sind und dann schon unmöglich Programmierer werden können - nur sie wissen wie <und >schreiben.

Da wir solche Leute sehen, ist es logisch anzunehmen, dass die erste Programmiersprache irgendwie Einfluss hat .

Ich habe diesbezüglich eine persönliche Geschichte. Meine erste Programmiersprache war Fortran, bis auf die erfolglose Reise zu einer Grundvorlesung, in der der Lehrer über Arrays sprach, und als Anfänger war alles für mich unverständlich und entmutigte mich, weiterzumachen. Dann ging ich in die Bibliothek, nahm ein Fortran-Buch und begann, Programmierübungen auf einem Blatt Papier durchzuführen. Um ehrlich zu sein, war es für mich noch bequemer - aber der Compiler schwört nicht.

Hintergrund


Ich beginne mit dem sogenannten Richard-Vekselblat-Problem. Dieser Mann ist bekannt für seine erste Promotion in Informatik. 1980 schrieb er einen Artikel über die Konsequenzen der Wahl der ersten Programmiersprache ( Richard L. Wexelblat. Die Konsequenzen der ersten Programmiersprache. Vorträge des 3. ACM SIGSMALL-Symposiums und des ersten SIGPC-Symposiums über kleine Systeme, 1980 ).

Alles begann 1978, als Richard einen Brief an die Zeitschrift mit der provokanten Überschrift „Fehler der Jugend oder ist Basic Basic schlecht für Ihre Gesundheit?“ Schrieb. Die Antworten auf diesen Brief dienten als Material für den Artikel.


Aus wiederkehrenden Gesichtspunkten kam Richard Vekselblat zu folgenden Schlussfolgerungen:

  • , (Pascal, PL/C) , (COBOL, FORTRAN). .
  • , . — , .
  • , , . .

Natürlich war dies eine sehr naive Studie, ohne jedoch soziologische Faktoren zu berücksichtigen, und sie erlaubte uns, einige Schlussfolgerungen zu ziehen.

Nachdem ich mich eingehender mit der Geschichte der Sache befasst hatte, war ich überzeugt, dass es Hunderte von Studien gab, die sich mit der Wahl einer Programmiersprache befassten. Es gibt sogar Arbeiten, die die Arbeit zur Auswahl von Atomwaffen zusammenfassen, zum Beispiel: Kevin Parker, Bill Davey. Die Geschichte der Auswahl der Computersprache. (In Arthur Tatnall. Überlegungen zur Geschichte des Rechnens: Erinnerungen bewahren und Geschichten teilen, AICT-387, Springer, S. 166-179, 2012, IFIP Advances in Information and Communication Technology (SURVEY)) .

Die Autoren stützen sich auf eine umfangreiche Bibliographie und identifizieren Faktoren, die die Wahl der Sprache beeinflussen, nicht nur für den Unterricht, sondern auch für die Durchführung von Projekten:

  • : , ( ). , .
  • : ( 150 «Hello world!» 500 IDE); problem-solving, ; .
  • : (, 2000- ); .

Viele Experten sind am Vergleich von Sprachen beteiligt, insbesondere hinsichtlich der Eignung für das Erststudium. Linda Mannila und Michael de Raadt formulierten in ihrem Artikel „Ein objektiver Vergleich von Sprachen für den Unterricht in einführender Programmierung“ Kriteriengruppen für die Bewertung von PL:

  1. Anwendbarkeit in der Ausbildung.
  2. Sprach- und Entwicklungsumgebungen.
  3. Support und Verfügbarkeit.
  4. Verwenden Sie außerhalb des Einführungskurses.

Mit diesen Kriterien haben Linda Mannila und Michael de Raadt eine Sprachvergleichstabelle zusammengestellt.



Im Original weist jedes Kriterium zusätzliche Merkmale auf, die für uns nicht so wichtig sind. Wir sind daran interessiert, dass die Führer in der endgültigen Partitur der Autoren Python und Eiffel sind , eine Sprache, die kaum als populär bezeichnet werden kann.

Zuerst hatte ich gehofft, den YP nach diesen Kriterien zu ordnen und meine eigenen Schlussfolgerungen zu ziehen, aber als ich die Haskell-Spalte betrachtete, fand ich Lügen über jeden Gegenstand! Und er entschied, dass der Tisch nichts mit der Realität zu tun hat - dies ist ein so „objektiver“ Vergleich.

Nach Überlegung kam ich zu dem Schluss, dass ein solcher Vergleich keinen Sinn ergibt. Angenommen, ich würde eine Spalte mit Kotlin hinzufügen und in jedes Element ein Häkchen setzen oder nicht. Das würde absolut nichts bedeuten.

Dann habe ich mich entschlossen zu sehen, was eigentlich für das Training verwendet wird. Hier ist das Bild anders.


Datenquelle .

Die Tatsache, dass die Daten für 2014 Sie nicht verwirren sollten, da sich die Hochschulsysteme sehr langsam ändern und sich das Gesamtbild bis jetzt nicht wesentlich geändert hat.

Python steht immer noch an erster Stelle, Java - spiegelt Anfragen von Oracle, Sun Microsystems und anderen Unternehmen wider, diese Sprache zu lernen. Zu den Universitäten, die anfangen, C ++ - Programmierung zu unterrichten, gehört wahrscheinlich die University of Texas - Björn Straustrup liest dort den ersten Kurs und ich denke, die Studenten machen das gut.

Viele Sprachen, die für die akademische Gemeinschaft von Interesse sind, fielen überhaupt nicht in diese Bewertung, insbesondere:

  • Funktionelle PLs mit statischer Typisierung von Haskell und ML, beliebt bei Forschern.
  • Weit verbreitet in der Webentwicklung, mit dynamischer Eingabe von JavaScript, Ruby, PHP.
  • Plattformspezifische Industriesprachen Objective-C und C # / Visual Basic.

Bei letzteren ist es nur verständlich, dass Universitäten historisch gesehen keine starren Bindungen zu irgendetwas wollen.

Stimme des Volkes


Nachdem ich die Geschichte des Problems studiert hatte, beschloss ich, die Meinung moderner Entwickler durch eine Umfrage auf Twitter herauszufinden . Die Frage wurde wie folgt formuliert: "Welche Eigenschaft einer Programmiersprache halten Sie bei der Auswahl der ERSTEN Sprache für den Programmierunterricht für am wichtigsten?" Und er schlug Antwortoptionen vor, die ziemlich einfach mit bestimmten Sprachen zu korrelieren sind.

Angesichts aller technischen Merkmale der Umfragen auf Twitter sind die Ergebnisse wie folgt.



Mehr als die Hälfte der Befragten gab an, dass Einfachheit die Hauptsache ist. 25%, die auf die Prävalenz geantwortet haben, sind anscheinend der Meinung, dass wir sofort über die Nachfrage auf dem Markt nachdenken sollten. Ein hoher Prozentsatz von Menschen, die denken, dass Sie sich zuerst mit Zeigern befassen müssen, ist alarmierend. Und die Tatsache, dass nur 8% für eine Vielzahl von Bibliotheken vorhanden sind, zeigt, dass die erste Sprache immer noch nicht dafür ausgelegt sein sollte, etwas Reales zu tun.

Umfrageantworten


Ich werde einige interessante Meinungen aus der Diskussion der Umfrage geben.

Dmitry Kovanikov ( @ChShersh ) - ein erfahrener Entwickler und Lehrer - äußerte eine Reihe wichtiger Überlegungen, denen ich voll und ganz zustimme: „ Hohes Niveau und Interaktivität. Um das Ergebnis des Programms zu erhalten und es sehen zu können, war es mit einer minimalen Anzahl von Schritten möglich. Beim Programmieren geht es nicht darum, Variablen, Schleifen oder Rekursionen zu erstellen, sondern darum, Probleme mit den Mitteln von PL zu lösen. “

Artyom Pelenitsyn ( @ ulysses4ever ) bemerkte die methodologische Komponente: „Das Vorhandensein spezialisierter methodischer (Lehrbücher, Aufgabenbücher, Tutorials, Q & A-Foren) und technischer (einfache und verständliche IDEs mit minimalistischer Oberfläche, Stepper / Debugger mit GUI) Tools.“

Andrei Miskov ( @andreymiskov ) erinnerte an einen weiteren wichtigen Faktor: „ Vorhersagbarkeit : Lassen Sie sich nicht von null / undefiniert und 0,1 + 0,2 ablenken. Allmähliche Steigerung der Chancen: Keine OOP und Mutationen, bis Sie die Daten und Funktionen beherrschen. Wie in Racket / HtDP oder Pyret / PAPL. "

Verteidiger von C wurden gefunden: „Ich persönlich glaube, dass C das Beste für eine grundlegendere Studie war und bleibt. Meiner Meinung nach ist die Syntax einfach und sehr intuitiv , und es gibt viele verschiedene Konzepte (Speicher, Zeiger, Stapel, Zuordnungen). Nur ein ABER, keineswegs C89, mindestens C99, sondern besser C11. “

Es gab Hinweise auf Scala und Rust - und im Zusammenhang mit Typisierung und Einfachheit. Was uns das leider denken lässtProgrammiersprachen als totalitäre Sekten . Sie haben Anhänger, die trotz allem ihre Lieblingssprache fördern und nicht auf Kritik (und im Allgemeinen auf die Meinung anderer) hören wollen.

Ein anschauliches Beispiel für einen solchen "Sektierertum" ist die Debatte über die Bezeichnung der Aufgabe "=" oder ": =". Dieser Streit ist bereits über 40 Jahre alt, es gibt Artikel, die sich nur diesem Thema widmen. Und dies ist nur ein Grund aus Hunderten dieser „wichtigen Themen“.
Holivarit nicht - popularisiere deine Sprache, aber agiere nicht als Anhänger totalitärer Sekten.

Unterschiede zwischen Industrie- und Bildungssprache


Wir haben fast die endgültige Lösung für das Problem der Wahl der ersten Sprache gefunden. Es bleibt nur zu bestimmen, wie sich die Bildungssprache von der industriellen unterscheidet.

Erstens gibt es in einer Industriesprache immer viele Möglichkeiten, dasselbe Ziel zu erreichen.

Zweitens sollen Fehlermeldungen in Industriesprachen sicherstellen, dass der Fachmann das Problem schnell versteht und es behebt. Infolgedessen enthalten sie viele nützliche technische Informationen für einen Spezialisten, die ein Anfänger erschrecken und verwirren kann. Dieser Aspekt macht es manchmal unmöglich, eine professionelle Sprache für den Unterricht zu verwenden. Wenn Sie jemals Fehlermeldungen in C ++ gesehen haben, werden Sie verstehen, wovon ich spreche.

Und schließlich sind die Ziele unterschiedlich. Zum Beispiel ist Geschwindigkeit im industriellen Betrieb wichtig, aber es spielt keine Rolle, wenn Sie nur die Programmierung beherrschen.
YP zu lernen, wenn Sie wissen, wie man programmiert, ist einfach. Bei dem Problem mit der Muttersprache muss man das Programmieren lernen, was schwieriger ist.
Zum Thema Programmierunterricht als solcher gibt es beispielsweise auch Bücher.



In einem sehr klassischen Buch (siehe Titelblatt) „Die Struktur und Interpretation von Computerprogrammen“ bekommt man den Eindruck, Programmieren als magische Aktivität und Programmierer als Zauberer mit außergewöhnlichen Fähigkeiten. Dies ist natürlich eine völlige Lüge.

Das Cover des zweiten Buches, Wie man Programme entwirft, spiegelt einen völlig anderen Ansatz wider - das Engineering. Ich mag es viel mehr und ich glaube, dass Sie lernen müssen, wie jedes andere Ingenieurunternehmen zu programmieren.

Es gibt mehrere wichtige Prinzipien beim Entwerfen von Programmen, die Sie beim Erlernen der Programmierung lernen müssen:

  • Lesen der Problembeschreibung und Identifizieren der Komponenten, aus denen die Lösung bestehen sollte.
  • So übertragen Sie eine Aufgabe in die Programmstruktur.
  • , , .
  • , .

Beginning Student Language


Um diese Prinzipien umzusetzen, kam der Autor des Buches Matthias Felleisen auf die Idee von Sprachen zum Lernen. Dies sind Sprachen, die ihre Fähigkeiten schrittweise erweitern.

Alles beginnt mit BSL - Beginning Student Language - in dem es nur das notwendige Minimum gibt: Funktionsdefinition, Funktionsaufruf, bedingte Operation, Arithmetik. Und dann, zusammen mit den Aufgaben, wächst die Sprache allmählich, und Konstruktionen wie Listen, Rekursion und Funktionen höherer Ordnung werden hinzugefügt. Allmählich wird es mit Hilfe der Sprache, bereits SL, möglich, komplexere Probleme zu lösen. Diese Kette endet mit der Racket-Sprache aus der Lisp-Familie, die den Abschluss aller vorherigen Sprachen darstellt und es dem Programmierer ermöglicht, alles zu implementieren.

So sieht ein Grundprogramm in der DrRacket-Umgebung für Anfänger aus.


Pyret


Ein anderer Ansatz für den Programmierunterricht wurde von Shriram Krishnamurthi et al. Sie haben die Pyret-Sprache erstellt und das Buch Programming and Programming Languages ​​veröffentlicht, weil, wie ich wiederhole, niemand die Sprache ohne Schulungsunterlagen lernen wird.

Beachten Sie die Titel einiger Kapitel dieses Tutorials:

  • Einführung in tabellarische Daten (4)
  • Interaktive Spiele als reaktive Systeme (11)
  • Beispiele, Tests und Programmprüfungen (12)
  • Grafiken (19)
  • Verarbeitungsprogramme: Parsen (23)
  • Überlegungen zu Programmen: Ein erster Blick auf Typen (27)
  • Objekte: Interpretation und Typen (32)

In Kapitel 11 - am Ende des ersten Trainingsmonats - lernen sie, interaktive Spiele als reaktive Systeme zu schreiben. Das gesamte Programm ist auf etwa sechs Monate ausgelegt und Objekte und Typensysteme werden fast am Ende eingeführt.

Die Pyret-Sprache ist so aufgebaut, dass es möglich ist, nach Plan zu verlaufen, ohne nach vorne zu schauen. Darauf können Sie tatsächlich alles programmieren, was vor dem 27. Kapitel geschieht, ohne zu wissen, dass die Sprache Typen enthält. Und im 27. Kapitel stellt sich heraus, dass es statische Typisierung gibt und Sie sie verwenden können. Diese Sprache wurde speziell entwickelt, um sich von Anfang bis Ende zu bewegen und schrittweise neue Konzepte in Umlauf zu bringen.

Unten finden Sie ein Beispielprogramm in Pyret und die Umgebung für diese Sprache.


Beispielsweise sind Tests, die in ein Programm (Block where:) eingebettet sind, ein wesentlicher Bestandteil der Syntax. Die Dokumentation ist auch in die Syntax ( doc:) eingebettet . Solche nützlichen Konstruktionen sind in der Sprache auf höchstem Niveau und ihre Verwendung wird in den Lernprozess eingeprägt.

Codeworld


Die Idee einer einfachen Grafikimplementierung wird in der CodeWorld-Umgebung implementiert. Es hat eine eigene Sprache, aber Sie können Haskell verwenden und sofort etwas Schönes bekommen - für Anfänger ist es attraktiv.


PascalABC.NET


Unsere Antwort BSL und Pyret werden an der SFU in Rostow am Don Stanislaw Michalkowitsch und seinen Schülern entwickelt.

Dies ist ein Pascal, der nicht veraltet ist. Es enthält zum Beispiel: foreach, blockinterne Variablenbeschreibungen, fallweise Zeilen, lange Ganzzahlen, verallgemeinerte Klassen und Routinen, Schnittstellen, Überladung von Operationen, Lambda-Ausdrücke, Ausnahmen, Speicherbereinigung, Erweiterungsmethoden.

Einige Dinge aus .NET erscheinen dort sogar früher als in C #. Das heißt, im bekannten Pascal-Syntax-Wrapper handelt es sich um eine Supersprache mit vollem Zugriff auf die Funktionen der .NET-Plattform. Es setzt moderne Konzepte unter dem Gesichtspunkt der Entwicklung von Atomwaffen um.


Oben im Screenshot sammelt das 120-Zeilen-Programm wunderschön und mit Animation die Türme von Hanoi.

Endgültige Entscheidung


Der kluge Leser hat bereits vermutet, dass es keine endgültige Lösung für die Frage der Wahl der ersten Programmiersprache gibt. Weder ich noch sonst jemand hat es. Und das ist gut so: Wir in der Informatik brauchen keine einheitlichen Geschichtsbücher, die den einzig richtigen Standpunkt vertreten.

Ganz am Anfang des Artikels haben wir herausgefunden, was wichtiger ist, wie man lernt, als in welcher Sprache. Dennoch gibt es Möglichkeiten, das Programmieren unter dem Gesichtspunkt der zukünftigen Entwicklung genauer zu studieren.

Beginnen Sie besser mit einer Sprache, die dafür besser geeignet ist: Racket, Pyret, Python, PascalABC.NET. Hauptsache, die Anfangsphase - diese Muttersprache - legte den Grundstein für die zukünftige Entwicklung.



Von den Sprachen der ersten Ebene in diesem Schema ist es einfach, zu einigen der grundlegenden industriellen oder akademischen Sprachen zu wechseln: JavaScript, C, C #, Java, Haskell, OCaml, F #. Wenn Sie jedoch sofort mit JavaScript beginnen, erhalten Sie einen Fortran-Programmierer auf eine neue Art und Weise, der dann wie in JS überall schreibt, und es wird schrecklich. Und wenn es sich um eine zweite Sprache handelt, tritt eine solche Verformung nicht auf.

Wenn der Grundstein in einem bestimmten Bereich gelegt wird, eröffnen sich darüber hinaus eine Million Möglichkeiten. Im Diagramm sind nur einige davon dargestellt.

Möglicherweise müssen Sie momentan nicht viele Sprachen beherrschen. Vor allem, wenn Sie ein mobiler Entwickler sind. Aber alle Plattformen werden früher oder später veraltet sein, und wenn dies geschieht, stellt sich heraus, dass die mit dem breiteren Hintergrund und wer mehr Sprachen aus verschiedenen Bereichen kennt, davon profitieren wird.

Wenn Sie die Sprachen der unteren Ebene des Schemas durchgehen und deren Gerät grob darstellen, sind Sie der beste Entwickler in jeder Sprache.

Wenn (und wie sonst, Sie haben es auf Habré gelesen) Sie bereits erfolgreich eine Karriere des Entwicklers begonnen haben, tief in einen Bereich vorgedrungen sind und jetzt wissen möchten, was außerhalb davon passiert und wohin Sie Ihre Aufmerksamkeit lenken können - nehmen Sie am RIT-Festival teil ++ Online . Dort können Sie in zwei Tagen (25. und 26. Mai) einen Einblick in die gesamte IT-Branche erhalten und in den Meisterkursen vom 27. Mai bis 10. Juni individuelle Fähigkeiten herauspumpen.

All Articles