我今天在想什么可能是有史以来最复杂/最令人印象深刻的应用程序。所以我开始考虑每天使用和使用的数据库。
然后我进入了未知领域(对我们大多数人来说),政府。我只能想象NASA应用程序的复杂性,它们允许它们与火星上的流动站进行通信。
然后我开始思考自从我小时候以来每天都在使用的东西,游戏。不是游戏开发者,这给我带来了大量关于人工智能和计算复杂性的问题,超出了我能想到的任何问题。
游戏是最复杂/最令人印象深刻的应用吗?
答案 0 :(得分:49)
简短回答:不。
答案很长:游戏实际上并不是那么复杂。这取决于你说“游戏”时你所谈论的内容,但大多数复杂游戏的两个竞争者将是3D游戏和在线游戏(特别是大型在线游戏)。
3D游戏的复杂性来自于拍摄世界模型并将其渲染为3D并使其表现为“逼真”(在世界规则中)的方式。从中创建视觉和听觉环境实际上并不那么难。它几乎都是线性代数,是计算机科学的成熟领域。
真正的诀窍在于使该过程实时具有高性能。多年来,游戏程序员不得不在现实主义和性能之间做出很多权衡(例如,如果你能够制作一个性能算法,它将生成看起来很实际的树,实际上值得花很多钱)。因此,随着计算和图形处理能力的提高,游戏自然会在视觉上变得更好(视觉上)。
现在一些游戏程序员已经在这个领域做出了真正的创新,他们(正确地)为他们赚了很多钱。想起John Carmack(id Software:Doom and Quake)和Tim Sweeney(虚幻)。
然而,制作游戏的实际成本是内容。只需看看现代FPS(第一人称射击游戏)游戏的积分,您通常只会看到6位程序员,但会有30-50位艺术家。内容并不复杂(从软件的角度来看)。这只是耗时。
至于网络游戏,我记得当Everquest出现时,人们对它的难度大加赞赏。 Bzzzt,错了。对于那些熟悉MUD(mutli-user dungeons)到90年代(可能是80年代)开发的人(比如我自己),在架构上,Everquest服务器并不复杂。
魔兽世界或其他任何游戏都是如此。
如果你想谈谈复杂的,那么Windows XP操作系统如何运行,估计有40 million lines of code?天知道Vista有多少。或者Linux内核呢?
现在,在政府,军队和私营部门,你会发现其他几千年来投入其中的应用程序。
答案 1 :(得分:42)
空中交通管制系统具有容错能力,安全关键性,高可用性和分布式。没有停机时间,系统必须一年365天,每天24小时运行,即使在系统升级期间也是如此。实际上并没有任何非常复杂的计算复杂(例如,没有AI,因为你希望系统是可预测的),但从系统的角度来看,没有其他必须在那个级别。甚至太空任务软件也只需要在任务期间运行。
答案 2 :(得分:25)
我曾为NASA的一个卫星地面站的代码做过一些工作。该系统的工作是以电子方式跟踪并控制NASA的所有卫星。听起来可能听起来不多,但如果你在指挥卫星的过程中系统崩溃,你可以将数十亿纳税人的钱转移到阳光下。因此,该设置中内置的容错和冗余将使暴雪嫉妒。 IIRC,在50个服务器附近的某个地方,其中更重要的是有一个热备用,如果主要故障,可以在不到一秒的时间内接管。如果两个都失败,那么这些系统中的每一个都有一对冗余的系统准备好接管。我还没有看到任何游戏那么复杂(或以其自己的方式令人印象深刻)。
这些地面站中的每一个实时相互作用(电子方式,通过人类交互作用),当然还有所有卫星本身,以及当它在那里时的穿梭,以及处理轨道数据的各种地面终端因此可以被视为仅仅是一个更大,更复杂的系统,NASA称之为TDRSS。这是我发现的online:
的概念图
(来源:nasa.gov)
“白沙综合体”在新墨西哥州南部靠近Los Cruces的地方physically located。正如你所看到的那样,它有三个完整的地面终端,就像我描述的那样,全部联网在一起,并与卫星网络连接。另外还有两个偏远的(我不确定它们在哪里)。
答案 3 :(得分:10)
游戏当然涵盖了广泛的计算技术,从硬件优化到数据库,人工智能,高级数学,你都可以命名。
很难建立复杂性的基准,我不确定是否真的存在。 如果你仔细想想,今天对我们来说微不足道的事情只是几年前难以解决的问题,所以复杂性是一个不断变化的目标,我们都在它的基础之上。
如果我们必须分析只是阅读你的问题所涉及的内容,那么要解决的问题就很多了:想象一下用于为你的机器,我的机器以及所有机器制造电子元件的软件的复杂性。中间的其他机器。
想象一下,让计算机可靠地传递信息所涉及的复杂程度
想象一下操作系统管理所有这些硬件需要什么,让浏览器发展到可以在屏幕上显示复杂布局信息的程度......
这一切对我来说都是惊人的。
你可以指出一个特别复杂的应用程序,但是如果你考虑一下,可能总会有另外一个在表面看起来很简单,但考虑到所有内容时可以看得更复杂。
答案 4 :(得分:7)
我会说肯定没有。
现代游戏当然令人印象深刻,尽管它们的软件和硬件技术远远落后于学术界,工业界和军方的最新技术水平。毕竟,它们意味着在足够普通的家用硬件上运行。我确信军方训练他们的人员进行更逼真的模拟。
从计算的角度来看,游戏也不是那么有趣。现代游戏(例如,辐射3,GTA4)看起来确实令人惊讶,因为它们的“开放世界”和极长的故事,但这与技术无关,而是与产品价值无关。流行游戏现在需要比一些好莱坞电影更大的演员和投资。当然,你有一个纽约的模特而不是一个街区,但那又怎样呢?
即便是MMORPGS也不那么令人印象深刻。是的,他们有很多互动代理商。但是,包含自动代理的企业应用程序具有更多代理,运行速度更快,并且具有更高的可靠性要求。
最后,我要说的是,除了使用国际象棋等游戏测试的尖端算法,因为这些算法用作基准,游戏AI并不是那么先进。再次,军方(和金融公司)有更聪明的应用程序。
答案 5 :(得分:6)
从复杂性的角度来看,游戏并不是那么令人印象深刻。我假设您正在考虑FPS风格的游戏,它们的图形功能肯定令人惊叹。就计算而言,它们确实做了很多,但它主要是在不断增加的多边形和更高分辨率的纹理贴图上运行的许多经过验证和验证的算法。
模拟物理环境也不是那么难;如果你希望环境遵守已知的物理定律,因为大部分内容都是基本的,并且很好理解。
火星探测器的任务是令人印象深刻的壮举。没有动态内存分配,在运行时调试代码,在火星上,以及动态上传修复bug。在稳健性方面,我认为接近于蛋糕。
答案 6 :(得分:6)
看一下Department of Energy开发的一些物理应用程序:
那里有应用程序:
这些是一些存在计算密集度最高的问题,每年在various supercomputing centers投入数百万小时的CPU时间。这些是高度并行的代码,理解物理以及如何有效地将其映射到网络和处理器(例如与MPI)是非常复杂的。
预计到2012年Machines with millions of cores将运行其中一些内容。
答案 7 :(得分:5)
我并不反对这里已有的任何答案,但我觉得很有意思的是,当人们想到“游戏的复杂性”时,他们会考虑GTA或MMORG。我想去和国际象棋。
热门游戏可能是计算密集型的,有很多图形,但这本身并不是很难。另一方面,Go是一个计算难以处理的问题。
另外,如果你采用“复杂性”的技术定义,那么 NOT 是一个主观问题。
答案 8 :(得分:5)
我会告诉你我认为游戏程序最独特的东西,对我来说,它们可能是最令人印象深刻的...是错误如何影响整体产品。如果你有一个错误说,Outlook(哈哈),有几种不同的方法可以解决它(我将在这里过分简化):
对于大多数游戏,尤其是多人游戏,您通常无法选择#2或#3。玩家寻找利用游戏的方法,所以如果你留下一个可以利用的bug,它就会被利用。因此,游戏中的错误容忍度实际上远低于大多数商业/生产力软件,因为具有滥用的潜力。
对我而言,这是使像WoW或Everquest这样的大型复杂游戏系统真正令人印象深刻的主要因素之一。人们在游戏中滥用任何漏洞的时间长度都非常惊人,而且记录得非常好。这与Photoshop或办公软件等产品形成了鲜明的对比,只要有一些方法可以完成你需要做的事情,其他一些工作流程可能会被打破这一事实并不一定是关键任务的缺陷。 ..至少有可能被忽视。这不是游戏开发者的奢侈品。
现在......与空中交通管制或空中客车飞行软件相比,游戏没有任何类型的生活在线限制......这是另一类挑战。
答案 9 :(得分:3)
我不知道您希望如何选择衡量“复杂性”或“令人印象深刻”,但您可能在桌面上使用的某些软件(如Office或Visual Studio)可能比任何视频游戏更“复杂”,大多数措施。
(我认为VS现在就像5000万行代码,虽然我不一定是这里的可靠资源。)
答案 10 :(得分:3)
我真的很想知道没有人提到dwarf fortress:)
矮人堡垒其实令人印象深刻。它可能缺乏闪亮的图形,但它在开放世界的一代和模拟中做了很多令人印象深刻的东西。答案 11 :(得分:3)
不,游戏并不是那么特别。当然,像任何其他大型编程项目一样,存在大量相互冲突的目标,并且需要做出许多妥协,但最终,游戏的优势在于需求非常少。如果您正在编写数据库,那么它必须才能满足ACID属性。无论何时以及如何拔出插头,它都不能丢失数据。如果您正在编写操作系统,类似的东西适用,无论您采取什么措施,它都必须是稳定的。游戏也必须达到很多期望,但其中很少是绝对必要的。伪造大部分图形效果是可以的。可以在玩家没有观察到的区域中伪造世界模拟。
如果您的游戏偶尔也会崩溃,那么这不是世界末日。大型AAA游戏很复杂,是的,但它们并不是现存最复杂的应用程序。不是到目前为止。
游戏开发涵盖了广泛的技能组合和技术,当然,它们也有很大的余地,并且允许在大多数要求上妥协。如果我们只能在该硬件上达到此帧速率,那就没问题。如果我们必须禁用软阴影以提高性能,这是可以的。人工智能基于“看起来令人信服的东西”是伪造的。
创造一个高额的高预算游戏是一项艰巨的任务,毫无疑问。如果考虑到创造它所涉及的技术,专业和技能的广度,它可能是最复杂的应用类型。但是编程方面,或者计算复杂性或类似的东西,不,它并不是那么特别。
答案 12 :(得分:2)
这取决于我们如何衡量复杂性,我们在考虑哪些方面。如今,有很多令人印象深刻的技术为视频游戏提供动力。
我想你们中的一些人可能会喜欢这样:美国宇航局的约翰·卡马克(John Carmack)因月球着陆器的工作而获得一等奖。
John Carmack (Armadillo Aerospace) at NASA HQ
根据Carmack的说法,这个壮举很简单:
我在电子游戏中所做的工作其实远更复杂 然后是航空航天工作。
答案 13 :(得分:2)
我认为在游戏世界中有一些有趣的“令人印象深刻”的代码示例。要看的地方是固定硬件游戏,如游戏机和老式家庭计算平台。要寻找的软件是在这些平台的生命结束时出现的标题。
例如,BBC Micro上的Elite将3D太空战斗游戏,市场模拟和整个宇宙地图塞进32KB。后来同样的游戏被塞进NES。这项壮举涉及手工优化的汇编语言编码,其中花费一天时间来削减一个字节被认为是值得的。
您可以在所有8位和16位平台上找到类似的令人印象深刻的作品。另请参阅Amiga场景中的声音和图形演示。
所有这一切的驱动因素是您不能简单地用更多硬件解决问题。消费者无法升级硬件,并且要求更复杂的游戏。
此外,这些游戏令人印象深刻,因为它们是为最初不是为游戏设计的设备而编写的。像“平滑8向滚动”这样简单的东西被认为是游戏的一个主要特征,因为硬件不直接支持它,程序员必须非常聪明才能实现它。
那些日子可能已经结束了。也许有人会推动PS3或Xbox360做一些令人难以置信的事情,但似乎你可以在不推动这些硬件的情况下销售游戏,因此这样做的商业压力并不高。您所获得的只是图形质量,更大环境或更详细环境的小改进。
越来越多的手持设备太强大,无法提示那种令人印象深刻的低级编码。你不需要在现代手机上旋转比特来编写3D游戏。
因此,寻找硬件有限的其他地方。火星探测器就是一个很好的例子。
答案 14 :(得分:1)
在我的头脑中,我会说以下应用程序都涉及更复杂的代码,以及比普通游戏更低级别的代码:
答案 15 :(得分:1)
这取决于复杂性的含义。
从算法的角度来看,从低级优化的角度来看,当然从数学的角度来看,当然游戏比VS或操作系统更复杂。
虽然从代码大小的角度来看,从许多不同组件的交互角度来看,以及需要支持(和调试)大量配置的排列,然后我会说操作系统更复杂。 / p>
答案 16 :(得分:0)
如果你包括开发过程,游戏肯定就在那里。
答案 17 :(得分:0)
我认为应用程序运行的引擎会很复杂。可能不是很多行(如操作系统),但非常复杂,因为它需要处理设计人员需要抛出的所有元素和场景并以最佳方式运行。
由于你在谈论游戏,许多游戏开发商会购买引擎并反对。其中一些引擎是如此公开地编写的,它们被用于几个看起来和感觉完全不同的应用程序。
答案 18 :(得分:0)
有很多风险管理软件(以及基于统计分析的其他软件)对我来说更令人印象深刻。它创造一个虚假的世界(它本身令人印象深刻),但试图预测真正的世界将要做的事情要困难得多。
答案 19 :(得分:0)
我认为以某种方式控制真实世界的程序非常令人印象深刻,特别是如果它们控制一些大型系统。
Gripen Fighter中的转向计算机,它是亚音速下的空气动力学不稳定平面。计算机的任务是使其稳定并利用不稳定的力量来获得更好的转弯性能。
我的一位朋友在Jeppesen工作,为主要航空公司安排航空公司机组人员。它必须针对不同的国家采取不同的工作规则,并设法安排工作人员,以便他们希望在 home 附近继续他们的班次。我觉得相当令人印象深刻......
答案 20 :(得分:0)
一个例子:Outlook在某一时刻与10百万行代码进行了交互。没有理智的游戏开发者会接近它,因为它永远不会跑得足够快。
答案 21 :(得分:0)
没有
如果我们将所有软件视为“应用程序”,我会说操作系统是(对于操作系统不是应用程序,而是系统)
答案 22 :(得分:0)
有人提到了空中交通管制软件 - 我很确定它是令人难以置信的复杂和可靠,但对我而言,它必须是全球航空公司的票务系统 - 我认为它是amadeus。
拥有数十万个航班和目的地以及定价选项,令人难以置信的是,它可以实时向整个世界提供实时请求。
我写了一些计算酒店房价的软件。这不是一个大型连锁店或任何东西,只是一家酒店 - 甚至不是那么大。并且采用所有不同变量和规则并返回价格的代码是......巨大而且相当复杂。
将它扩展到现在和将来运营的所有航班必须在我看来是现存最复杂的事情。
答案 23 :(得分:0)
游戏是最复杂/最令人印象深刻的应用吗?
复合?否
令人印象深刻的?要看。有很多令人印象深刻的。
例如,在容错和正确性方面,它可能是医疗或航空应用的代码。
在可扩展性方面,我会说谷歌或亚马逊。
但游戏擅长的是,从可用的硬件中获得最大的性能。对于其他应用程序,通常有一个点,你有足够的硬件能力,不关心它,但在游戏中你总是可以做出更好的渲染,更好的AI等。因此在可预见的未来,性能将是一个高优先级。在这一类别中,游戏非常令人印象深刻。
答案 24 :(得分:0)
简短回答:是的。虽然我正在回答这个问题:“我今天在想,可能是有史以来最复杂/最令人印象深刻的应用程序。”而不是 最复杂/令人印象深刻。
想象一下,尝试开发一个模拟整个宇宙的游戏,并允许你用[x]超级大国玩它。实际上,你可以将游戏变成任何复杂的模拟,直到所有已知物理的复杂,然后将非物理投入混合!视频游戏本质上可以像你想要的那样简单或复杂。
在我看来,这是游戏开发的美妙之处。您可以根据需要创建任何详细程度的世界。任何你能想象到的东西,都可以变成游戏。理论上
答案 25 :(得分:0)
答案 26 :(得分:0)
答案 27 :(得分:0)
答案 28 :(得分:0)
如果你加入大量网络游戏,我会说是的。他们必须利用大规模系统所需的一切(分布式系统,协调这些系统,大量数据,交易/可靠性以确保库存保持正确等),所有这些都在非常严格的性能要求下(EVE Online是主要的)一个我在想的。)
但是,也许不是最令人印象深刻的人工智能。我还没有在一场几天内无法解决的游戏中遇到人工智能。答案 29 :(得分:-1)
大多数现代的,以图形为导向的游戏,作为程序,并不是特别令人印象深刻或复杂(它们可能是复杂的游戏,但编程它们的概念不是)。
我发现一些基于文本的游戏的自然语言解析器令人印象深刻。
无论是数据还是代码行中的巨大重量都可能令人印象深刻,但任何给定的标记都将很快被超越。实现的复杂性可能是极端的(例如,多年来微软已经在Windows中投入的所有API的无数交互),但并不存在所有复杂性的潜在需求。哪些程序具有潜在的,不可避免的复杂性?