我今天在想什么可能是有史以来最复杂/最令人印象深刻的应用程序.所以我开始考虑我喜欢和使用日常数据库.
然后我进入了未知领域(对我们大多数人来说,我猜),政府.我只能想象NASA应用程序的复杂性,它们允许它们与火星上的流动站进行通信.
但后来我开始思考自从小时候以来我每天都在使用的东西,游戏.不是游戏开发者,这给我带来了大量关于人工智能和计算复杂性的问题,超出了我能想到的任何问题.
游戏是最复杂/令人印象深刻的应用吗?
简答:不.
答案很长:游戏实际上并不是那么复杂.这取决于你说"游戏"时你所谈论的内容,但大多数复杂游戏的两个竞争者将是3D游戏和在线游戏(特别是大型在线游戏).
3D游戏的复杂性来自于拍摄世界模型并将其渲染为3D并使其表现为"现实"(在世界规则中)的方式.从中创建视觉和听觉环境实际上并不那么难.它几乎都是线性代数,是计算机科学的成熟领域.
真正的诀窍在于使该过程实时具有高性能.多年来,游戏程序员不得不在现实主义和性能之间做出很多权衡(例如,如果你能够制作一个性能算法,它将生成看起来很实际的树,实际上值得花很多钱).因此,随着计算和图形处理能力的提高,多年来游戏自然会变得更好(视觉上).
现在,一些游戏程序员已经在这个领域做出了真正的创新,他们(正确地)为他们赚了很多钱.想到John Carmack(id Software:Doom和Quake)和Tim Sweeney(虚幻).
然而,制作游戏的实际成本是内容.只需看看现代FPS(第一人称射击游戏)游戏的积分,您通常只会看到6位程序员,但会有30-50位艺术家.内容并不复杂(从软件的角度来看).这只是耗时.
至于网络游戏,我记得当Everquest问世时,人们对它的难度大加赞赏.Bzzzt,错了.对于那些熟悉MUD(多用户地下城)到90年代(可能是80年代)开发的人(比如我自己),在架构上,Everquest服务器并不复杂.
"魔兽世界"或任何其他游戏也是如此.
如果你想谈谈复杂的,那么Windows XP操作系统如何运行,估计有4000万行代码?天知道Vista有多少.或者Linux内核呢?
现在,在政府,军队和私营部门,你会发现其他几千年来投入其中的应用程序.
空中交通管制系统具有容错能力,安全关键性,高可用性和分布式.没有停机时间,系统必须一年365天,每天24小时运行,即使在系统升级期间也是如此.实际上没有任何计算复杂的东西(例如,没有AI,因为你希望系统是可预测的),但从系统的角度来看,没有太多其他东西必须在那个级别运行.即使是太空任务软件也只需要在任务期间运行.
我已经为NASA的一个卫星地面站的代码做了一些工作.该系统的工作是以电子方式跟踪并控制NASA的所有卫星.听起来可能听起来不多,但是如果你在指挥卫星的过程中系统崩溃,你可以将数十亿的纳税人资金转移到太阳下.因此,该设置中内置的容错和冗余将使暴雪嫉妒.IIRC,在50个服务器附近的某个地方,其中更重要的是有一个热备用,如果主要故障,可以在不到一秒的时间内接管.如果两个系统都失败,那么这些系统中的每一个都有一个冗余的系统就绪,可以接管.我还没有看到任何游戏那么复杂(或以其自己的方式令人印象深刻).
这些地面站中的每一个都实时相互作用(电子方式,通过人类交互作用),当然还有所有卫星本身,以及当它在那里时的穿梭,以及处理轨道数据的各种地面终端,并且可以因此被认为仅仅是一个更大,更复杂的系统,NASA称之为TDRSS.这是我在网上找到的一个非常概念图:
"白沙综合体" 位于新墨西哥州南部,靠近Los Cruces.正如你所看到的那样,它有三个完整的地面终端,就像我描述的那样,全部联网在一起,并与卫星网络连接.另外还有两个偏远的(我不确定它们在哪里).
游戏当然涵盖了广泛的计算技术,从硬件优化到数据库,AI,高级数学,你都可以命名.
建立复杂性的基准很难,我不确定是否存在任何复杂性.如果你仔细想想,今天对我们来说微不足道的事情在几年前就很难解决,所以复杂性是一个不断变化的目标,我们都在建立在它之上.
如果我们必须分析刚刚阅读问题所涉及的内容,那么要解决的问题就很多了:想象一下用于为您的机器,我的机器以及所有其他机器制造电子元件的软件的复杂性.之间.
想象一下,让计算机可靠地将信息传递给彼此的复杂程度.
想象一下操作系统管理所有这些硬件所需要的东西,让浏览器发展到可以在屏幕上显示复杂布局信息的程度......
这一切对我来说都是惊人的.
你可以指出一个特别复杂的应用程序,但是如果你考虑一下,可能总会有另一个看起来很简单的表面,但是当你考虑到所有内容时可以看得更复杂.
我会说肯定没有.
现代游戏当然令人印象深刻,尽管它们的软件和硬件技术远远落后于学术界,工业界和军方的最新技术水平.毕竟,它们意味着在足够普通的家用硬件上运行.我确信军方训练他们的人员进行更真实的模拟.
从计算的角度来看,游戏也不是那么有趣.现代游戏(例如,辐射3,GTA4)看起来确实令人惊叹,因为它们的"开放世界"和极长的故事,但这与技术无关,而是与产品价值无关.流行游戏现在需要比一些好莱坞电影更大的演员和投资.当然,你有一个纽约的模特而不是一个街区,但那又怎样呢?
即便是MMORPGS也不是那么令人印象深刻.是的,他们有很多互动代理商.但是,包含自动代理的企业应用程序具有更多代理,运行速度更快,并且具有更高的可靠性要求.
最后,我要说的是,除了使用国际象棋等游戏测试的尖端算法,因为这些算法用作基准,游戏AI并不是那么先进.再次,军方(和金融公司)有更聪明的应用程序.
看看能源部开发的一些物理应用:
http://www.scidac.gov/
那里有应用程序:
气候模拟
聚变能
分子动力学
流体动力学
量子色动力学.
这些都是一些中存在的计算最密集的问题,以及数以百万计的CPU时间是每年投入到他们在不同的 超级计算机 中心.这些是高度并行的代码,理解物理以及如何有效地将其映射到网络和处理器(例如,使用MPI)是非常复杂的.
预计到2012年,拥有数百万核心的机器将运行其中一些内容.
从复杂性的角度来看,游戏并非令人印象深刻.我假设您正在考虑FPS风格的游戏,它们的图形功能肯定令人惊叹.就计算而言,它们确实做了很多,但它主要是大量经过尝试和验证的算法,这些算法运行在越来越多的多边形和更高分辨率的纹理贴图上.
模拟物理环境也不是那么难; 如果你希望环境遵守已知的物理定律,因为大部分内容都是基本的,并且很好理解.
火星探测器的任务是令人印象深刻的壮举.没有动态内存分配,在火星运行时调试代码,在火星上,以及动态上传修复bug.在稳健性方面,我认为接近于吃蛋糕.
我会告诉你我认为游戏程序最独特的东西,对我来说,它们可能是最令人印象深刻的...是错误如何影响整体产品.如果你有一个错误说,Outlook(哈哈),有几种不同的方法可以解决它(我将在这里过分简化):
修复错误.
如果有另一种方法可以完成同样的事情,请为用户提供一种解决方法.
只要保持原样,随身携带,不要担心.
对于大多数游戏,尤其是多人游戏,您通常无法选择#2或#3.玩家寻找利用游戏的方法,所以如果你留下一个可以利用的bug,它就会被利用.因此,由于滥用潜力,游戏中的错误容忍度实际上远低于大多数商业/生产力软件.
对我而言,这是使像WoW或Everquest等大型复杂游戏系统真正令人印象深刻的主要因素之一.人们在游戏中滥用任何漏洞的时间长度都非常惊人,而且记录得非常好.这与Photoshop或办公软件等产品形成了鲜明的对比,只要有一些方法可以完成你需要做的事情,其他一些工作流程可能被打破的事实并不一定是关键任务的缺陷. ..至少有可能被忽视.这并不是游戏开发者所拥有的奢侈品.
现在......与空中交通管制或空中客车飞行软件相比,游戏没有任何类型的生活在线限制...这是另一类挑战.
我并不反对这里已有的任何答案,但我觉得非常有趣的是,当人们想到"游戏的复杂性"时,他们会考虑GTA或MMORG.我想去和国际象棋.
流行的游戏可能是计算密集型的,有很多图形,但这本身并不难.另一方面,Go是一个计算难以处理的问题.
此外,如果您采用"复杂性"的技术定义,那么这不是一个主观问题.