Es ist klar, dass das Wissen über Sachen auf niedrigem Niveau bei unserer Arbeit sehr wichtig ist.
Aber in einer Situation, in der Sie bereits kommerzielle Software auf hohem Niveau entwickeln und wenn Sie bereits eine bestimmte Richtung gewählt haben, aber keine Assembler-Fähigkeiten besitzen, ist es nicht sinnvoller, sich auf das Lernen von Dingen zu konzentrieren, die mit Ihrer Richtung zusammenhängen? Oder gibt es einen Grund, warum Sie etwas Zeit aufwenden sollten, um die Grundlagen auf niedrigem Niveau zu erlernen?
Wann ist es zu spät und wann nicht? Und wenn es nicht zu spät ist, wie kann man dann optimal lernen (in dem Sinne, dass man nicht zu viel Zeit aufbringt, um etwas Tiefe und Verständnis zu erlangen)?
Antworten:
Kann nicht glauben, dass niemand das Debuggen erwähnt hat ...
Ich habe seit vielen Jahren keine Assembler-Code-Zeile mehr geschrieben . Aber ich habe es einigermaßen oft gelesen . High-Level-Debugging ist großartig, wenn Sie über die Quell- und Symbolinformationen verfügen. Wenn Ihre ausgefallene Bibliothek jedoch eine unbehandelte Ausnahme auf Kundencomputern auslöst, ist es zu spät, dies in die Lizenz aufzunehmen ...
Aber ich kann immer noch den Disassembler öffnen und sehen, was Ihre übergeordnete Logik letztendlich getan hat , fehlerhafte Daten bis zu ihrem Ursprung zurückverfolgen und herausfinden, wer das FPU-Steuerregister geändert hat ...
Das hat meinen Speck öfter gerettet, als ich gedacht habe. Und es ist nie zu spät zu lernen - es gibt viele großartige Referenzen und Tutorials im Internet, und so gut wie jedes Programm, das auf Ihrem Computer ausgeführt wird, kann eine praktische Umgebung bieten.
quelle
Sie müssen keine Assemblersprache lernen, sondern nur verstehen, wie es funktioniert. Sie müssen wissen, was XOR ist, und im Schlaf in Binärform zählen usw. Aber ich habe in meiner Arbeit noch nie Assembler-Code benötigt.
Wie Sie bereits sagten, sind Kenntnisse über einfache Dinge wichtig, praktische Kenntnisse in der Montage jedoch nicht.
quelle
Wenn Sie wirklich keine geringen Programmierkenntnisse haben, würde ich Ihnen dringend empfehlen, einige davon in Ihrer Freizeit zu lernen. Sie müssen kein Experte sein; erreichen Sie einfach ein gewisses Maß an Kompetenz. Sie müssen einen Großteil der mathematischen Arbeit selbst erledigen, anstatt vom Compiler oder den Bibliotheken abhängig zu sein, um dies für Sie zu tun. Es wird Ihnen helfen, die Lesbarkeit bei der Programmierung zu verstehen, da die meisten Montageanweisungen einer Prozessoranweisung entsprechen. Sie müssen die Komplexität in etwas größeren Programmen selbst verwalten, ohne die Vorteile von Dingen wie
if...else
. Auf diese Weise können Sie einfachere übergeordnete Programme schreiben, da Sie durch die Assembler-Erfahrung gelernt haben, wie viel einfacher das Lesen ist.Denken Sie auch daran, dass Assembly keine Sprache ist! Es ist ein Oberbegriff, der im Grunde den Befehlssatz eines Prozessors bezeichnet, der in eine symbolische Sprache abstrahiert wurde. Unterschiedliche Prozessoren haben unterschiedliche Befehlssätze und daher unterschiedliche Assemblersprachen. Wenn Sie "Assemblierung" lernen, lernen Sie einen Prozess, keine Sprache.
quelle
Sie werden immer davon profitieren, unter die Decke zu schauen und ein bisschen mehr darüber zu verstehen, was sich unter der Abstraktion befindet, auf der Sie stehen. Wie ein Hochschulprofessor von mir einmal sagte: "Alle guten Programmierer verstehen die Hardware" - Sie müssen keine Schaltkreise erstellen und manipulieren können, aber Sie sollten ein gewisses Verständnis dafür haben, was dort unten vor sich geht - es wird nur funktionieren Du solltest besser.
Probieren Sie Computer Organisation und Design
quelle
Ja - Kontinuierliches, lebenslanges Lernen ist ein wesentlicher Bestandteil einer Karriere in der Softwareentwicklung. Wenn Sie sich weiter mit Programmieren und der Verbesserung Ihres Handwerks beschäftigen möchten, sollten Sie irgendwann die Montage lernen, da Sie dadurch eine völlig neue Sprache und eine völlig neue Art des Codeschreibens kennenlernen. Aus dem gleichen Grund empfehle ich, mit vielen Sprachen / Programmierstilen zu experimentieren, einschließlich Ruby / Python (dynamische Sprache), Haskell / F # (reine Funktionssprache), Lisp / Scheme (Funktionssprache) usw.
Ich würde sagen, dass es zu spät ist, wenn Sie nicht mehr mehr mehr über das Programmierhandwerk erfahren möchten. Zum Beispiel, wenn Sie in Ihrer Karriere an einem Punkt angelangt sind, an dem Sie möglicherweise bald von der Programmierung in einen anderen Bereich wechseln, z In den nächsten Jahren würde ich mich dann mehr auf die Fähigkeiten konzentrieren, die für die Entwicklung in diesem Bereich erforderlich sind, anstatt auf das Programmierhandwerk.
quelle
Sie sollten wissen, was es ist und was der Computer tut. Etwas wie Knuths MIX zu lernen, wird Ihnen helfen. Meistens in der Lage, die Effizienz Ihres Codes zu beurteilen. Holen Sie sich die Kunst der Computerprogrammierung und lesen Sie sie. Es wird Sie zu einem intelligenteren Programmierer machen.
quelle
Antworten:
quelle
Ich denke, dass Sie mit zunehmender Karriere einen Punkt erreichen, an dem die Rendite sinkt. Das heißt, Sie sollten die Assemblersprache früh lernen, da dies zu einem besseren grundlegenden Verständnis von allem führt, was danach kommt. Wenn Sie jedoch bereits in der Belegschaft tätig sind und über einige Jahre Erfahrung verfügen, haben Sie bereits ein Gespür für die Funktionsweise. Wenn Sie also die tatsächlichen Details kennen, erhalten Sie möglicherweise nicht so viele Einsichten .
quelle
Ich weiß nicht, wie viel es nützen würde, Montage zu studieren. Aber zumindest wäre es von Vorteil, wenn Sie in einer Sprache wie C programmieren würden. Ich musste in letzter Zeit etwas in C programmieren und fand es ziemlich aufschlussreich. C entfernt einen Großteil der Abstraktion, die in höheren Sprachen vorhanden ist. Diese Abstraktionen sind nicht ohne Kosten. Sie müssen mehr Details der niedrigeren Ebene in C verwalten, wobei diese Details wie in einer höheren Sprache für Sie verwaltet werden. Wenn Sie in C programmieren, müssen Sie sich mit diesen Details vertraut machen. Wenn Sie also wieder in Ihrer Alltagssprache sind, haben Sie dieses Bewusstsein und können besser einschätzen, was tatsächlich passiert. Das sollte helfen, Sie zu einem besseren Programmierer zu machen.
quelle
Im Lehrerberuf müssen Lehrer, zumindest hier in Großbritannien, weit über das hinaus qualifiziert sein, was sie unterrichten. Von einem Lehrer der Sekundarstufe (High School) wird erwartet, dass er einen Abschluss in dem Fach hat, das er unterrichtet, und von Lehrern der Primarstufe (Elementary School) wird ebenfalls ein Abschluss erwartet, und er muss in allen wichtigen Fächern bis zu einem guten GCSE-Niveau (High School) kompetent sein Exit-Prüfungen ?, kein echtes US-weites Äquivalent).
Warum? Denn um etwas gut zu lehren oder tatsächlich gut zu gebrauchen, muss man es verstehen. Dies setzt voraus, dass Sie die zugrunde liegende Struktur und die Kette von Entscheidungen verstehen, bevor Sie mit der arbeiten, die dazu geführt hat. Um Code auf hoher Ebene richtig zu verstehen, müssen Sie die Ebene verstehen, auf der er aufgebaut ist, wie er funktioniert, wo seine Stärken und Schwächen liegen. Dies ist rekursiv. Um die darunter liegende Ebene zu verstehen, müssen Sie auch die darunter liegende Ebene verstehen.
Am Ende ist dies der Grund, warum die anständigen Universitäts- / Hochschulkurse in Computing vor allem andere gute Mathematikfähigkeiten verlangen, da dies praktisch die unterste Stufe ist.
Wenn Ihnen Kenntnisse in diesen Bereichen fehlen, ist Ihr Verständnis darunter beeinträchtigt. Je näher Sie der Ebene kommen, auf der Sie eine andere Ebene bedienen, desto wichtiger ist die Erdung.
Also: Müssen Sie Assembler als High-Level-Codierer kennen? Es wird helfen.
quelle
Das war in meinem früheren Leben als Supercomputer-Guru sehr wichtig gewesen. Damals hatte ich das Gefühl, dass Sie eine Maschine nicht verstanden haben, bis Sie mindestens mehrere hundert Zeilen Assembler geschrieben und daran herumgebastelt haben, um die Leistung zu steigern. Da nur sehr wenige Programmierer so tief gehen wollten, war ich wirklich unverzichtbar. Und ich habe immer noch eine gemeinsame Sprache, wenn ich mit HW-Designern spreche.
Wirklich, die Notwendigkeit / der Nutzen dafür ist meistens einige Jahrzehnte her. Zwischen den Compiler-Fortschritten und der Ausführung außerhalb der vorgegebenen Reihenfolge gibt es kaum noch Möglichkeiten, den Helden zu spielen, indem Sie Assembler schreiben. Obwohl ich es nützlich finde zu verstehen, wie die Dinge funktionieren. Ich habe vor, meine Kinder (Studienanfänger, CS-Majors) darin zu unterrichten, in einem sehr vereinfachten Assembler auf einer einfachen virtuellen Maschine zu programmieren, damit sie ein Gefühl dafür haben, was vor sich geht. Hoffentlich können wir mit Sachen wie Unrolling, Software-Pipelining, Caches und Prefetching, Bottomloading usw. spielen. Zumindest werden sie wissen, dass diese Sachen auf einer bestimmten Ebene vor sich gehen.
quelle