我正在为一家世界知名的游戏开发公司的游戏程序员实习做准备。当我在他们的网站上搜索必要的先决条件时,它向我显示了以下内容:
增加的优势
- 了解DirectX / OpenGL。
- 精通3D数学和物理。
- 用于C ++开发的Visual Studio IDE。
- 系统编程和操作系统概念。
它们对系统编程和OS概念到底意味着什么?
我应该学习Windows编程吗?还是我应该进行Linux编程(这意味着他们希望我知道重要的概念)。还是完全不同?
我正在为一家世界知名的游戏开发公司的游戏程序员实习做准备。当我在他们的网站上搜索必要的先决条件时,它向我显示了以下内容:
增加的优势
- 了解DirectX / OpenGL。
- 精通3D数学和物理。
- 用于C ++开发的Visual Studio IDE。
- 系统编程和操作系统概念。
它们对系统编程和OS概念到底意味着什么?
我应该学习Windows编程吗?还是我应该进行Linux编程(这意味着他们希望我知道重要的概念)。还是完全不同?
Answers:
“系统编程”(或“系统编程”)往往意味着比(例如)游戏编程更低的抽象级别进行的编程。游戏性编程通常是关于构建用户可能会看到的实际游戏机制和前端功能,而系统编程则更多地是关于构建游戏性程序员工作的框架。
这可能意味着图形,资源加载和流传输,音频,内存管理,文件IO,平台抽象API等。细节差异很大,并且由于游戏行业没有职位名称标准,因此类似的编程领域名称也没有标准。在一个工作室,您可能会发现“系统编程”意味着我上面列出的所有内容。在另一处,您可能会发现他们将“图形编程”区分为一个单独的域,并将其他所有非游戏编程任务称为“系统编程”。在另一种情况下,他们可能根本不使用该术语,而仅将其称为“引擎编程”。
由于它是一个较低级别的域,并且通常涉及为构建游戏的任何平台更直接地与特定于平台的API进行接口,因此了解这些平台将是有帮助的,了解更一般的域也将是有帮助的(例如, ,而不考虑特定OS的工作方式,例如虚拟内存是什么,或线程如何工作,IO缓冲如何工作等等。
Josh的回答确实很好,但我认为我会抛弃一些有关我所在的系统团队的要点。我不在系统上工作,但我经常与他们合作。系统团队的职责因公司而异。
我们的系统团队负责很多工作:
这里有很多Windows和Linux领域知识,以及很多物理,核心游戏逻辑和低级内存管理知识。系统团队通常会至少部分参与每个受支持的操作系统,因为他们的大多数项目都处于相当低的层次上。
一些可能属于“系统”团队的事情,我们分成了几个团队(但我们的系统团队仍在进行大量互动):
系统编程的定义非常明确,但是公司试图将其扩展到他们的需求。如果您正在使用或编写系统调用,那么您正在进行系统编程。系统调用是内核或用户空间驱动程序提供的功能。这包括OpenGL,因为它基本上是驱动程序。
由于它们引用的是Visual Studio,因此系统编程是指专门为Windows操作系统编写程序,这意味着:Windows syscall(例如,没有fork-exec链),用户帐户,将用户特定数据放在何处,数据共享模型位于其中。 Windows查找,例如,如何在Visual C ++中检查当前用户或如何启动新进程
操作系统概念,指的是调度,文件抽象,线程,用户空间等。os dev Wiki和论坛可以很好地阅读
在这两个部分中都以用户身份验证为例,因为Windows是单个用户操作系统,因此具有用户管理和用户界面的更深层的内核集成。
msdn是Windows编程api,库等所有内容的知识库https://msdn.microsoft.com/
实际编码的Stackoverflow(如果遇到问题)。