Sollte ein Entwickler die Funktionsweise der Computerhardware kennen? [geschlossen]


13

Ich spreche nicht nur von der Speicherzuweisung und Speicherverwaltung (Dinge, die Sie beispielsweise aus C lernen können), sondern auch vom Hardwareaspekt und der internen Funktionsweise der einzelnen Komponenten der Computerhardware und der Kommunikation untereinander.

Wie viele von Ihnen wissen das alles?

Antworten:


31

Es hängt davon ab, was Sie tun.

Wenn Sie ein Embedded-Entwickler sind (und in einem sehr kleinen Gerät sehr nahe am Metall schreiben), müssen Sie alle Ein- und Ausgänge aller Komponenten im System kennen.

Wenn Sie ein Systementwickler sind (und Betriebssysteme oder Gerätetreiber oder sogar Datenbanken schreiben), müssen Sie so gut wie alles wissen, was Sie über Hardware-Schnittstellen auf niedriger Ebene wissen müssen.

Wenn Sie ein Spieleentwickler sind und spät in Ihrem Projekt sind (wo Sie Dinge optimieren), müssen Sie die Vor- und Nachteile des CPU-Caches und der Grafikarchitekturen kennen, die Sie verwenden werden.

Wenn Sie ein Anwendungsentwickler sind, müssen Sie nichts davon wissen, außer die Speichernutzung auf einem vernünftigen Niveau zu halten.

Wenn Sie ein Webentwickler sind, ist es praktisch, Internetprotokolle zu kennen, aber all diese anderen Dinge sind nur erforderlich, um mit Speicherproblemen umzugehen.


20
Wenn Sie sich mit Ihrem Computer auskennen, sind Sie immer ein besserer Entwickler, auch wenn Sie nur Branchenanwendungen ausführen. Solche Kenntnisse sind möglicherweise nicht erforderlich, aber sicherlich wichtig.
Robert Harvey

@ Robert Harvey: Richtig, das ist , warum ich sage „nicht brauchen zu wissen.“ Es tut bestimmt nicht weh, diese Dinge zu wissen. :)
greyfade

2
+1, aber ich kenne (mehr als) ein paar Webentwickler, die nie über die Speichernutzung nachdenken.
Tim Post

-1 für "Wenn Sie ein Anwendungsentwickler sind, müssen Sie nichts davon wissen, außer die Speichernutzung auf einem vernünftigen Niveau zu halten." Einige der größeren Probleme in den hier vorkommenden Systemen werden dadurch verursacht, dass Anwendungsentwickler nicht wissen, wie man Datenbanken verwendet, und dann der Datenbank die Schuld geben, wenn "die Dinge langsam laufen und es nicht mein Code ist; siehe, da ist das Profil".
Andrew Hill

@AndrewHill: Wann ist das eine Hardware-Angelegenheit und keine algorithmische? Es geht darum, das Verhalten der Hardware auf niedriger Ebene zu verstehen, nicht um Algorithmen auf hoher Ebene.
greyfade

12

Nein, Sie nicht zu haben , aber ich denke , es ist eine ausgezeichnete Idee. Ein allgemeiner Überblick darüber, wie die Dinge auf der logischen Ebene funktionieren, hat mir bei der Entwicklung wirklich geholfen.


6

Ich denke, dass die Kommentare über Anwendungsentwickler und Webentwickler falsch sind.

Wenn zum Beispiel jemand eine Webanwendung entwickelt, die viel Sicherheitsmaterial wie ssh oder einen anderen Verschlüsselungsalgorithmus enthält, ist es ziemlich wichtig, dass er weiß, auf welcher Art von Hardware er ausgeführt wird, damit er feststellen kann, ob der Computer tatsächlich damit umgehen kann Die Arbeitsbelastung. Ein anderes Beispiel könnte einen Server enthalten, der irgendeine Art von heruntergeladenem Inhalt hostet. Sie kennen die Funktionen des Festplattenlaufwerks und die Art der Busschnittstelle, an die es angeschlossen ist, besser, wenn Sie mit einer relativ großen Anzahl von Anforderungen rechnen.

Vom Standpunkt der Anwendung aus können Sie erwarten, dass diese Anwendung sowohl algorithmisch als auch grafisch rechenintensiv ist, wenn Sie eine Art CAD-Programm oder 3D-Rendering entwickeln. Es ist ratsam, die Hardware zu verstehen, um sicherzustellen, dass die Anwendung reagiert und verwendet werden kann.

Ich sage nicht, dass Sie so weit gehen müssen, die Vor- und Nachteile des PCI-Protokolls zu verstehen, aber Sie sollten besser verstehen, wozu die Schnittstelle und die Hardware in der Lage sind.

Letztendlich ist es wichtig, egal welche Art von Entwicklung Sie durchführen. Die für Ihr Verständnis erforderliche Detailstufe ist umstritten.


2

