Kann die zunehmende Verwendung immer höherer Programmiersprachen zu einem Defizit an Programmierern mit Kenntnissen der Computerarchitektur führen?

15

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?

gablin
quelle

Antworten:

16

Es kann , wird aber wahrscheinlich nicht zu einem Problem führen.

Es ist nur Wirtschaft. Wenn die überwiegende Mehrheit der Menschen die Fähigkeit verliert, die zugrunde liegende Architektur zu verstehen, und es immer noch ein großes Bedürfnis gibt, die zugrunde liegende Architektur zu verstehen, dann haben diejenigen, die Arbeit haben, und werden mehr bezahlt, während diejenigen, die dies nicht tun, nur haben Jobs, bei denen das nicht gebraucht wird (und vielleicht noch mehr bezahlt wird ... wer weiß?).

Ist es hilfreich zu wissen? Absolut. Du wirst wahrscheinlich besser sein. Ist es in den meisten Fällen notwendig? Nein. Deshalb ist Abstraktion so großartig. Wir stehen auf den Schultern von Riesen, ohne selbst Riesen sein zu müssen (aber es wird immer Riesen geben).

Ryan Hayes
quelle
4
Aber alle Abstraktionen sind undicht. Die zugrunde liegende Architektur zu kennen, ist ein Muss, wenn Sie der Ansprechpartner für die Fehlerbehebung bei undichten Abstraktionen sein möchten.
Dsimcha
5
@dsimcha, Einverstanden, aber um der richtige Ansprechpartner zu sein, müssen "die anderen" zu Ihnen kommen ;-) Wenn jeder alles wissen muss, ist die Abstraktion kläglich gescheitert.
Preets
1
@Preets, Und das ist , warum viele Abstraktionen haben kläglich versagt. Es ist ein Beweis dafür, dass eine Abstraktion bereits gescheitert ist, wenn es überhaupt Platz für einen Go-to-Guy gibt.
Pacerier
@ Ryan, es wird tatsächlich zu einem Problem führen, bei dem in Zukunft die Welt mit Apps überflutet wird, die aufgrund von Schichten über Schichten von undichten Abstraktionen voller subtiler Fehler sind. Es ist erstaunlich genug, dass Unternehmen wie Google mit unendlichen Ressourcen immer noch Fehler in ihren Kern-Apps haben können.
Pacerier
3
@Pacerier google verfügt nicht über unendliche Ressourcen und macht Anwendungen, die mehrere Größenordnungen komplexer sind und aus mehreren Größenordnungen mehr Codezeilen bestehen als die meisten anderen. Zu behaupten, jeder sollte sich mit Computer-Kram auskennen, weil alle Abstraktionen lecken können, ist wie zu sagen, jeder sollte wissen, wie man ein Haus ohne Werkzeug von Grund auf neu baut, weil ein Sturm kommen und sein Haus niederreißen könnte. Es ist einfach nicht machbar (oder klug), solche Ressourcen auszugeben.
Sara
9

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.

Mason Wheeler
quelle
5
Ich habe gehört, wie es ausgedrückt wird als "Sie müssen die Abstraktion eine Schicht tiefer kennen, von wo Sie arbeiten". Nun, es war etwas prägnanter. Mein Gedächtnis ist fehlerhaft. Wenn Sie also in C oder Delphi arbeiten, sollten Sie wissen, wie Assembly funktioniert. Wenn Sie in Smalltalk oder Java arbeiten, sollten Sie wissen, wie Ihre VM funktioniert. (Vermutlich sollten Sie immer etwas über Assembly wissen !) Wenn Sie mit TCP arbeiten, sollten Sie wissen, wie IP funktioniert. Und so weiter.
Frank Shearar
1
Ich meine, Sie könnten noch weiter gehen: Warum sollte es ausreichen, nur die Montage zu kennen? Das ist nur eine handgehaltene Abstraktion auf hoher Ebene über die binären CPU-Anweisungen. aber warte! Maschinensprache? Das ist nur eine Abstraktion! Sie müssen lernen, wie die CPU mit Transistoren aufgebaut ist, um Logikgatter zu bauen! und der Bus und die Register. aber warte! Transistoren? Das ist nur eine Abstraktion für eine bestimmte Konfiguration von Atomen. und Atome sind nur eine Abstraktion über Fluktuationen in Quantenfeldern. Dies javascript:alert("Hello world")erfordert letztendlich nur einen Doktortitel in Stringtheorie.
Sara
1
@kai Du bist ein bisschen lächerlich . Ich stimme Ihnen eher zu, dass es normalerweise nicht der Fall ist, dass Sie für die meisten Anwendungen mehrere Ebenen verstehen müssen . Aber wir sprechen von Randfällen, nicht von alltäglichen Dingen. Klar, Sie müssen nicht wissen, wie das Wasser funktioniert, um den Abwasch zu erledigen. Aber wenn schmutziges Wasser Ihr Waschbecken auffüllt, sollten Sie wahrscheinlich etwas darüber lernen, bevor Sie versuchen, es zu reparieren. Oder Sie rammen einfach ein Stück Bewehrung in den Abfluss, bis es wieder funktioniert, und wen interessiert es, wohin das Wasser fließt. (Forts.)
DrewJordan
1
@DrewJordan meinen Punkt ist nur , dass: wenn Sie ein Profi sind, der muss darüber wissen , und eine bestimmte Klasse von Problemen zu beheben (oder nur ein großes privates Interesse hat), dann ehrlich gesagt ist es ziemlich absurd zu behaupten , dass Sie müssen das Innenleben kennen und seltsame Feinheiten von jedem Werkzeug, das Sie verwenden. Ich habe den Standpunkt lediglich zu seiner logischen Schlussfolgerung gezogen. Wenn Sie wissen, wie ein Ethernet-Kabel aufgebaut ist, können Sie zwar ein neues Kabel bauen, vorausgesetzt, Sie verfügen über die richtigen Tools, wenn Ihre Internetverbindung ausfällt. Es ist jedoch eine reine Verschwendung, Zeit und Geld für das Erlernen von Kenntnissen zu investieren, wenn Sie 20 Schichten darüber arbeiten.
Sara
1
@DrewJordan Natürlich muss JEMAND all diese Dinge wissen, damit jemand sie reparieren kann, wenn eine Abstraktion kaputt geht, aber der ganze PUNKT der Abstraktionen besteht darin, die Anzahl der Leute, die die Details kennen müssen, auf ein Minimum zu beschränken, damit sich die große Mehrheit konzentrieren kann Sachen erledigt kriegen. Wo Sie willkürlich die Grenze ziehen, an der die Dinge "zu niedrig" werden, hängt nur davon ab, womit Sie persönlich arbeiten, wie in meinem Argumentum ad absurdium dargestellt (das ist kein Trugschluss, ich werde Sie wissen lassen!)
Sara
5

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.

David Hollman
quelle
2
Theoretisch ja, aber das sind ein paar ziemlich große Wenns .
Mason Wheeler
1

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.

Huperniketes
quelle