Denken Sie, dass die Exposition gegenüber BASIC Ihren Geist verstümmeln kann? [geschlossen]


32

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

- Edsger W. Dijkstra

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?


7
Ihnen ist klar, dass das Zitat ungefähr 35 Jahre alt ist, oder?
MIA

2
Ja. Der Link zu Dijkstra hat das Veröffentlichungsdatum.
Maniero

3
Vielleicht sollte diese Frage nicht von jüngeren Leuten beantwortet werden :-)
Maniero

8
35 Jahre alt, und ich bin mir ziemlich sicher, dass Eddie trollte, als er es schrieb. Ich würde nicht zu viel hineinlesen.
Carson63000

3
Ich stimme @Carson zu. Ich würde denken, dass ein längerer Kontakt mit zynischen, arroganten und bitteren alten Männern Sie noch schlimmer macht.
Mark C

Antworten:


37

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.


2
Meine erste Beschäftigung mit BASIC (1979) war paradoxerweise ein Dialekt, der über parametrisierte Prozeduren verfügte und für den Sie den Code in einem externen Texteditor bearbeiten konnten, obwohl ich mehr mit weniger eleganter Version gemacht habe. Als mir 1982 Strukturiertes Programmieren beigebracht wurde (und Pascal als Sprache, um es zu implementieren), kam es mir vor, als würde am Morgen die Sonne aufgehen ... Ich habe zuletzt ein GOTO in einer fiktiven "richtigen" Sprache (DIBOL) in etwa 1990 ...
Murph

@Murph: Ich benutze am Ende ein paar Mal im Jahr goto ... aber aus dem gleichen Grund handelte es sich bei "goto als schädlich" eher um die globalen gotos, die ich oben erwähnte, als um lokale gotos.

1
GOTO alias "massiver Zufallssprung" - und ich schätze, dass es in der Arbeit nicht um das "Was", sondern um das "Wie" ging, weshalb er sich geirrt hat, aber dies sorgte für eine gute Verallgemeinerung. (Wenn Sie sich beispielsweise Fortran IV ansehen, hatten Sie keine andere Wahl als goto zu verwenden, aber als meine Dozenten zu demonstrieren versuchten - obwohl durch die Einführung von Fortran 77 vereitelt - konnten Sie mit gotos gut strukturierten Code schreiben.)
Murph

Ich habe genau über die alten BASIC-Dialekte gesprochen. Ich weiß nicht, warum die Leute darauf bestehen zu denken, dass ich mit modernem BASIC spreche. Für mich verstümmelt modernes BASIC den Verstand eines Programmierers. Es gibt fast alles gekocht und erfordert keine tieferen Gedanken. BASIC-Programme überschritten selten 1 oder 2 KLOC und hatten selten mehr als einhundert Variablen. Heutzutage ist es üblich, dass eine Klasse mehr als diese enthält, und ich sehe einige Funktionen, die schlecht um diese Anzahl herum geschrieben sind. Meiner Meinung nach hatte Dijkstra Kontakt mit den schlechtesten BASIC-Programmierern. Nur wer Erfahrung mit BASIC auf einer Maschine mit begrenzten Ressourcen hat, kann dies beurteilen.
Maniero

@bigown: Aber was halten Sie genau für modern? Eine 30 Jahre alte Programmiersprache "modern" zu nennen, ist definitiv ungewöhnlich für mich.

31

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 ...


sehr punny! Im Ernst, es ist eine
Ansichtssache

17

Es ist nicht BASIC, was dich verletzt, es ist das Versagen, dich anderen Sprachen auszusetzen . Monoglot "Programmierer" sind nicht.


1
absolut korrekt
RCProgramming 16.11.10

während dies wahr ist, denke ich nicht, dass dies das ist, worauf sich ED zu der Zeit bezog
jk.

11

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.


Assembler ist eine Darstellung der Bytes, die Sie einem Computer zuführen. Sie könnten ersetzen BASICmit Assemblerin Dijkstra-Zitat, aber ich würde es für eine Computersprache sein, nicht eine Programmiersprache. +1 obwohl :)
deltreme

1
Mein Verständnis ist, dass Dijkstra Basic hier für ein unverbindliches Angebot ausgewählt hat und auch andere nicht strukturierte Umgebungen einbezogen hätte.

2
Sicherlich hat Dijkstra über BASIC gesprochen, um einen guten Sound zu bekommen. Mein Standpunkt ist jedoch, dass die frühen Computersprachen sicherlich nicht besser waren und dass gute Programmierer sich erst um 1960 entwickeln konnten und jeder, der zuvor angefangen hatte, dauerhaft geschädigt wurde.
David Thornley

5
Wenn ihr euch die Zeit genommen hättet, die Zeitung zu lesen, aus der das Zitat stammt, hättet ihr herausgefunden, dass er neben BASIC auch andere populäre Sprachen dieser Zeit in den Müll geworfen hat. Er kritisierte auch die Tendenz zur Anthropomorphisierung von Computern, die ich verstehen kann; sie hassen das.
Huperniketes

2
@Huperniketes: Ja, aber Dijkstra war ungewöhnlich kritisch gegenüber BASIC und COBOL. Er hatte das Gefühl, dass FORTRAN und PL / I geheilt werden könnten.
David Thornley

6

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:

  1. Ich habe immer wieder versucht, mit weniger Aufwand bessere Wege zu finden, um das zu erreichen, was ich wollte
  2. Ich bin auf Probleme mit BASIC als Sprache gestoßen und habe sie erkannt, insbesondere das Fehlen von Unterprogrammen (obwohl ich nicht die Erfahrung hatte, die Probleme, die ich jetzt mache, kurz zu beschreiben).

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 .


6

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)


5

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 ...


4

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 IDisposableTypen nicht wirklich entsorgt werden müssen.


4

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;)


Jep! GOTO ist in Ordnung; Es sind Etiketten, die böse sind ... mwuuuuhahahaha
Mawg

3

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.


3

BASIC GOTOist 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.


Ich habe diese Antwort wegen dieser Aussage abgelehnt: Alles, was Sie tun können, ist, weiterhin ein sehr, sehr langes Programm zu kopieren, das auf einer Zeitschrift abgedruckt ist. Das sind nur die Drehbuchkinder des Tages. Die wirklichen zukünftigen Entwickler lernten und schrieben ihre eigenen Sachen.
TecBrat

2

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 ...


2

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.


1

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).


1

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.


1

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!

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?

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.

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.