Ich bereite mich auf ein Praktikum als Spieleprogrammierer bei einer weltbekannten Spieleentwicklungsfirma vor. Als ich auf der Website nach den erforderlichen Voraussetzungen suchte, wurde mir Folgendes angezeigt:
Zusätzlicher Vorteil
- Kenntnisse in DirectX / OpenGL.
- Starke Kenntnisse in 3D-Mathematik und -Physik.
- Visual Studio IDE für die C ++ - Entwicklung.
- Systemprogrammierung und Betriebssystemkonzepte.
Was genau verstehen sie unter Systemprogrammierung und Betriebssystemkonzepten?
Sollte ich Windows-Programmierung lernen? Oder sollte ich mit Linux-Programmierung arbeiten (dh sie möchten, dass ich die wichtigen Konzepte kenne)? Oder ist es etwas ganz anderes?
terminology
career
Dhannanjai
quelle
quelle
Antworten:
"Systemprogrammierung" (oder "Systemprogrammierung") bedeutet in der Regel, dass die Programmierung auf einer niedrigeren Abstraktionsebene als beispielsweise die Gameplay-Programmierung erfolgt. Bei der Gameplay-Programmierung geht es in der Regel darum, die eigentlichen Spielmechanismen und Features zu erstellen, die ein Benutzer möglicherweise sieht, während bei der Systemprogrammierung eher die Frameworks erstellt werden, auf denen Gameplay-Programmierer arbeiten.
Dies kann Grafiken, Laden und Streamen von Ressourcen, Audio, Speicherverwaltung, Datei-E / A, Plattformabstraktions-APIs usw. bedeuten. Die Details sind sehr unterschiedlich und da es in der Spielebranche keine Standards für Jobtitel gibt, gibt es auch keine Standards für die Namen von Programmierdomänen. In einem Studio können Sie feststellen, dass "Systemprogrammierung" alles bedeutet, was ich oben aufgeführt habe. Zum anderen stellen Sie möglicherweise fest, dass sie "Grafikprogrammierung" als separate Domäne unterscheiden und jede andere Nicht-Gameplay-Programmieraufgabe als "Systemprogrammierung" bezeichnen. In einem anderen Fall verwenden sie den Begriff möglicherweise überhaupt nicht und nennen ihn einfach "Motorprogrammierung".
Da es sich um eine Domäne niedrigerer Ebene handelt und in der Regel eine direktere Verbindung mit den plattformspezifischen APIs für die Plattformen besteht, für die das Spiel entwickelt wurde, sind Kenntnisse über diese Plattformen ebenso hilfreich wie Kenntnisse über die allgemeinere Domäne (z. B. von Betriebssystemkonzepten, ohne Rücksicht darauf, wie bestimmte Betriebssysteme funktionieren, wie etwa der virtuelle Speicher oder wie Threads funktionieren, wie die E / A-Pufferung funktioniert, und so weiter.
quelle
Joshs Antwort ist wirklich gut, aber ich dachte, ich würde ein paar Stichpunkte über das Systemteam, in dem ich arbeite, fallen lassen. Ich arbeite nicht an Systemen, aber ich arbeite viel mit ihnen. Die Aufgaben eines Systems-Teams sind von Unternehmen zu Unternehmen sehr unterschiedlich.
Unser System-Team kümmert sich um viele Dinge:
Hier gibt es viel Windows- und Linux-Domänenwissen sowie viel Wissen über Physik, Hauptspiellogik und Low-Level-Speichermanagement. Systemteams werden in der Regel zumindest teilweise in jedes unterstützte Betriebssystem einbezogen, da die meisten ihrer Projekte auf jedem Betriebssystem auf einer relativ niedrigen Ebene ausgeführt werden.
Einige Dinge, die unter ein "Systems" -Team fallen könnten, das wir in separate Teams aufteilen (mit dem unser Systems-Team jedoch noch immer ziemlich stark interagiert):
quelle
Die Systemprogrammierung ist sehr gut definiert, aber Unternehmen versuchen, sie an ihre Bedürfnisse anzupassen. Wenn Sie Systemaufrufe verwenden oder schreiben, führen Sie die Systemprogrammierung durch. Systemaufrufe sind die Funktionen, die vom Kernel oder von den Userspace-Treibern bereitgestellt werden. Dies schließt OpenGL ein, da es im Grunde genommen ein Treiber ist.
quelle
Die oben aufgeführten zusätzlichen Vorteile beziehen sich hauptsächlich auf die Programmierung der Game-Engine, sofern dies erforderlich ist. Daher müssen APIs auf niedriger Ebene verwendet werden. Die Systemprogrammierung hier setzt voraus, dass Sie wissen, wie Sie OS-Audio, Prozessverwaltung, Dateimanipulation, Netzwerkanrufe usw. anrufen können.
quelle
Da sie auf Visual Studio verweisen, bezieht sich die Systemprogrammierung auf das Schreiben von Programmen speziell für Windows-Betriebssysteme, dh Windows-Systemaufrufe (zum Beispiel gibt es keine Fork-Exec-Kette), Benutzerkonten, wo Ihre benutzerspezifischen Daten abgelegt werden sollen, Modelle für die gemeinsame Datennutzung Windows Nachschlagen, z. B. wie Sie den aktuellen Benutzer in Visual C ++ überprüfen oder einen neuen Prozess starten können
Betriebssystemkonzepte, siehe Scheduling, Dateiabstraktion, Threads, Userspace usw. In DevWiki und Foren kann eine gute Lektüre erfolgen
Die Benutzerauthentifizierung erfolgt beispielsweise in beiden Abschnitten, da Windows ein einzelnes Benutzer-Betriebssystem ist, das eine viel tiefere Integration von Benutzerverwaltung und Benutzeroberfläche im Kernel aufweist.
Der MSDN ist die Wissensdatenbank für alle Windows-Programmieraufgaben, Bibliotheken usw. https://msdn.microsoft.com/
Stackoverflow für die eigentliche Codierung, wenn Sie nicht weiterkommen.
quelle