Wie gut wäre es Ihrer Meinung nach, People Assembly (eine Variante) als erste Programmiersprache beizubringen? Es würde viel mehr Mühe kosten, als zum Beispiel Java oder Python zu lernen, aber man würde die Maschine mehr oder weniger vom ersten Programmiertag an gut verstehen (zumindest im Vergleich zu vielen höheren Programmiersprachen). Was denkst du? Ist es eine realistische Idee, zumindest für diejenigen, die bereit sind, zusätzliche Anstrengungen zu unternehmen? Vorteile und Nachteile?
Hinweis: Ich bin kein Lehrer, nur neugierig
Antworten:
Es wäre schwierig, einen neuen Programmierer mit Assembler-Code zu inspirieren. Eine dynamische Hallo, Benutzer-Website ist mit weniger Aufwand viel cooler. Ich sage nicht, dass die grundlegenden Lektionen gleich sind, aber ein Einführungskurs wird einen großen inspirierenden Inhalt haben, oder es wird keinen zweiten Kurs geben.
Ich erinnere mich, dass meine frühen Programmierkurse in Scheme unterrichtet wurden, und ich war größtenteils frustriert darüber, dass ich nicht einfach nur eine EXE-Datei kompilieren und mein Programm "ausführen" konnte (ich dachte, MS Visual Basic sei das Ende der Programmierung). Erst Jahre später begriff ich, mit welchem mächtigen Werkzeug ich gespielt hatte. Ich denke, ich hätte es mehr geschätzt und diese Lektionen besser verinnerlicht, wenn ich einige frühe Erfahrungen mit etwas Pragmatischerem gemacht hätte.
quelle
Ich halte das für eine schreckliche Idee, sowohl für Studenten der Softwaretechnik als auch für CS-Studenten, und für alle, die sich mehr für Programmierung als für Elektronik interessieren.
Es kann getan werden, aber es bedeutet nicht , es sollte getan werden. Früher bestand der Weg, wirklich coole Sachen mit Heimcomputern zu machen, darin, zuerst das Zusammenbauen zu lernen. Das lag an den frühen Hardware-Einschränkungen - höhere Sprachen waren einfach nicht leistungsfähig und schnell genug. Heutzutage kann man mit einer höheren Sprache in kürzerer Zeit viel cooleres Zeug machen.
Was hört sich interessanter an, als einen schnellen Prototyp für ein einfaches Spiel zu schreiben und mit Variationen eines Algorithmus zu spielen oder mit Registern und einfachen Dingen zu kämpfen?
quelle
Ich denke nicht, dass es eine schreckliche Idee ist, aber wie komplex wird ein Programm für diese Studenten sein? Die Montage erfordert viel mehr Arbeit. Es könnte in Ordnung sein, sie mit sehr einfachen Dingen zu beginnen und sie dann auf etwas zu verschieben, das einfacher zu bearbeiten ist, sobald sie eine Wertschätzung für die Arbeit auf der unteren Ebene erhalten haben. Studenten, die zum ersten Mal eine Idee haben, haben manchmal die Idee, den nächsten Halo, MS Office, AutoCAD oder ähnliches zu programmieren. Wenn sie sehen, wie viel Arbeit in einer einfachen Assemblersprache steckt, können sie Angst haben. Machen Sie das klar dass es bessere Dinge als die Montage gibt und sie dann dorthin verschieben, sobald sie die Konzepte gesehen haben. Sie können auch versuchen, Assemlby gleichzeitig mit etwas anderem wie C zu unterrichten.
Auch welche Assemblersprache? Ich erinnere mich, dass es relativ einfach war, mit MIPS zu arbeiten, und ich denke, dass es in einem Emulator ausgeführt wird, sodass keine Gefahr besteht, Probleme auf dem realen Computer zu verursachen, obwohl es derzeit möglicherweise bessere Tools gibt.
Das könnte gut funktionieren, wenn es richtig gemacht wird. Sei einfach vorsichtig...
quelle
Assembly war die erste Sprache, die wir in der Elektronikschule lernten (in den 1900er Jahren) und es schien eine natürliche Wahl zu sein. Wir haben uns in unseren Kursen von diskreten Bauteilen über Widerstandstransistorlogik, Logikgatter, integrierte Schaltkreise, Prozessoren bis hin zur Programmierung in der Baugruppe weiterentwickelt. Viele der Schüler in diesen Klassen hatten noch nie in einer Sprache programmiert und sie haben es gleich gelernt.
Eine Versammlung kann also eine gute Wahl für eine Muttersprache sein, wenn das richtige Fundament für den Studenten gelegt wird. Für alle, die sich zum Ziel gesetzt haben, Anwendungen oder Webentwickler zu werden, ist Assembler meiner Meinung nach wahrscheinlich ein zu untergeordneter Ausgangspunkt.
quelle
Eines ist sicher, wenn die Leute, die zuerst die Vollversammlung lernen, es schaffen, werden sie erstaunliche Programmierer sein.
Das erinnert mich daran, als ich das Autofahren gelernt habe. Meine Mutter bestand darauf
Der Grund dafür war, dass sie nicht wollte, dass ich auf einmal von mehr abgelenkt wurde, als ich sein musste.
Wenden Sie das an, um zu lernen, wie man programmiert. Ist es notwendig, alles auf einmal auf einen Lerner zu werfen? Sie erfahren, was eine Variable ist, und gleichzeitig, wie viele Daten sie in welchem Register speichern können.
Über die Hälfte meiner Klasse hat unsere Montageklasse nicht bestanden, und dies war eine Gruppe von Leuten, die sich zu diesem Zeitpunkt 2+ Jahre lang als programmierkundig angesehen hatten.
Wenn ich alles noch einmal lernen müsste, wäre es meine persönliche Präferenz, mit einer Sprache zu beginnen, die so viel wie möglich für mich leistet. Gehen Sie dann, während ich lerne, rückwärts zu den Sprachen der unteren Ebene.
quelle
Nein
Warum ist das vorteilhaft? Können Sie ein Beispiel oder einen Hinweis geben, wie dies von Wert sein könnte?
Vorteile: Keine.
Nachteile:
Ein Durcheinander von zufälligen Kleinigkeiten über Flags und Zustände und Register und komplexe Speicheradressierungsschemata und E / A-Geräte und DMA und Interrupts und Taktzyklen und so weiter. Nichts davon hilft, moderne VM-basierte Sprachen und Computer zu verstehen.
Eine Trennung von der eigentlichen Problemlösung, auf die Computer angewendet werden.
Eine Scheidung von Endbenutzern und den praktischen Daten- und Verarbeitungsproblemen, die sie lösen müssen.
Eine unnötige Flut von Erklärungen zu Maschine und virtueller Maschine sowie zu Compiler und Interpreter und dem gesamten Schildkrötenstapel, der die Welt aufhält.
Viele detaillierte "Dies ist die physische Implementierung eines" Objekts "in der höheren Sprache, zu der sie schließlich gelangen.
Viele detaillierte "So werden Methodenfunktionen verteilt" in der höheren Sprache, zu der sie letztendlich gelangen.
Viele Erklärungen zu "Dies gilt nicht für 80386, aber für den 80586-Chipsatz".
Viele einfache OS-API-Aufrufe bewirken, dass ein ASM-Programm alles ausführt, was für jemanden nützlich zu sein scheint.
Der Sinn einer ersten Programmiersprache ist es, den Chipsatz nicht zu beherrschen.
Der Sinn einer ersten Programmiersprache ist es,
Verstehen, wie man über Computer denkt.
Verstehen, wie nützliche Daten verarbeitet werden.
Verstehe, wie man etwas erledigt. Design - Code - Test.
quelle
Wenn ich beauftragt würde, einen Lehrplan zu entwerfen, würde ich im ersten Semester zwei Kurse gleichzeitig abhalten: asm + grundlegende Computerorganisation / -architektur und einen SICP-basierten Kurs, der in Scheme gegründet wurde. Das zweite Semester sollte sich an Datenstrukturen und elementaren Algorithmen im Schema orientieren.
Das zweite Jahr würde ein einjähriges Projekt mit Delphi, C ++ oder C # sein, das sich auf modernes Software-Design (OO-Design, funktionales Design, Software-Engineering, Versionskontrolle usw.) konzentriert.
Der Effekt sollte darin bestehen, sowohl in der Zusammenfassung als auch in der Praxis eine intensive Grundlage zu schaffen, die zu vertieften Kursen im dritten und vierten Schuljahr führt.
quelle
Ich war TA-Anfänger im Informatikunterricht und ich denke, das ist eine schlechte Idee.
Trotzdem denke ich, dass Baugruppen- / Computerhardware eine sehr frühe Klasse sein sollte - idealerweise das erste Quartal in der Major-Klasse. Lassen Sie die Schüler eine Hochsprache unter die Lupe nehmen, und wechseln Sie dann direkt zu Hardware auf niedriger Ebene, bevor Sie mit Datenstrukturen fortfahren - idealerweise in einer Sprache, die Speicherverwaltung erfordert.
quelle
Assembly war meine zweite Sprache, gleich nach BASIC. Als ich jedoch lernte, war es eine andere Zeit. Mein Commodore 64 hatte andere Sprachen zur Verfügung, aber wenn Sie wollten, dass etwas schnell aussieht oder mehr als eine Sache gleichzeitig erledigt, mussten Sie die Assemblersprache lernen und lernen, wie man mit Interrupts arbeitet. Das Grafikumgebungs-Betriebssystem (GEOS), das dem Commodore ein Fenstersystem gab, war ebenfalls vollständig zusammengebaut. Es war im Großen und Ganzen die beste Assembly-API, die ich je gesehen habe. Es war auch die einzige Plattform, auf der ich Ihren Code stylen konnte. Richtig, Sie können Kursivschrift und verschiedene Schriftgrößen verwenden - etwas, das sich zum Lesen der Kommentare als nützlich erwiesen hat.
Ich habe viel über die Funktionsweise des Commodore gelernt, aber der Motorolla-Chip hatte einen sehr einfachen Opcode-Satz. Es ist nicht allzu schwierig, weniger als 255 Opcodes voneinander zu trennen. Ich war nicht der Lage, meine Erfahrung auf dem Motorolla 6510 - Chip - Programmierung für die Intel 8086. Die Chips und Systemarchitekturen waren zu unterschiedlich Parlay. Ich stelle mir vor, ich hätte die gleichen Probleme gehabt, auch auf den Motorolla 68000-Chip des Amiga aufzusteigen.
Kurz gesagt, ich muss mit jedem, der sagt, dass die Vollversammlung eine gute Muttersprache sein sollte, von ganzem Herzen anderer Meinung sein. Hier ist der Grund:
Heutzutage wird die Assemblersprache verwendet, um bestimmte endliche Aktionen zu beschleunigen, bei denen handgefertigte Assemblierungen schneller sind als vom Compiler generierte Assemblierungen. Die Hauptstruktur der Anwendung wird in einer höheren Programmiersprache wie C, C ++ usw. erstellt. Natürlich würde die Assembly-Programmierung sehr wichtig werden, wenn Sie anfangen, Compiler zu schreiben. Wie viele von uns machen das?
quelle
Ich nahm in meinem Abschlussjahr an der High School teil. Ich hatte bereits Kurse in Java, Pascal, C und C ++ besucht und war mit keinem von ihnen vertraut, und ich habe wirklich an der Versammlung gesaugt Ein oder zwei Monate, bevor irgendjemand den Compiler für mich zum Laufen bringen konnte.
Ich denke nicht, dass es notwendig oder klug ist, zuerst die Assemblersprache zu lernen, aber es ist klug, die Dinge zu lernen, die sie Ihnen in den ersten Wochen der Assembler-Arbeit beibringen, wie der Prozessor funktioniert und einige der Debug-Tricks. Das Zeug fand ich als Neuling sehr interessant und aufschlussreich.
quelle
Ich verstehe nicht, warum dies nicht möglich ist, obwohl die Qualität einer Idee von der Menge abhängt, der Sie sie auch beibringen würden. Jemand, dessen Endziel es ist, ein Webentwickler zu sein, würde sich wahrscheinlich langweilen und könnte aufhören, da es ihnen nicht die unmittelbare Befriedigung geben würde, etwas zu erstellen, das Python, Ruby usw. würde. Wenn sie irgendwann an Hardware oder anderen Projekten auf niedriger Ebene arbeiten möchten, ist dies meines Erachtens ein guter Anfang (vorausgesetzt, Sie geben einen ausreichenden Hintergrund für die Computerarchitektur an, damit dies sinnvoll ist). Ich denke, es könnte den Leuten helfen, in Zukunft besseren Code zu schreiben, obwohl ich denke, es wäre schwieriger, andere Sprachen zu lernen, um anzufangen.
quelle
Ich denke, Assemblersprache wird nur Sinn machen, wenn Sie sich auf Dinge konzentrieren wie:
Ohne einen Schwerpunkt in diesem Bereich handelt es sich lediglich um eine vereinfachte Sprache, die dazu neigt, schlechte Organisationsgewohnheiten zu vermitteln. Codierung auf Maschinenebene ist gut im Toolkit zu haben, um zu wissen, wie die Dinge funktionieren, aber es ist keine gute Muttersprache.
Ich würde jemanden für eine höhere Sprache interessieren. Dann unterrichte C ++; dann Assembly mit dem Fokus darauf, wie C ++ - Compiler Assembly-Code generieren. Das Verständnis von V-Tables und anderen übergeordneten Sprachfunktionen trägt wesentlich dazu bei, dass der Entwickler darüber nachdenkt, wie Sprachen wirklich funktionieren, anstatt die Informationen einfach unter "magic" abzulegen.
quelle