游戏是最复杂/令人印象深刻的应用?

我今天在想什么可能是有史以来最复杂/令人印象深刻的应用程序。 于是我开始思考我对日常使用的数据库感到舒适。

然后,我进入了未知的领域(对我们大多数人来说), 政府 。 我只能想象NASA应用程序的复杂性,使它们能够与火星上的漫游者进行通信。

但是后来我开始考虑自从我还是小孩以来每天都在使用的东西, 游戏 。 不是一个游戏开发者,这给我的想象带来了大量关于AI和计算复杂性的问题,这个问题超出了我所能想到的。

游戏是最复杂/令人印象深刻的应用?

简短的回答:不。

长的答案:游戏其实并不复杂。 这取决于你说什么,当你说“游戏”,但最复杂的游戏的两个竞争者将是3D游戏和networking游戏(尤其是大规模的networking游戏)。

3D游戏的复杂性来自一个世界的模型,并将其渲染为3D,并使其具有“现实”(在世界规则之内)的行为方式。 从中创build一个视觉和听觉环境并不是那么难。 它几乎全是线性代数,是计算机科学的一个成熟领域。

真正的诀窍在于实时执行该stream程的高性能。 多年来,游戏程序员不得不在现实和性能之间做出很多折衷(例如,如果你能制作一个性能algorithm,可以生成真正值得花钱的逼真树)。 所以随着计算和graphicsfunction的增加,游戏自然而然地变得越来越好(视觉上)。

现在一些游戏程序员已经在这个领域做出了真正的创新,有(正确)给他们很多钱。 John Carmack(id Software:Doom和Quake)以及Tim Sweeney(虚幻)都值得关注。

但是制作游戏的真正成本是内容。 只要看看现代FPS(第一人称射击游戏)的学分,你通常会看到只有6个程序员,但是会有30-50个以上的艺术家。 内容并不复杂(从软件的angular度来看)。 这只是费时。

至于在线游戏,我记得Everquest出来的时候,人们饶有兴致地说这有多难。 Bzzzt,错了。 对于那些熟悉90年代(也可能是80年代)MUD开发的人(比如我自己),从架构上来说,一个Everquest服务器并不复杂。

“魔兽世界”或其他任何游戏也是如此。

如果你想谈论复杂,那么Windows XP操作系统上运行的这些东西估计有4000万行代码呢? 上帝知道有多lessVista。 或者Linux内核呢?

现在在政府,军队和私营部门,你会发现其他的应用程序,字面上有几千年的男人在他们投资。

空中交通pipe制系统容错,安全关键,高可用性和分布式。 没有停机时间,即使在系统升级期间,系统也必须每年365天,每天24小时运行。 没有什么比计算复杂得多的东西(比如没有人工智能,因为你希望系统是可预测的),但是从系统的angular度来看,没有什么东西需要在这个层面上运行。 即使太空任务软件只需要运行,只要任务。

我对NASA的一个卫星地面站的代码做了一点工作。 该系统的工作是以电子方式跟踪和控制美国航天局的所有卫星。 这听起来可能不是很多,但是如果一个系统在你指挥一个卫星的过程中发生崩溃,你可以发送数十亿美元的纳税人的钱。 所以这个设置中的容错和冗余会让暴雪嫉妒。 IIRC,在50台服务器附近的某个地方,如果主服务器出现故障,其中更重要的是有一个热备件可以在不到一秒的时间内接pipe。 这两个系统中的每一个系统都有一对冗余的系统,如果两者都失败,就可以接pipe。 我还没有看到任何复杂的游戏(或者以自己的方式令人印象深刻)。

这些地面站中的每一个都可以实时地(通过电子方式和通过人为的相互作用)相互作用,当然还有所有的卫星本身,当它在那里的时候还有航天飞机,以及处理轨道数据的各种地面terminal,因此被认为是一个更大更复杂的系统,NASA称之为TDRSS 。 这是我在网上find的一个非常概念性的图表:

替代文字

“白沙复合体” 位于新墨西哥州南部最远的洛斯克鲁塞斯附近。 正如你在街区看到的那样,有三个完整的地面terminal,就像我描述的那样,所有的networking连接在一起,还有卫星。 另外还有两个远程的(我不知道它们在哪里)。

游戏当然涵盖了非常广泛的计算技术,从硬件优化到数据库,人工智能,高级math,你的名字。

build立一个复杂的基准很难,我不确定是否真的存在。 如果你仔细想一想,今天对我们来说微不足道的事情是几年前要解决的难题,所以复杂性是一个移动的目标,我们都在这个目标之上。