Für einen professionellen Programmierer, sehe ich es als eine ganzheitliche Herangehensweise an das gesamte Verständnis System , anstatt nur zu wissen , die Syntax einer bestimmten Programmiersprache du jour . Ich finde, es hilft Programmierern (und Analysten), kluge Entwurfsentscheidungen zu treffen und fundiertere Algorithmus- und Datenstrukturentscheidungen zu treffen.

Nach meiner Erfahrung wissen die besten Programmierer in unterschiedlichem Maße über das Innenleben Bescheid, sei es über das Verständnis des systemeigenen Montageanweisungssatzes für eine Zielplattform, über einen Computer- Einführungskurs in der Schule, über rudimentäre digitale Elektronik oder darüber , ob sie in der Lage sind, Details zu verstehen Beschreibungen von CPU- und GPU-Kernen in den neuesten Modellen, die besten haben ein umfassenderes Wissen als ihre weniger herausragenden Kollegen.


1

Ich bin mir nicht sicher, ob es hilft, aber ich fühle mich wohler, wenn ich mehr über das System weiß, an dem ich arbeite, als ich wirklich brauche. Als ich jünger war, mochte ich es nicht, die Assemblersprache des Systems zu kennen, an dem ich arbeitete. Entweder habe ich mich verändert, oder ich habe genug gelernt, dass eines mehr mein Gefühl für das System nicht sehr erweitern wird. Ich war noch nie ein Hardwaretyp, aber ich kann einen Computer auseinander nehmen und die verschiedenen Subsysteme und ihre Interaktion benennen.


0

Das Wenige, von dem ich weiß, dass ich es vor fast 25 Jahren in einer Klasse für Computerarchitektur gelernt habe, und zwar in einer nicht-realen Architektur.

Ich programmiere hauptsächlich Anwendungen auf verschiedenen Plattformen. Es gab eine Zeit, in der ich Code entwickelte, der nicht nur auf x86-Standardhardware, sondern auch auf Sparc-, PA-RISC- und anderen Serverarchitekturen ausgeführt werden konnte. Kenntnisse auf diesem Niveau sind für meine Arbeit einfach nicht erforderlich.


0

Ich unterrichte Java-Programmierung als AP-Oberschulklasse. Ich habe festgestellt, dass Studenten, die etwas über die Funktionsweise eines Computers wissen, das Verständnis von Programmierkonzepten verbessern können.

Ich gehe nicht über Bord - nur einfache Konzepte wie die Art und Weise, wie Dinge im Gedächtnis gespeichert werden, scheinen den Schülern zu helfen.


0

Ich werde dies wie im Titel gefragt beantworten:

Ja, ein Entwickler sollte die Funktionsweise der Hardware kennen. Wie viel davon abhängt von der Art des Entwicklers und seinen Zielen, der verfügbaren Zeit und dem persönlichen Interesse. Die Priorität sollte natürlich auf den unmittelbaren Werkzeugen, Techniken usw. liegen, die sie in ihrem Bereich einsetzen. Diese Meinung ist in etwa so, als ob man ein runder Mensch wäre. Je mehr Sie über Dinge außerhalb Ihres Handwerks wissen, ohne Ihr Handwerk zu opfern, desto besser.

Das bedeutet nicht, dass Sie mit dem Cheese Whiz verrückt werden müssen. Verschaffen Sie sich einen guten Überblick über die Hardware, wie die Teile interagieren und wie Betriebssysteme sie verwenden. In diesem Sinne schlage ich vor, ein Handbuch mit Betriebssystemkonzepten für alle Entwickler zu lesen.

Kenne ich das alles? Mist, nein. Ich habe so viele nutzlose Informationen über SCSI vergessen, dass es nicht einmal lustig ist. Es war jedoch eine unschätzbare Erfahrung, davon zu lernen. Ich habe auch viele andere hardwarebezogene Details vergessen, erinnere mich aber an die wichtigen Konzepte, die ich aus diesem Wissen gelernt habe.

Daher empfehle ich Ihnen, sich mit der Hardware vertraut zu machen. Tun Sie es in einem angemessenen Tempo, abhängig von Ihren Bedürfnissen. Lernen Sie so viele Details wie möglich, konzentrieren Sie sich jedoch auf die Konzepte.


0

Jeder Entwickler sollte die grundlegenden Konzepte der Computertechnik kennen: Binärarithmetik, Basiskonvertierung, Boolesche Algebra, Logikgatter, Zusammensetzung einer CPU (und was die Komponenten tun), Cache, virtueller Speicher, Komprimierung, Fehlererkennung und -korrektur ...

Inwieweit diese bekannt sein sollten, hängt von der Arbeit des Programmierers ab. Wie andere bereits gesagt haben, muss ein Entwickler von eingebetteten Systemen viel besser mit den Hardwarefunktionen und dem Schreiben von Software vertraut sein, die die Hardware am besten nutzt, als beispielsweise ein Webentwickler.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.