Was sollte jeder Programmierer über Hardware-Interna wissen? Ich meine nicht Hardware-Montage oder Wartung, sondern wie die Hardware tatsächlich funktioniert.Was sollte jeder Programmierer über Hardware-Interna wissen?
Antwort
sollten Sie wissen über:
- Interner Speicher (ROM/RAM), die Differenzen mit Speicher (HDD/DVD/CD). (Unterschiede in Geschwindigkeit und Zugriffsmethode).
- CPU/CORE, was sie tun und was die Auswirkungen von mehreren Kernen sind.
- I/O, wahrscheinlich nicht so viel, hängt vom Programmierfeld ab.
- Wahrscheinlich Adress- und Datenbus. Was der Effekt der Größen beider ist.
- Hardware Interrupts, diese Hardware kann das aktuelle Programm unterbrechen.
Es auf dem System abhängig ist, entwickeln Sie mit, wenn smalltalk oder Lispeln mit würde ich sagen, keine ^^ In Python Gleitkomma Sachen gut sein würde. In C würde ich sagen, alles, was Sie finden können ^^
Die Computer sprechen binär. Genauer gesagt, das Verständnis der Gleitkommadarstellung. "Warum ist meine Mathematik falsch?" Ist wahrscheinlich die doppelte Frage zu SO.
Ich würde einfach empfehlen das Programming from the Ground Up Buch zu lesen:
Dies ist ein Einführungsbuch in der Programmierung und Informatik Assemblersprache verwendet wird. Es geht davon aus, dass der Leser noch nie zuvor programmiert hat und führt die Konzepte von Variablen, Funktionen und Flusskontrolle ein. Der Grund für die Verwendung der Assembler-Sprache ist, dass der Leser denkt, wie der Computer tatsächlich darunter funktioniert. Zu wissen, wie der Computer von einem "Bare-Metal" Standpunkt aus funktioniert, ist oft der Unterschied zwischen Top-Level-Programmierern und Programmierern, die ihre Kunst nie ganz beherrschen können.
Alt, aber IMO bleibt relevant.
Endianness ist ein wichtiges Konzept zu verstehen. Das ungewollte Verwechseln Ihrer Byte-Reihenfolge kann Stunden schmerzhaften Debugging verursachen.
Da Computer schneller, einige grundlegende Aspekte der Hardware, die konsequent im Allgemeinen seit Jahrzehnten haben, sind zu ändern. Während es früher so war, dass man die Leistung eines Stücks Code durch Untersuchen des erzeugten Maschinencodes und Aufsummieren der Anzahl von Zyklen, die für die verschiedenen Anweisungen erforderlich sind, abschätzen konnte, werfen neue Hyperthreading-Prozessoren solche Berechnungen aus dem Fenster. In vielen Fällen wird es immer wichtiger, Compiler und Prozessoren als bösartige Blackboxes zu betrachten, die das Verhalten Ihres Codes auf jede Weise beeinflussen, die sie sich vorstellen können und die immer noch den Sprachspezifikationen entspricht. Als Programmierer, der sich sehr gut mit Hardware-Interna auskennt, ist das frustrierend. Ich kann die Notwendigkeit verstehen, aber es ist ärgerlich, dass ein großer Teil meines Wissens weniger nützlich wird.
Nehmen wir zum Beispiel an, Sie hätten eine Aufgabe bekommen, einen Treiber für einen Roboter zu machen. Sie müssten das Innere des Roboters verstehen. Zum Beispiel ist der Roboter über USB mit dem Computer verbunden. Der Treiber sendet dann einen Befehl als Paket. Der Roboter interpretiert diesen Befehl und beginnt zu tanzen. Jetzt sagst du, du hättest diese Aufgabe bekommen und du hättest jetzt eine Vorstellung von den Interna des Roboters.Sie haben keinen Fahrer, weil Sie nicht wissen, wie man es programmiert. Was jetzt passiert, ist, dass Sie ratlos sind und Sie die Interna des Roboters studieren, weil Sie dachten, dass Sie nichts über die Hardware lernen müssten. Alles in allem ist dies nicht für jeden notwendig, aber es ist etwas, das Ihnen auf lange Sicht helfen könnte.
- 1. Was jeder C++ Entwickler über das Verknüpfen wissen sollte
- 2. Wie viel sollte ein Programmierer über Systemadministrator wissen?
- 3. Was C# Wissen sollte ich haben?
- 4. Was sollte ich über den F # CTP wissen?
- 5. Was sollte ein .NET-Entwickler über MSBuild wissen?
- 6. Was sollte ein Entwickler über Interoperabilität mit verwaltetem Code wissen?
- 7. Was sollte ich über das antisoziale Verhalten von Benutzern wissen?
- 8. Was sollte ich über Git wissen, bevor ich es benutze?
- 9. Muss ein Qt 5 Programmierer über DEPENDPATH qmake Variable wissen?
- 10. Was ist über IIS zu wissen?
- 11. Was soll ich über Joomla wissen?
- 12. Was sind einige Power-Befehle, die jeder TortoiseSVN/Subversion-Benutzer wissen sollte?
- 13. Was sollte ich wissen bevor ich Apache solr starte?
- 14. Was muss ich über C++ 0x wissen?
- 15. Was wissen Sie über Avaloq-Skripte?
- 16. Was muss ich über dynamische Programmierung wissen?
- 17. Bei der Migration von Java nach C# Was sollte ich über Accessor-Klassen wissen
- 18. Was sollte ich über das Senden von E-Mails in einem Hintergrund-Thread wissen? ASP.NET
- 19. Was sollte ich über die Entwicklung für 64-Bit-Anwendungen wissen?
- 20. Gibt es etwas, was ich über die jquery .text-Methode wissen sollte?
- 21. Was sollte ein Entwickler wissen, bevor er mobile Apps erstellt?
- 22. Was sollte ich bei der UDP-Socket-Programmierung wissen?
- 23. Was alles sollte ein Experte C# /. Net/WPF Entwickler wissen?
- 24. Was sollte ich wissen, wenn ich einen Namensraumnamen auswähle?
- 25. Welchen Skillsatz sollte ein Low-Level-Programmierer besitzen?
- 26. Auf welche Dinge sollte sich ein Amateur-Programmierer konzentrieren?
- 27. Was ist SRV in MS RPC und was sollte ich darüber wissen?
- 28. Was sollte ich wissen, wenn ich von MIPS auf x86-Assembly umschalte?
- 29. Wie muss ich als Programmierer über 64-Bit-Fenster nachdenken?
- 30. ASP-Programmierer denken über das Lernen von PHP
Das wäre besser bei programmers.stackexchange oder einem Community-Wiki. – wheaties
Dies sollte auf jeden Fall eine Gemeinschaftswiki Frage sein – configurator
@configurator: nein, es sollte eine geschlossene Frage sein. Umfragen gehören nicht hierher. –