如果我们必须分析刚刚阅读您的问题时涉及到的内容,那么需要解决的问题的巨大程度是惊人的:设想用于制造您的机器,我的机器和所有其他机器的电子组件的软件的复杂性之间。
想象一下,让计算机可靠地将信息传递给对方的复杂性。
想象一下,操作系统要pipe理所有这些硬件,浏览器才能发展到能在屏幕上显示复杂布局信息的地步。
这一切对我来说都是惊人的。

你可以指向一个特别复杂的应用程序,但是如果你仔细想想,可能总是会有另外一个看起来很简单的表面,但是当你把所有的东西都考虑进来的时候可以被看作更复杂。

我会说一个确定的不。

现代游戏当然是令人印象深刻的,尽pipe他们的软件和硬件技术远远落后于学术界,工业界和军事领域的艺术水平。 毕竟,他们打算在普通的家用硬件上运行。 我相信,军方训练他们的人更逼真的模拟。

从计算的angular度来看,游戏也不是那么有趣。 现代游戏(例如辐射3,GTA4)由于其“开放的世界”和非常长的故事而显得非常神奇,但这与技术无关,而与生产价值无关。 现在stream行的游戏需要比一些好莱坞电影更大的投资和投资。 所以当然,你有一个纽约的模式,而不是一个块,但那又如何呢?

即使MMORPGS也不那么令人印象深刻。 是的,他们有许多互动的代理人。 但是,包含自动代理的企业应用程序拥有更多代理,运行速度更快,并具有更高的可靠性要求。

最后,我想说的是,除了像国际象棋这样的游戏testing出来的尖端algorithm以外,游戏人工智能并不是那么先进的。 再次,军方(和金融公司)有更聪明的应用。

从复杂性的angular度来看,游戏并不令人印象深刻。 我假设你正在考虑FPS风格的游戏。 就计算而言,他们肯定会做很多事情,但大多数是经过validation的algorithm,运行在越来越多的多边形和更高分辨率的纹理贴图上。

模拟一个物理环境并不是那么困难, 只要你想要环境服从物理学的已知定律,因为这些东西大部分是基本的和很好理解的。

火星漫游者的任务是一个令人印象深刻的壮举。 没有dynamic内存分配, 在火星上运行时debugging代码,以及在运行中上传修正错误的方法。 就稳健性而言,我想说的是接近拿蛋糕。

看看能源部开发的一些物理应用:

那里有这样的应用程序:

  • 气候模拟
  • 聚变能
  • 分子动力学
  • stream体动力学
  • 量子色动力学 。

这些是计算最密集的一些问题,每年在各种 超级计算中心投入数百万计的CPU时间。 这些是高度并行的代码,理解物理以及如何有效地将其映射到networking和处理器( 例如使用MPI )非常复杂。

预计到2012年, 拥有数百万核心的机器将运行其中的一些。

我会告诉你我觉得什么是最独特的关于游戏程序,以及我怎样才能使他们成为最令人印象深刻的……错误是如何影响整体产品的。 如果你有一个错误,Outlook(哈),有几个不同的方式来解决它(我将在这里简单化):

  1. 修正错误。
  2. 给用户一个解决方法,如果还有其他的方法来完成同样的事情。
  3. 只要保持原样,随身携带,不用担心。

对于大多数游戏,尤其是任何多人游戏,你往往没有select#2或#3。 玩家想方设法利用游戏,所以如果你留下一个可以利用的bug,那就是了。 因此,对游戏中的错误的容忍度实际上比大多数商业/生产力软件要低得多,因为这是一种滥用的潜力。

对我来说,这是使像WoW或Everquest这样庞大而复杂的游戏系统真正令人印象深刻的主要因素之一。 人们在游戏中滥用任何漏洞的时间是相当惊人的,并且有很好的logging。 这与Photoshop或办公软件等产品形成鲜明对比,只要有一些方法可以完成您需要做的事情,其他一些工作stream程可能被破坏的事实并不一定是关键的缺陷。至less有可能被忽略。 这不仅仅是游戏开发者的奢侈品。

现在…与空中交通pipe制或空中客车飞行软件等相比,游戏没有任何地方存在这种types的生活在线限制…这是另外一类挑战。

我并不反对任何已经在这里的答案,但我觉得很有趣的是,当人们考虑“游戏的复杂性”时,他们会考虑GTA或MMORG。 我想去国际象棋。

stream行的游戏可能是计算密集型的,有大量的graphics,但这本身并不是很硬。 另一方面呢,这是一个计算上难以解决的问题。

另外,如果你正在采用“复杂性”的技术定义,那么这不是一个主观的问题。

我不知道如何select衡量“复杂性”还是“令人印象深刻的”,但是一些软件(比如Office或者Visual Studio)可能比任何video游戏都要复杂得多。 。

(我认为现在的VS就像5000万行代码,虽然我不一定是这里可靠的资源。)

