当前位置: 华文星空 > 知识

游戏开发的编程算不算是 IT 行业中难度最大的?

2015-07-12知识

本来只是想写个评论的,没想到超字数了。

赞同

Chaos

,以及部分其他回答中,对游戏引擎的大部分观点。

但是, 隔行如隔山 ,现在IT行业的区分已经真的是很明显了,不同领域之间,基本上可以认为是两个完全不同的行业。 大家真的没必要去踩其他领域的技术 ,因为你去了别人的主场,别人也能吊打你。

例如说:Google/阿里手里的海量数据检索系统,技术含量就低了?很多IT巨头开始涉足的大数据挖掘,分析,智能学习等等领域,从算法到架构到实现,哪个简单了?

还有,工业领域,别的不说,光是那个 真实时 的系统就不比你的游戏引擎技术含量低了。说穿了,游戏引擎也就是一个基于定时器和中断的 伪实时 环境而已。

最关键的一点:

游戏行业对可靠性的要求,比起很多其他领域来说,完全是低了好几个档次的

游戏行业对可靠性的要求,比起很多其他领域来说,完全是低了好几个档次的

游戏行业对可靠性的要求,比起很多其他领域来说,完全是低了好几个档次的

游戏引擎计算跟不上了?什么后果?无非就是丢几个帧,被问候一下家人而已。

游戏引擎渲染错误?什么后果?无非就是出了色块,有bug嘛,大家玩游戏的时候见得还少吗?

就算再退一步,持续跟不上/出错,那就告诉玩家,你这配置玩不了,或者降低特效或者分辨率咯。

还不行?那让游戏开发商降低特效,或者减少一个区的玩家数嘛。

再不行?好吧,那你要不下一款游戏换引擎吧?我不做你这生意了,这总行了吧?

但是,在其他行业里:

淘宝/支付宝如果发生偶尔错误,那可能只是骚扰客服,但是如果大规模数据错了,这基本上是政治事件了。QQ也是一样的。如果某天QQ出问题,全市或者全省的用户都登陆不上QQ,你觉得会不会各种谣言满天飞?

同样的,如果是像华为那些核心交换机路由器出问题了,一大片用户受影响,照样不是被问候一下家人,或者说「换」就能完事的。

还有工控领域也是一样,如果某汽车的esp的程序可靠性出了问题,该介入时不介入,或者不该介入时介入了,那损失的照样不是钱的问题。前几年丰田在美国的刹车门,大家没忘把?也许那不完全是程序和技术的问题,但是严重性和后果是差不多的。

化工等等就更是严重,碰到的东西,不是易燃易爆,就是高温高压,或者有毒强腐蚀。如果在出问题刚露苗头的时候,自控系统反应得稍慢一点,那都可以说是灭顶之灾。

至于银行,那就更不用说了。我说一个真实事件:90年代某四大行的某省分行,上了一套新系统,用于全省储户的结息。结果系统出问题了,在结息日的下一个工作日的8点(营业时间前一个小时)还没算完。

因为没算完利息,那就意味着没法知道储户的真实金额,所以营业网点如果按时开门,那被储户发现自己的钱不对,那有问题。但是如果不开门,那是更麻烦的问题。更何况,即使网点不开门,各种非网点办理的业务,包括电汇等,是不是也要暂停呢?所以,这件事1小时内就层层上报到中央,然后全省武警立刻去各主要网点门口待命,防范群体事件。

知道了吧?这是 政治事件 ,从上到下,很多人的饭碗,很多人的前途,甚至很多人的生命(例如说如果真有闹事,控制不住的话),都会和你的程序相关。

其实每个行业都有自己的行业特性。

游戏行业之所以可以大胆的用各种最新最前沿的技术,不是做游戏引擎的人都比较聪明,比较牛,其他行业的不会这么干,而是因为 游戏行业的犯错成本低

所以你看我上面列的好几个不同领域的,因为他们的犯错成本也不一样,所以他们对新技术的使用态度也是有不同的:

阿里、淘宝、QQ等,其实相对还挺接受各种新东西的,有时他们也会自己弄点新玩意出来。

华为、思科等就会保守很多,不内测个两三年是不会轻易投入生产的。

工控自动化等领域就更保守,新东西出来,没个5年10年都不敢大规模推广。

银行就是最保守的,直到现在,连分布式集群都不敢随便用,核心系统基本上还是靠大型机死命扛。

所以, 术业有专攻

没那个行业的技术可以包打天下的。

谁要是觉得支付宝/银联/银行/证券交易系统的那套东西,业务简单逻辑简单外加预算宽松,于是觉得自己在游戏引擎十几年准实时系统的研发功力,绝对是手到擒来的话,那请组团去做一套出来,然后看他们 敢不敢 上线?

----------------------------------------------------------------

不少人在评论中都表示(或者说质疑):难度不等于稳定性。

何为难

一句话: 别人能做到而你做不到的就是难 (反之亦然)。

永远不要以为XX特性是我没去做,而不是做不到。很多事情,你没真正做过,是不知道里面有多少问题的: 魔鬼在细节中 (The devil is in the detail),这句话在软件行业极为适用。

至于有些人说什么:稳定性不过是细心云云,我只能说,这不但是无知,而且是对过去几十年来所有软件工程研究成果的一种侮辱。就好比一句话: 考100分不难,不过是细心而已 。这句话在学霸口中说出来,那是谦虚,在学渣口中说出来,那就是 无知 。所以,请所有想说稳定性不难的人,先把自己手上的代码、模块、系统做到和别人一样稳定,然后再来高谈阔论说:稳定性不是难度。

再说回软件开发。

一个软件系统,其难度可能体现在以下几个方面:算法、架构、实现、规模、稳定性、性能、可扩展性……

当然,在现实中,受限于各种实际条件,所以我们在以上几点几乎是不可能同时做到完美的。所以我们通常说的「设计」,其实就是综合考虑实际情况,在以上各种指标和参数间作出 取舍

而不同领域,一般情况下的取舍倾向是有不同的:

例如说游戏,在一定程度舍弃了稳定性、规模和可扩展性,而把算法和性能会调整到极致。

而像google/阿里/腾讯等互联网企业,则在一定程度上舍弃了性能(互联网公司很少会追求单机、单服务的极致性能),而通过平行扩展能力,把规模、架构等做到极致。

例如银行等,稳定性第一,其他一切往后排。至于算法或者可扩展性嘛,就只能呵呵了。

再说回游戏。

某些做游戏的人,例如说

Chaos

,说他们做游戏的也追求稳定性。

那我就想问一下,要谈稳定性,最起码就是没bug,对吧?例如说,一个三天两头就发生空指针访问的模块,怎么都算不上稳定吧?

好,那我不妨请

Chaos

或各位做游戏的人来报一下料,说说看,你们的游戏工作室,或者你们曾经参与过的某款游戏,在上线前,测试的 行覆盖率 函数覆盖率 分支覆盖率 条件覆盖率 分别是多少(别告诉我你们工作几年都不知道这些指标的含义)?

然后,据我所知,很多游戏,别说上线标准如何,很多是连这些数据都 根本没有 。你们不妨给我一点反例?

所以,你们说你们也追求稳定?还要动不动和通信、银行等行业比稳定性?

说得难听点,真是: 井底之蛙