Estou me preparando para um estágio como programador de jogos em uma empresa de desenvolvimento de jogos de renome mundial. Quando procurei no site deles os pré-requisitos necessários, ele me mostrou o seguinte:
Vantagem adicionada
- Conhecimento de DirectX / OpenGL.
- Forte comando em Matemática e Física 3D.
- Visual Studio IDE para desenvolvimento em C ++.
- Programação de sistemas e conceitos de SO.
O que exatamente eles querem dizer com programação do sistema e conceitos de SO?
Devo estudar a programação do Windows? Ou devo ir com a programação Linux (o que significa que eles querem que eu conheça os conceitos importantes). Ou é algo totalmente diferente?
terminology
career
Dhannanjai
fonte
fonte
Respostas:
"Programação de sistema" (ou "programação de sistemas") tende a significar programação feita em um nível mais baixo de abstração do que (por exemplo) programação de jogo. A programação de jogabilidade geralmente consiste em criar a mecânica de jogo e os recursos de frente que o usuário pode ver, enquanto a programação de sistemas é mais sobre a construção de estruturas nas quais os programadores de jogabilidade trabalham.
Isso pode significar gráficos, carregamento e streaming de recursos, áudio, gerenciamento de memória, E / S de arquivo, APIs de abstração de plataforma etc. Os detalhes variam um pouco e, como não existem padrões para os cargos na indústria de jogos, também não existem padrões para os nomes de domínios de programação. Em um estúdio, você pode achar que "programação de sistemas" significa tudo o que listei acima. Em outro, você pode achar que eles distinguem "programação gráfica" como um domínio separado e chamam todas as outras tarefas de programação que não são de gameplay de "programação de sistemas". Em outro caso, eles podem não usar o termo e simplesmente o chamam de "programação do mecanismo".
Como é um domínio de nível inferior e normalmente envolve uma interface mais direta com as APIs específicas da plataforma para qualquer plataforma para a qual o jogo está sendo construído, ter conhecimento dessas plataformas será útil, assim como ter conhecimento do domínio mais geral (por exemplo, , dos conceitos de sistema operacional, independentemente de como o sistema operacional funciona, como o que é a memória virtual ou como os threads funcionam, como funciona o buffer de E / S, etc.).
fonte
A resposta de Josh é realmente boa, mas eu pensei em descartar alguns pontos sobre a equipe de Sistemas onde trabalho. Não trabalho em sistemas, mas trabalho muito com eles. As responsabilidades de uma equipe de sistemas variam muito de empresa para empresa.
Nossa equipe de sistemas é responsável por muitas coisas:
Há muito conhecimento de domínio do Windows e Linux aqui, além de muito conhecimento de física, lógica de jogo principal e gerenciamento de memória de baixo nível. As equipes de sistemas geralmente estarão envolvidas, pelo menos em parte, em cada SO suportado, pois a maioria de seus projetos fica em cada SO em um nível bastante baixo.
Algumas coisas que podem pertencer a uma equipe de "Sistemas" que dividimos em equipes separadas (mas nossa equipe de sistemas ainda interage bastante):
fonte
A programação de sistemas é muito bem definida, mas as empresas tentam estendê-la às suas necessidades. Se você estiver usando ou gravando chamadas do sistema, estará fazendo a programação do sistema. As chamadas do sistema são as funções fornecidas pelo kernel ou pelos drivers do espaço do usuário. Isso inclui o OpenGL, pois é basicamente um driver.
fonte
As vantagens adicionadas listadas acima são principalmente para a programação de mecanismos de jogos, quando necessário, o que envolve a utilização de APIs de baixo nível. A programação de sistemas aqui espera que você saiba como fazer chamadas para o áudio do SO, gerenciamento de processos, manipulação de arquivos, chamadas de rede e assim por diante ...
fonte
Como eles fazem referência ao Visual Studio, a programação do sistema se refere à gravação de programas especificamente para os sistemas operacionais Windows, o que significa: syscalls do Windows (por exemplo, não existe uma cadeia de garfos), contas de usuário, onde colocar dados específicos do usuário, modelos de compartilhamento de dados em windows Procure, por exemplo, como você pode verificar o usuário atual no visual c ++ ou como iniciar um novo processo
Conceitos de SO, consulte agendamento, abstração de arquivo, threads, espaço de usuário etc. os wiki e fóruns do dev podem ser uma boa leitura
A autenticação do usuário é, por exemplo, nas duas seções, já que o Windows é um sistema operacional de usuário único, que possui uma integração do kernel muito mais profunda do gerenciamento e da interface do usuário.
O msdn é a base de conhecimento de todas as coisas que programam APIs, bibliotecas, etc. https://msdn.microsoft.com/
Fluxo de pilha para a codificação real, se você estiver preso.
fonte