Es ist praktisch unmöglich, Schülern, die zuvor mit BASIC vertraut waren, gutes Programmieren beizubringen: Als potenzielle Programmierer sind sie über die Hoffnung auf Regeneration hinaus geistig verstümmelt
Ich habe großen Respekt vor Dijkstra, aber ich stimme nicht mit allem überein, was er sagte / schrieb. Ich bin nicht besonders einverstanden mit diesem Zitat auf verlinktem Papier, das vor 35 Jahren über die Dartmouth BASIC- Implementierung geschrieben wurde.
Viele meiner Kollegen oder befreundeten Programmierer haben mit BASIC begonnen. Die folgenden Fragen haben Antworten darauf, dass viele Programmierer ihre ersten Erfahrungen mit der Programmierung bei BASIC gesammelt haben. AFAIK Viele gute Programmierer haben mit der BASIC-Programmierung begonnen.
Ich spreche nicht von Visual Basic oder anderen "modernen" Dialekten von BASIC, die auf Computern mit vielen Ressourcen ausgeführt werden. Ich spreche von alten Zeiten, in denen BASIC auf einem "Spielzeug" -Computer ausgeführt wurde und der Programmierer sich darum kümmern musste, kleine Zahlen zu speichern, die nicht als Zeichenfolge berechnet werden müssen, um ein dürftiges Byte zu speichern, weil der Computer nur wenige Hunderte davon hatte, oder Ich muss computed goto verwenden, weil es an einer leistungsstärkeren Funktion mangelt, und viele andere Dinge, die es erfordern, dass der Programmierer viel nachdenkt, bevor er etwas tut und den Programmierer dazu zwingt, kreativ zu sein.
Wenn Sie Erfahrung mit BASIC aus alter Zeit auf einer Maschine mit begrenzten Ressourcen hatten (bedenken Sie, dass ein einfacher Mikrocontroller heute viel mehr Ressourcen als ein Computer im Jahr 1975 hat, denken Sie, dass BASIC Ihrem Verstand hilft, bessere Lösungen zu finden, zu denken Wie ein Ingenieur oder BASIC ziehen Sie Sie auf die Schattenseiten der Programmierung und haben Sie geistig verstümmelt?
Ist es gut, eine Programmiersprache zu lernen, die auf einem Computer mit vielen Ressourcen läuft, auf dem der unerfahrene Programmierer alles falsch machen kann und das Programm ohne große Probleme läuft? Oder ist es besser zu lernen, wo der Programmierer nichts falsch machen kann?
Was können Sie über das BASIC sagen, das Ihnen geholfen hat, ein besserer / schlechterer Programmierer zu sein?
Würden Sie einem kommenden Programmierer alte BASIC-Funktionen beibringen, die auf einer (virtuellen) 2-KB-Maschine ausgeführt werden?
Klar, nur die Exposition gegenüber BASIC ist schlecht. Vielleicht teilen Sie meine Meinung, dass modernes BASIC nicht allzu viel hilft, weil modernes BASIC, wie auch andere Programmiersprachen, Möglichkeiten bietet, mit denen der Programmierer nicht tiefer nachdenken kann.
Zusätzliche Informationen: Warum BASIC?
Antworten:
Die Basics, die zum Zeitpunkt des Zitats populär waren, unterschieden sich sehr von denen, die wir noch vor 20 Jahren hatten. (Zählen Sie diese zu Ihren "modernen" Dialekten?;)
Vergessen Sie Schleifen, Unterprogramme, lokale Variablen und alles, was die strukturierte Programmierung (von der Dijkstra und Knuth große Befürworter waren) hervorhob. Du hattest GOTO und es hat dir gefallen .
In diesem Zusammenhang wurden Programmierer, die nur globale Variablen kannten, ihre eigenen Unterprogramme erfanden (mit mehr globalen Variablen für Parameter und Rückgabewerte!) Und Spaghetti-GOTOs schrieben, wirklich verstümmelt.
Wenn Sie heute 30 Jahre oder jünger sind und Basic Ihre Muttersprache war, war dies nicht dieselbe Sprache, über die Dijkstra gesprochen hat. Auch wenn Sie älter sind und Ihr erstes Basic einige dieser Funktionen hatte, wie Murph weiter unten ausführt, war dies möglicherweise nicht die Sprache, über die Dijkstra gesprochen hat.
Sie haben die Frage mit dem Kontext aktualisiert, den ich noch nie zuvor gekannt habe:
Dijkstra zitiert aus dem Jahr 1975.
Erst mit Version 6 haben Sie separat kompilierbare Prozeduren erhalten - was meines Erachtens den Beginn der Verschiebung des Fokus weg von GOTO zeigt.
"1976 fügte Steve Garland strukturierte Programmierfunktionen hinzu , um Dartmouth SBASIC zu erstellen, einen Precompiler, der die Ausgabe von Version 6 produzierte ..." [ Wikipedia ] Der Kontext des Zitats liegt eindeutig vor dem, was wir heute als Kontrollstrukturen kennen, und viele Benutzer der Die Zeit hätte mit der vorletzten Version besser vertraut sein können - dh zwei Versionen vor Garland's, Version 5, und vor separat kompilierbaren Prozeduren.
GOSUB / RETURN verarbeiten weiterhin nur "einfache Unterprogramme".
"Variablennamen waren auf A bis Z, A0 bis A9, B0 bis B9, ..., Z0 bis Z9 beschränkt, sodass maximal 286 verschiedene Variablen möglich waren." ... und sie sind alle global.
quelle
Ein Mann kann nichts Besseres tun, als zu essen und zu trinken und Zufriedenheit in seiner Arbeit zu finden.
Ich habe BASIC vor allem anderen gelernt (naja, abgesehen von Algebra, denke ich). Wenn es mich nicht ernsthaft verwirrt hat, dann bin ich mir nicht sicher, wie ich die folgenden 18 Jahre erklären soll ...
Das heißt, na und? Dijkstra könnte es schwer haben, mir irgendetwas beizubringen, weil ich BASIC über einen längeren Zeitraum gesehen habe, aber er würde es schwieriger haben, mir irgendetwas beizubringen, weil er über einen längeren Zeitraum einer unterirdischen Kiefernkiste ausgesetzt war. Und selbst ohne diese Faktoren war ich noch nie ein ernsthafter CS-Student, ein ernsthafter Mathematik-Student oder ein ernsthafter Student in einer anderen Disziplin. Der Abgrund zwischen jemandem wie mir und der Art Programmierer, die Dijkstra gerne gesehen hätte, ist so groß, dass man ihn kaum fassen kann ...
Und doch programmieren wir. Wir, die wir uns für BASIC entschieden, mit FORTRAN spielten, mit COBOL experimentierten und alles andere, fanden auch eine Freude und eine Faszination an diesen kleinen Maschinen, die sich vielleicht völlig von der unterscheiden, die Mr. Edsger zuerst auf sein Gebiet zog, aber nicht weniger eine Berufung, die Grundlage für eine lebenslange Liebesarbeit.
... oder vielleicht ist es genau das, was ein verstümmelter Verstand sagen würde ...
quelle
Es ist nicht BASIC, was dich verletzt, es ist das Versagen, dich anderen Sprachen auszusetzen . Monoglot "Programmierer" sind nicht.
quelle
Aus strukturierter Sicht war BASIC nicht schlechter als Assembler oder COBOL. Damals gab es nicht die Fülle von Algol-abgeleiteten Sprachen, die wir jetzt haben. Pascal war die erste Einführung, die die meisten Leute in vernünftige Kontrollstrukturen hatten (und ich mag Pascal-Kontrollstrukturen nicht so sehr).
Wenn BASIC ausreicht, um Menschen dauerhaft zu verletzen, sind es auch andere frühe Sprachen, und wir hätten keine Menschen gehabt, die unverletzt genug wären, um alle Sprachen zu entwickeln, die wir heute verwenden.
Es ist möglich, dass Dijkstra damals mit Leuten zu tun hatte, die keine guten Programmierer waren und es niemals sein würden, die gelernt haben, einige Dinge in BASIC zu tun. Das ist die gemeinnützigste Interpretation, die ich auf die Aussage setzen kann.
quelle
BASIC
mitAssembler
in Dijkstra-Zitat, aber ich würde es für eine Computersprache sein, nicht eine Programmiersprache. +1 obwohl :)Ich habe mit BASIC auf einem TRS-80 und Apple II C / E gelernt und betrachte mich als einen guten Programmierer. Die beiden Eigenschaften, von denen ich persönlich denke, dass sie dazu geführt haben, dass sie nicht durch das Erlernen von BASIC zerstört wurden, sind:
Ich gebe zu, dass das Erlernen der objektorientierten Programmierung nach der reinen Prozedur von BASIC eine Weile schwierig war, aber ich weiß nicht, ob das wirklich mit BASIC zusammenhängt, da ich bis dahin auch eine ganze Menge C gelernt hatte .
quelle
Ich stimme auch nicht mit Dijkstra überein. Ich denke, dass es schwieriger ist, eine zweite Sprache zu lernen, weil es Paradigmen gibt, nicht weil es BASIC ist.
BASIC war 1985 meine erste Sprache auf einem PC namens TK (Sinclair like). Es war eine sehr begrenzte Ressource. In dieser Zeit habe ich zum Spaß einen BASIC-Compiler aus einem Buch mit einem Hexadezimal-Editor geschrieben. Ich kaufte ein Z80-Buch und lernte danach 8-Bit-Maschinensprache. BASIC hat mir dabei sehr geholfen.
Danach lerne ich C und Pascal und spiele mit Assembly für 8080/6. MSX-BASIC, Quick Basic in MS-DOS-Zeiten ... VB, Delphi, etwas Java in Windows-Zeiten ...
Heute arbeiten wir mit progress (4gl), .net (C # / VB), php und ich fühle mich nicht wie ein Zyklop. :O)
quelle
Ich habe mit Basic auf einem Apfelklon angefangen, als ich acht Jahre alt war.
Selbst die späteren Versionen von Basic, in denen einige OOP-Ideen implementiert waren (qbasic, visual basic usw.), hätten bei Eight keinen Sinn ergeben.
Zu früh mit dem Programmieren zu beginnen, ist einer der Gründe, warum ich das Problem im Programmfluss durchdenken kann, und das ist etwas, das zu viele Menschen in dieser Branche nicht gut können.
Ich denke, ein früher Start ist oft von Vorteil und eine sehr einfache Sprache ist erforderlich, wenn man mit kleinen Kindern zu tun hat.
Ihre Laufleistung kann variieren ...
quelle
Ich denke, dass die meisten BASIC- Beispiele auf der Welt das Gehirn von Programmierern verstümmeln und nicht die Sprache selbst. Es ist wie mit dem C # -Programmierer, der MSDN durchsucht und keine Ausnahmebehandlung für erforderlich hält oder dass
IDisposable
Typen nicht wirklich entsorgt werden müssen.quelle
Jeder wird ein Problem haben, wenn er die Probleme nicht in seiner aktuellen Sprache identifizieren kann und nicht nur in der Lage ist, sie zu umgehen, sondern auch ein anderes, das zur Lösung des Problems entwickelt wurde.
Und GOTO ist nur schlecht, wenn du keine Zeilennummerierung hast;)
quelle
Ich benutze derzeit BASIC, um meinem Sohn beizubringen, seine eigenen einfachen Spiele zu schreiben. Ich habe es nie benutzt, ich habe meinen Karriere mit PowerBuilder und PowerScript begonnen und bin zu C / C ++ und dann zu Delphi übergegangen. Heute verwende ich fast alle verfügbaren Sprachen und passe mich sehr schnell an, da der Grund aller Sprachen die gleichen mathematischen Formeln mit unterschiedlichen Zeichen, Operatoren und Symbolen sind. Das ist es auch, was ich meinem Sohn beibringe und deshalb kann er bereits C ++ - Code lesen und erklären. Mein Sohn ist übrigens 12 Jahre alt.
quelle
BASIC
GOTO
ist eine großartige Methode, um das Denken in Assemblersprache zu lehren . Es verstümmelt nicht den Geist, es entfernt den Geist nur weiter von Kohlenstoff-basierten Synapsen und ist näher an Silizium-basierten Transistoren.Vergleichen wir jedoch BASIC mit LOGO. BASIC kann kleine Kinder vom Programmieren abbringen, denn um ein einfaches, unterhaltsames Programm zu schreiben, müssen Sie nur ein sehr, sehr langes Programm kopieren, das auf einer Zeitschrift gedruckt ist, während mit LOGO ein Einzeiler sehr eindrucksvolle Grafiken zeichnen kann. Das ist wichtig, um Kinder anzulocken.
quelle
Basic ist gut - es macht Spaß und ist ziemlich einfach Es kann lustige 2D-Grafiken erstellen und was nicht ... Ich habe gelernt (oder versucht zu lernen), dass es eine lustige Sprache war, die mich dazu brachte, mehr zu lernen über Computer ...
quelle
Einige der besten Programmierer, die ich kenne, waren schon früh mit dem Programmieren in Basic vertraut. Es ist etwas "konkreter" und bietet somit ein besseres Gefühl dafür, wie die Low-Level-Maschine tatsächlich funktioniert, als viele neuere Sprachen (z. B. eine engere HLL-Einführung für Assembler).
Das Zitat von Dijkstra stammt aus einer Zeit, in der Wissenschaftler versuchten, einen Trend zu nachweislich korrekten, gut strukturierten Programmen zu forcieren, die nach Spezifikationen entworfen wurden. Aber das ist nicht der Weg, den ein Großteil der Industrie gegangen ist. Stattdessen versuchen viele Programmierer der Web 2.0-Ära, schnell Prototypen für etwas zu erstellen, für das die meisten mathematisch genauen Spezifikationen zum Nachweis von Code nicht existieren, da sich die Dinge zu schnell entwickeln, als dass diese Spezifikation wettbewerbsfähig bleiben könnte.
Daher sind die Test-und-Fehler-Programmiermethoden, die das Programmieren in Basic manchmal fördert, wenn sie ein wenig in der Methodik aufgeräumt werden, eine nützliche Grundvoraussetzung für das RAD-Denken.
Abschließend stelle ich fest, dass auf dem iPad mindestens 5 Basic-Interpreter verfügbar sind, sodass die Sprache auch auf den neuesten Geräten verfügbar bleibt.
quelle
Ich denke, angesichts der Tatsache, dass dieses Zitat 35 Jahre alt ist, hat es viel mit dem Mangel an Abstraktion zu tun, der in den Programmiersprachen verfügbar war, und mit dem, was Sie wissen mussten, um sich gut zu entwickeln, als es gesagt wurde.
Wenn Sie eine Sprache wie BASIC erhalten, lernen Sie nur wenig über das Programmieren auf niedrigem Niveau, was in der Vergangenheit weitaus notwendiger war als heute, und Sie haben den falschen Eindruck, dass das Programmieren einfacher war als es wirklich ist.
Ich erinnere mich, dass ich im Alter von 15 Jahren nach über 3 Jahren mit VZ200, C64 und Apple deutlich versucht habe, 'Maschinencode' zu lernen. Es war ein unhöflicher Weckruf.
Heutzutage jedoch, obwohl ich ein absoluter Snob in diesen Dingen bin, und Sie werden nicht feststellen, dass ich mit BASIC im Namen glücklich in jeder Sprache arbeite (ich fange an, die Monitorphrasen wie 'dumme Fisher Price-Sprache' anzuschreien) Ich gebe zu, dass es einfacher ist, produktive Dinge mit Sprachen zu tun, die die Mechanik der CPU abstrahieren, als dies vor 35 Jahren der Fall war (oder vor 25 Jahren, nach meiner persönlichen Erfahrung und meinem Beispiel).
quelle
Für diejenigen von uns, die Assembler-Code über einen Satz von 8 Schaltern auf der Frontplatte jeweils byteweise in Speer Micro-LINC-Computer geladen und 1972 auf PDP-Bändern gespeichert haben, werde ich eindeutig betonen, dass Dijkstra ein pompöser Trottel war. Alles, was er an Basic verachtete, war zutreffend in Bezug auf den Assembler, mit dem ich arbeitete, und dennoch erholten sich ich und Tausende anderer Menschen von unserem Kontakt mit Assembler und später Basic und Fortran und Cobol und C usw.
quelle
Ich habe Anfang der 90er Jahre angefangen, mit GW-BASIC zu programmieren. Mein Verstand wurde nicht verstümmelt. Ich wechselte zu besseren Sprachen wie Pascal, C, C ++, Java, C # und Python.
Ich würde heute kein BASIC-Programm schreiben können. Ich habe vergessen, wie man in Zeilennummern denkt. Nicht, dass das ein Problem wäre.
Aber meine BASIC-Erfahrung hat mir in meinem College-Kurs für Computerarchitektur, in dem ich Assemblersprache (MIPS) lernen musste, sehr geholfen. Assemblersprache Steuerungsablauf ist viel wie BASIC: Springt =
GOTO
, Äste =IF
...GOTO
,jal
(Call) ...jr
(ret) =GOSUB
...RETURN
. Das ist der Kontrollfluss, den Sie brauchen!Ich würde sagen, dass es besser ist, auf einem Computer mit begrenzten Ressourcen zu lernen. Nicht weil "der Programmierer nichts falsch machen kann", sondern weil die "Coolness" -Schwelle viel niedriger ist. Ein neuer Programmierer weiß möglicherweise nicht, wie er einen großartigen Ego-Shooter für seinen PC machen kann. Aber sie könnten ein großartiges Pac-Man-Spiel für ihren TI-89 schreiben und die Hardware voll ausschöpfen. Und das ist ein Gefühl von Macht.
quelle