Zitat aus Wikipedia des Artikels "Hochrangige Programmiersprache":
Eine High-Level-Programmiersprache ist eine Programmiersprache mit starker Abstraktion von den Details des Computers. Im Vergleich zu Low-Level-Programmiersprachen werden möglicherweise Elemente in natürlicher Sprache verwendet, sie sind einfacher zu verwenden oder plattformübergreifender portierbar. Solche Sprachen verbergen die Details von CPU-Vorgängen wie Speicherzugriffsmodelle und Bereichsverwaltung.
Dh mit zunehmender Programmiersprache entfernt sich der Programmierer immer weiter von der Hardware, auf der das Programm ausgeführt wird.
Jetzt kenne ich die Statistiken des Sprachgebrauchs über Ebenen hinweg nicht, aber ich würde vermuten, dass die Sprachen der höheren Ebenen die Sprachen der unteren Ebenen immer mehr ersetzen. Wenn ja, kann dies zu einem Defizit an Programmierern mit Computerarchitekturkenntnissen führen? Wäre das ein Problem für die Branche?
Ich glaube schon. Es ist ein Trend, der mich beunruhigt. Keine Abstraktion ist perfekt ; Wenn es eine perfekte Möglichkeit gäbe, komplexe Probleme zu vereinfachen, würde sie das Original sehr schnell ersetzen. (Das ist in der Vergangenheit passiert, gelegentlich mit Computern, und viel häufiger in anderen Bereichen, in denen die Abwärtskompatibilität nicht so wichtig ist wie bei uns, beispielsweise in der Physik.)
Dies bedeutet, dass jedes Mal, wenn Sie eine Abstraktion verwenden, ein wichtiges Stück essentieller Komplexität vor Ihnen verborgen ist. Wenn Sie nicht wissen, was das ist, warum es da ist und was es tut, schreiben Sie versehentlich große Zugwracks und wissen nicht, wie man sie repariert, weil Sie nicht wissen, was wirklich los ist.
Jeder, der versucht, Ihnen etwas anderes mitzuteilen, verkauft entweder Schlangenöl oder hat einfach nicht viel Erfahrung mit seriöser Software. Bei der Arbeit arbeite ich an einem Programm, das einen guten Prozentsatz aller Fernseh- und Radiosender in den USA abspielt. Wenn Stationen und Netzwerke größer und komplexer werden, treffen schnelle und schmutzige Techniken, die beim Entwerfen eines Produkts für eine kleine Station gut funktionieren, auf große technische Wände, wenn sie für ein Netzwerk mit 50 Stationen und 200 Kanälen implementiert werden! Ohne ein tiefes Verständnis der Funktionsweise der Sprache (und in erster Linie einer effizienten Sprache) und ein tiefes Verständnis der Funktionsweise der Datenbank wären unsere Programmierer niemals in der Lage gewesen, das Produkt erfolgreich zu skalieren.
Dies ist auch keine isolierte Geschichte. Software wird immer komplexer und nicht einfacher, und ich befürchte, dass dieses technische Know-how zu einer verlorenen Kunst wird und die Programme von morgen schlechter als die von heute und nicht besser werden.
quelle
javascript:alert("Hello world")
erfordert letztendlich nur einen Doktortitel in Stringtheorie.Ja, ich denke, die Leute werden Hardware mit fortschreitenden Sprachen (und ebenso mit fortschreitenden Anweisungssätzen) viel weniger verstehen. Aber wie schon an vielen anderen Orten bemerkt, ist die Hauptbeschränkung für die meisten Programme heutzutage nicht die CPU-Zeit oder -Effizienz, sondern die Programmiererzeit. Wenn Leute, die Sprachen entwerfen, ihre Arbeit tun, um die Abstraktion effizienter zu gestalten, und wenn Leute diese Abstraktionen weiterhin richtig verwenden, ist ein Verständnis der Computerarchitektur nicht unbedingt erforderlich. Zumindest ein vollständiges Wissen ist heutzutage nicht mehr grundlegend , um ein guter Programmierer zu sein.
quelle
Nein, es wird nicht zu einem Defizit an Programmierern mit Computerarchitektur-Kenntnissen führen. Sprachen werden verwendet, um Probleme in einer bestimmten Domäne zu lösen. Wenn Sie ein bestimmtes Problem lösen möchten, verwenden Sie die entsprechende Sprache oder eine Sprache, die Ihren Ressourcen entspricht.
Welche Bereiche benötigen in Wirklichkeit Kenntnisse über die Architektur des Computers? Das muss an eine bestimmte Hardwarearchitektur gebunden sein? Betriebssysteme? Gerätetreiber? Sicher, aber auch dann benötigen nur Teile eines solchen Codes spezifische Architekturkenntnisse.
Leistungsverbesserung? Ja, Sie können Kenntnisse der Computerarchitektur anwenden, um die Leistung von Algorithmen zu verbessern. Zwei andere Faktoren wirken sich jedoch stärker auf die Leistung aus: die Verwendung besserer Algorithmen und die Kenntnis der Laufzeitumgebung der Sprache.
Im Wesentlichen lösen abstraktere Programmiersprachen Probleme, für die Details der Computerarchitektur nicht erforderlich sind. Sie ermöglichen die Lösung weiterer Probleme. Die Leute, die sie benutzen, benutzen sie nicht, um maschinenabhängige Probleme zu lösen. Menschen, die maschinenabhängige Probleme lösen müssen, werden weiterhin maschinenfähige Sprachen verwenden. Dies ist kein Nullsummenproblem.
quelle