不,游戏并不是那么特别。 当然,和其他任何大型的编程项目一样,有大量的相互冲突的目标和大量的妥协,但是最终游戏的好处是要求很less。 如果你正在编写一个数据库,那么它必须满足ACID属性。 无论何时以及如何拔插头,它都不能丢失数据。 如果你正在编写一个操作系统,类似的东西也适用,无论你做什么,它都必须是稳定的。 一个游戏也必须辜负很多的期望,但其中很less是绝对必要的。 假冒大部分的graphics效果是可以的。 在玩家没有注意的地方伪造世界模拟是可以的。

如果你的游戏偶尔崩溃,这还不是世界末日。 大型AAA游戏是复杂的,是的,但它们并不是最复杂的应用程序。 不远。

游戏开发涵盖范围广泛的技能和技术,当然,但他们也有很大的余地,并允许妥协的大部分要求。 如果我们只能在该硬件上达到这个帧率,那也没关系。 如果我们必须禁用软阴影来提高性能,那也没关系。 人工智能是基于“看起来令人信服的”而伪造的。

创build一个高预算的游戏是一个巨大的任务,毫无疑问。 如果考虑到技术,职业和技能的广度,那么它可能是最复杂的应用types。 但是在编程方面,或者在计算复杂性或类似的方面,不,不是那么特别。

我真的不知道没有人提到矮人堡垒呢:)

矮人堡垒其实挺让人印象深刻的。 它可能缺乏有光泽的graphics,但它在开放世界生成和模拟方面做了很多令人印象深刻的事情。

我想在游戏世界里有一些有趣的“令人印象深刻”的代码。 寻找固定硬件的游戏,例如游戏控制台和旧的家庭计算平台。 要寻找的软件是在这些平台的生命结束时出现的标题。

例如,BBC Micro上的Elite将3D空间战斗游戏,市场模拟和整个宇宙的地图填充到32KB。 后来,同样的游戏被塞进一个NES。 这个专长涉及手工优化的汇编语言编码,其中花费一天的时间来删除一个字节被认为是值得的。

您可以在所有8位和16位平台上find同样令人印象深刻的作品。 还要看看Amiga场景中的声音和graphics演示。

所有这一切的驱动力是你不能简单地用更多的硬件解决问题。 消费者无法升级硬件,并要求更复杂的游戏。

此外,这些游戏令人印象深刻,因为它们是为最初不是为游戏而devise的设备编写的。 像“平滑的8路滚动”这样简单的事情被认为是游戏的一个主要特征,因为硬件不直接支持它,程序员必须非常聪明地实现它。

那些日子可能已经结束了。 也许有人会推动PS3或者Xbox360去做一些令人难以置信的事情,但是看起来你可以在没有推动硬件的情况下销售游戏,所以商业压力不是那么高。 你所得到的仅仅是图像质量或者更大的环境,或者更详细的环境的小幅改进。

甚至手持设备也越来越强大,以至于不能提供令人印象深刻的低级编码。 你不需要在现代手机上编写3D游戏。

所以,寻找硬件有限的其他地方。 火星漫游者就是一个很好的例子。

这真的取决于我们如何衡量复杂性,我们在看什么方面。 这些日子当然有大量令人印象深刻的技术支持video游戏。

我认为你们中的一些人可能会喜欢这个:NASA的约翰·卡马克(John Carmack)因为他在月球着陆器上的工作而获得一等奖。

美国宇航局总部的John Carmack(犰狳航空航天公司)

根据卡马克的说法,这个专长很简单:

我在电子游戏中所做的工作其实要比航天工作复杂得多。

这取决于你的复杂性。

从algorithm的angular度,从低层次的优化angular度,当然从math的angular度来看,当然游戏比VS或操作系统更复杂。

尽pipe从代码大小的angular度来看,从许多不同的组件angular度进行交互,并且需要支持(和debugging)大量的configuration排列,那么我会说操作系统更复杂。

关于我的头顶,我会说以下应用程序都涉及更复杂的代码,以及比普通游戏更低级的代码:

  • 3D Studio MAX
  • 该软件用于模拟汽车devise的物理和崩溃
  • 气象软件用于模拟天气并创build预报
  • 高端的OCR软件

如果你包括大规模的networking游戏,我会说是的。 他们必须利用大规模系统所需要的一切(分布式系统,协调这些系统,大量数据,交易/可靠性以确保库存保持正确等),所有这些都在非常严格的性能要求下进行(EVE Online是主要一个我在想)。

虽然也许不是最令人印象深刻的AI。 我还没有遇到AI在几天内无法解决的游戏。

没有。

如果我们把所有的软件看作“应用程序”,我会说操作系统是(对于操作系统不是应用程序,而是系统)

