Fragen Sie Hackaday: Zuerst, zuletzt oder nie die Montage lernen?
HeimHeim > Blog > Fragen Sie Hackaday: Zuerst, zuletzt oder nie die Montage lernen?

Fragen Sie Hackaday: Zuerst, zuletzt oder nie die Montage lernen?

Jul 15, 2023

Vor ein paar Tagen stieß ich auf einen Online-Beitrag, in dem jemand auf das Buch „Learn to Program with Assembly“ hinwies und fragte, ob jemand jemals Assembler als erste Programmiersprache gelernt habe. Ich musste lächeln, denn wenn Sie ein bestimmtes Alter haben, könnte Ihre Muttersprache durchaus Assembler gewesen sein, selbst wenn es Assembler für Maschinen war, die es nie gab.

Das ist natürlich lange her. Heutzutage ist es wahrscheinlicher, dass Sie, wenn Sie über 40 sind, zuerst BASIC gelernt haben. Wenn man jünger wird, tendiert man zu Java, Javascript oder sogar C. Es brachte mich jedoch zum Nachdenken: Sollten die Leute Assembler lernen, und wenn ja, wann?

Assemblersprachen sind mir nicht fremd, aber ich bin mir nicht sicher, ob ich eine moderne und vertretbare Antwort auf diese Frage kenne. Natürlich gibt es jede Menge Tutorials (darunter auch einige von mir). Es gibt viele Fälle, in denen ein paar Zeilen eingebetteter Assembly einen großen Unterschied in einem Programm machen können. Das Debuggen eines fehlerhaften Compilers kann auch Assembly-Chops erfordern. Es scheint also, dass zumindest einige Leute noch Montage lernen müssen. Bleibt die Frage, wann man es lernen sollte und wer es lernen muss.

Meine traditionelle Antwort wäre, dass jeder es so schnell wie möglich lernen sollte. Aber das könnte daran liegen, dass ich es vor Jahren so gemacht habe. Ich bin nicht davon überzeugt, dass das heute für jeden die richtige Antwort ist. Ich werde jedoch meinen Standpunkt darlegen.

Wenn Sie damit zufrieden sind, Code zur Validierung von Postleitzahlen in Javascript zu schreiben, müssen Sie wahrscheinlich nicht Assembler lernen. Aber wenn Sie wirklich ein Top-Programmierer sein wollen, müssen Sie sich früher oder später damit auseinandersetzen. Es hat einige Vorteile, es früh zu lernen. Wenn Sie verstehen, was wirklich auf CPU-Ebene vor sich geht, scheint ein Zeiger in C kein schwieriges Konzept zu sein. Die Möglichkeit, sich die Ausgabe eines Compilers anzusehen und zu verstehen, was sie bedeutet, ist oft aufschlussreich, wenn Sie versuchen, etwas Neues zu lernen.

Das einzige Problem besteht darin, dass die moderne Assemblersprache schwierig ist. CPU-Befehlssätze sind seltsam und es gibt Probleme mit CPUs, die eine Ausführung außerhalb der Reihenfolge durchführen. Dann gibt es verschiebbaren Code und andere Details, über die man leicht stolpern kann und über die man nicht viel wissen muss.

Es gibt also zwei Möglichkeiten. Wählen Sie zunächst eine ältere CPU aus. Etwas wie das Z80, das 1802 oder das 6502 ist nicht so schwer zu erlernen und es stehen eine Menge Ressourcen zur Verfügung. Sie haben keine solche Hardware? Wen interessiert das? Verwenden Sie einen Emulator. Sie können wahrscheinlich sogar einige finden, die im Browser laufen und über hervorragende Debugging-Funktionen verfügen, die in der echten Hardware nicht verfügbar sind. Ich habe auf Dutzenden von CPUs programmiert und sie sind sich alle ziemlich ähnlich. Angesichts der Seltsamkeit des 1802 würde ich es vielleicht nicht empfehlen, obwohl ich es selbst liebe. Andererseits ist es sehr einfach zu erlernen. Der PDP-8 oder der PDP-11 sind weitere gute Kandidaten, obwohl einige der Funktionsweisen von Minicomputern heute nur noch selten zu sehen sind.

Oder wählen Sie eine Maschine aus, die nicht existiert. Die meisten davon wurden zum Lernen entwickelt, das ist also ein Pluspunkt, und viele von ihnen verfügen auch über moderne Emulatoren. Wenn Sie sich für eines entscheiden würden, würde ich Mix vorschlagen. Die Bücher von Knuth sind klassisch und verwenden Mix. Sie haben jeden beeinflusst, sodass Sie in jedem Computersystem, das Sie jemals berühren, Echos von Knuths Ideen sehen werden. (Das ist zumindest kein Quantencomputer.)

Gehen Sie einfach nicht zu weit zurück. Die Programmierung von EDSAC, TUTAC oder 4004 ist wahrscheinlich überhaupt nicht repräsentativ für moderne Computer. Ehrlich gesagt, keine dieser CPUs. Aber sie können bei Bedarf dazu beitragen, die Voraussetzungen für den Einsatz fortschrittlicherer Prozessoren zu schaffen. Wie das alte Sprichwort: Man muss kriechen, bevor man geht, und gehen, bevor man rennt.

Man könnte auch leicht mit der anderen Seite argumentieren. Vielleicht ist die Assemblersprache sinnvoller, wenn Sie verstehen, warum Sie Zeiger benötigen, um verknüpfte Listen zu erstellen, und warum bedingtes Springen eine Sache ist. Wenn Sie schon eine Weile programmieren, sind Ihnen einige Ideen wie Hexadezimalzahlen und Adressen vielleicht bereits bekannt.

Wahrscheinlich ist jedoch der falsche Zeitpunkt, es zu erlernen, wenn Sie einen hartnäckigen Fehler haben und vermuten, dass der Compiler Ihren Code falsch optimiert. Oder um Mitternacht vor Ablauf einer Frist, wenn Sie noch ein bisschen mehr aus Ihrem Code herausschneiden müssen.

Dies ist schließlich „Ask Hackaday“, also teilen Sie uns Ihre Meinung in den Kommentaren mit. Begründen Sie, warum niemand Montagekenntnisse erlernen muss. Oder sagen Sie uns Ihre Meinung zum besten Prozessor zum Lernen. Im Browser lernen? Wir empfehlen WebAssembly nicht, aber vielleicht sind Sie anderer Meinung. Was sind die besten Online-Ressourcen und Bücher? Was ist Ihre Lieblingsgeschichte über die Zeit, als der kluge Zusammenbau den Tag rettete?

(Digitaler Regeneffekt vom Generator von [Rezmason].)