Я готовлюсь к стажировке в качестве программиста игры во всемирно известной компании по разработке игр. Когда я искал на их сайте необходимые предпосылки, он показал мне это:
Добавленное преимущество
- Знание DirectX / OpenGL.
- Сильная команда по 3D математике и физике.
- Visual Studio IDE для разработки на C ++.
- Системное программирование и концепции ОС.
Что именно они подразумевают под системным программированием и концепциями ОС?
Должен ли я изучать программирование Windows? Или я должен заняться программированием в Linux (то есть они хотят, чтобы я знал важные понятия). Или это что-то совершенно другое?
terminology
career
Dhannanjai
источник
источник
Ответы:
«Системное программирование» (или «системное программирование») означает программирование, выполненное на более низком уровне абстракции, чем (например) программирование геймплея. Программирование геймплея обычно связано с созданием реальной игровой механики и фронтальных возможностей, которые может видеть пользователь, в то время как системное программирование - это скорее создание каркасов, на которых работают программисты геймплея.
Это может означать графику, загрузку и потоковую передачу ресурсов, аудио, управление памятью, ввод-вывод файлов, API-интерфейсы абстракции платформы и так далее. Детали довольно сильно различаются, и, поскольку в игровой индустрии не существует стандартов для названий должностей, также не существует стандартов для названий областей программирования. В одной студии вы можете обнаружить, что «системное программирование» означает все, что я перечислил выше. С другой стороны, вы можете обнаружить, что они различают «графическое программирование» как отдельный домен и называют любую другую задачу, не связанную с программированием геймплея, «системным программированием». В еще одном случае они могут вообще не использовать этот термин и просто назвать его «программирование двигателя».
Поскольку это домен более низкого уровня, и обычно он предполагает более непосредственное взаимодействие с API-интерфейсами для каждой платформы для платформ, для которых будет полезно знание этих платформ, равно как и знание более общего домена (например, концепций ОС без учета того, как работает конкретная ОС, например, что такое виртуальная память или как работают потоки, как работает буферизация ввода-вывода и так далее).
источник
Ответ Джоша действительно хорош, но я подумал, что я бы хотел сказать несколько слов о команде систем, где я работаю. Я не работаю над системами, но я много с ними работаю. Обязанности системной команды сильно различаются от компании к компании.
Наша команда по системам отвечает за множество вещей:
Здесь много знаний о Windows и Linux, а также много знаний о физике, основной игровой логике и низкоуровневом управлении памятью. Системные команды обычно участвуют, по крайней мере, в какой-то части в каждой поддерживаемой ОС, поскольку большинство их проектов находятся на каждой ОС на довольно низком уровне.
Некоторые вещи, которые могут попадать в группу «Системы», которую мы разделяем на отдельные группы (но наша группа по Системам все еще взаимодействует довольно активно):
источник
Системное программирование очень хорошо определено, но компании пытаются расширить его до своих потребностей. Если вы используете или пишете системные вызовы, вы занимаетесь системным программированием. Системные вызовы - это функции, предоставляемые ядром или драйверами пространства пользователя. Это включает в себя OpenGL, поскольку это в основном драйвер.
источник
Перечисленные выше дополнительные преимущества в основном предназначены для программирования игрового движка, когда это необходимо, и, следовательно, включает использование API низкого уровня. Системное программирование предполагает, что вы знаете, как совершать звонки на аудио ОС, управлять процессами, манипулировать файлами, сетевыми вызовами и так далее ...
источник
Поскольку они ссылаются на Visual Studio, системное программирование относится к написанию программ специально для операционных систем Windows, что означает: системные вызовы Windows (например, нет цепочки fork-exec), учетные записи пользователей, куда помещать пользовательские данные, модели совместного использования данных в Windows Посмотрите, например, как вы можете проверить текущего пользователя в Visual C ++ или Как начать новый процесс
Концепции ОС, относящиеся к планированию, абстракции файлов, потокам, пользовательскому пространству и т. Д. Os dev wiki и форумы могут быть хорошо прочитаны
Аутентификация пользователя проводится, например, в обоих разделах, поскольку windows - это однопользовательская операционная система, которая имеет более глубокую интеграцию ядра управления пользователями и пользовательским интерфейсом.
MSDN является базой знаний для всего, что касается программирования Windows, API, библиотек и т. Д. Https://msdn.microsoft.com/
Stackoverflow для фактического кодирования, если вы застряли.
источник