举一个例子:Outlook在一个点上与十万行代码交互。 没有一个理智的游戏开发者会接近任何地方,因为它永远不会跑得够快。

如果包含开发过程,游戏肯定会在那里。

我认为应用程序运行在顶端的引擎将是复杂的。 可能不是很多行(如操作系统),但非常复杂,因为它需要处理所有devise人员需要抛出的元素和场景,并以最佳方式运行。

既然你正在谈论游戏,许多游戏开发商购买引擎,并写这些。 其中一些引擎是如此公开的写入,以至于它们被用于几个看起来完全不同的应用程序。

那里有很多风险pipe理软件(以及其他基于统计分析的软件),这对我来说更令人印象深刻。 “创造一个假的世界是一回事(令人印象深刻的),但试图预测真实世界将要做什么要困难得多。

我认为,某种程度上控制着现实世界的程序,特别是如果它们控制着一些大的系统,是相当可观的。

  • 鹰狮战斗机中的转向电脑是亚音速下的空气动力学不稳定飞机。 电脑的任务是使其稳定,并利用不稳定的力量能够有较大的转身performance。

  • 我的一位朋友在杰普逊工作,为大型航空公司安排航class机组。 必须针对不同的国家采取不同的工作规则,并设法安排工作人员,让他们有希望地在离家很近的地方上下class。 我觉得很令人印象深刻

有人提到空中交通pipe制软件 – 我相当肯定它是令人难以置信的复杂和可靠的,但对我来说,它必须是全球航空票务系统 – 我认为这就是所谓的amadeus。

数十万的航class,目的地和定价选项令人难以置信,它可以实时为基本上整个世界提供服务。

我写了一些计算酒店房价的软件。 这不是一个大的连锁或任何东西,只是一个酒店 – 甚至不是那么大。 并且采用所有不同的variables和规则并返回价格的代码是…巨大且相当复杂。

按照现在和将来的所有航class规模来看,在我看来,这是现存最复杂的事情。

游戏是最复杂/令人印象深刻的应用?

复杂? 没有

令人印象深刻的? 依靠。 有很多令人印象深刻的。

例如,在容错性和正确性方面,这可能是医学或航空航天应用的代码。

在可伸缩性方面,我会说谷歌或亚马逊。

但游戏出类拔萃的东西,是可用的硬件获得最多的性能。 与其他应用程序通常有一个点,你有足够的硬件的权力,而不关心它,但在游戏中,你总是可以做出更好的渲染,更好的人工智能等等。因此,在可预见的未来,性能将是一个高度优先事项。 在这个类别的游戏是非常可观的。

简短的回答:是的。 虽然我正在回答这个问题:“今天我在想什么可能是有史以来最复杂/令人印象深刻的应用程序。” 而不是哪个最复杂/最令人印象深刻的。

想象一下,试图开发一个模拟整个宇宙的游戏,并允许你用[x]超级大国来玩游戏。 实际上,您可以将游戏变成任何复杂性的模拟,直到所有已知物理体的复杂程度,然后将非物理体投射到混合体中! 电子游戏本质上可以像你想要的那样简单或复杂。

在我看来,这就是游戏开发的美妙之处。 你可以创build一个你想要的任何细节级别的世界。 任何你可以想象的,你都可以变成游戏。 理论上。

除了上面的一些很好的build议,我想指出, Uniview是相当令人印象深刻的。

他们很复杂,是的。 他们非常令人印象深刻,是的。

但是有些系统可以和游戏相媲美。 数据库pipe理员非常复杂和令人印象深刻 Mathematica是SW的另一个很好的部分。 有很多例子。 绝对有些游戏在顶部。

至于复杂和“shiny”的代码,我想说你应该看看Loebner(sp?)奖。 这是一个为开发一个会话式图灵机而举行的比赛。 这是一个非常复杂和有趣的项目,其目标是编写能够与真人进行对话而不被识别为机器的代码。

这有很多层面,语言学,记忆,语法和句法,自我重新编程。 这本质上是一个迷你AI,如果我打了乐透,我想我会花很多时间在这个上面。

我在开玩笑,我会在水上公园度过一整天,喝醉了。 但是我一直在这个东西。

大多数现代的面向graphics的游戏,作为程序,并不是特别令人印象深刻或复杂(它们可能是复杂的游戏,但是编程它们的概念却不是)。

我发现一些基于文本的游戏的自然语言parsing器令人印象深刻。

无论是数据还是代码行的庞大程度都可能令人印象深刻,但是任何给定的商标都将很快被超越。 实施的复杂性可能是极端的(例如,微软多年来在Windows中提供的所有API的无数交互),但是没有任何复杂性的基本需求。 什么是具有潜在的,不可避免的复杂性的程序?