游戏开发的编程算不算是 IT 行业中难度最大的?
首先,没了游戏,IT行业估计还是能转的好好的,游戏在IT领域的影响真的是很小很小的。游戏引擎的开发是很难,也只是对引擎的设计者和架构者而言,难度在于他要设计一套很复杂,对性能要求很高的系统,广而化之,任何一个这样的系统,难度都很大,而且他对稳定性的要求往往比很多其他复杂系统要低,所以对于普通游戏开发工程师而言,合格的C++程序员即可,并不比其他行业要求来的更高。
最难的不一定是企业级开发,但是企业级开发一定是最闹心,要求效率最高,最不允许出现严重bug的。而且要非常简单,非常好用,导航要有非常清楚的解释,设计开发企业级应用,比游戏应用不知道要多设计和研发多长时间,需要多长时间去抓虫。然后还是不能避免一堆问题。其实开发这种技术,真的没有难不难,入了门,就是一种技术而已。只有站在场边看杂技的,觉得杂技难。表演杂技的人,却认为这是一种常态。编程,如此而已。
对于IT行业来说,难度高不高,只在于需求到什么程度,与行业无关。2048也是游戏,魔兽世界也是游戏,这两个难度的区别大家都看得出来。简单的即时通讯功能大学生也能写,但是承载量和稳定性能达到微信和QQ这个级别的全世界也没几个。电商网站大学生也能写,但是能撑得住双11流量的淘宝全世界可能真没有第二个。游戏开发的一部分难度在于需求多而复杂,的确一般的商用软件很少到达这种复杂度。但是其他的行业有其他行业特有的复杂度。这种单纯的比较意义不大。
从难度上讲并不是,但游戏开发是IT行业中非常有乐趣的分支。这其中尤其high的是做Rendering。假如同样是在几千人年的项目中搬砖,Rendering的输出是直接进入眼睛的,刺激感强烈(堪比现在做前端做UI的到处刷存在),非常容易给coder带来成就感。这也是为什么会有很多人一讲游戏就提到自己做过的xxxrenderer,因为可以贴图嘛。而写个alloctor就只能贴表格了……当然其他方面也很有意思的。比如别人写了个牛逼的高并发的xxx框架,可以用来让1000w用户同时卖买水货和盗版光盘,但你可以写个支持高并发的zzz框架,可以让1000用户同屏pk和对骂。别人的QA报bug是某个数据出错了导致了飞机坠毁,你还得出庭受审。而你的QA报告说有用户毁灭了1000个星球,你只需封掉那个玩家帐号就可以了。顺道说,这里的乐趣并不是指金钱。如果金钱能带给你更多乐趣,或许游戏行业并不是最佳选择。
看是游戏的哪一部分,假如是拼接界面,或者是使用别人封装好的引擎来写代码的话,并不难。难的是封装引擎这一部分。是不是最难我不知道,反正是挺难的。我做的主要工作就是设计并编写工具和SDK来将flash的矢量和动画导入到手机游戏中使用。我们仅仅是做最简单的2d游戏,基于cocos2dx,相当于在cocos2dx的基础上面在嵌入一个可以操作flash的动画引擎。这种情况已经是游戏引擎中最简化的情形了。其实我都不好意思称呼自己做的东西叫引擎。这个事情困难的地方,并非是某个算法的实现,而是怎么将现有的模块组积起来,不断重构和调整,适应项目的需求,必须运行快。就这样简单的东西,就涉及很多功能模块,比如:swf解析。有人会觉得swf开源库到处到是,随便找个就可以了。问题是那些开源库,swf解析跟绘画部分都绑得很死,真可以实际使用,还是需要对着文档将解析部分单独抽离出来。swf格式会慢,必须预先转换。下一步就涉及到导出格式的设计,简单的文本格式会慢,就需要设计二进制格式。单纯二进制格式,就设计了3版,需要在读取速度跟大小之间取平衡。动画导出和预览工具第一次使用Objective-C编写,只可以在Mac上面运行。第二次用Qt编写,跨Mac和Windows。代码结构大调整了一次,将所有的平台相关的东西封装起来,移植到iOS,安卓,Qt。渲染部分,重写了一次,第一次基于cocos2dx的CCNode,实在太慢。第二次将动画的渲染全部改写,将动画节点集中起来,直接基于opengl来编写。还有一系列的功能,比如切换shader,纹理缓存,内存分配器,后台预加载,颜色混合(用来做光效,比如爆炸效果需要亮些),动画快进和慢放,角色换装换武器,UI界面支持(直接使用矢量来搭UI),lua脚本绑定等等。感觉上,最初一些基于现成模块写的东西,随着速度和定制的要求,慢慢被替换并重写。接下来还需要嵌入Box2d物理引擎,隔离opengl,支持metal等。现在回头看cocos2dx上的DragonBone,感觉它太弱了。上面这只是最最基本的,很多人看不起的2D引擎,还只是2D引擎中的动画部分,有人甚至觉得这些东西不值一提。对于我来说,从头做出那套东西,也值得骄傲的,可能我太菜了。上面每一部分都不难,难点就在于将上面所有的东西集成起来,将复杂性都封装起来,提供一个简单的接口给制作具体游戏的人来用,还要保证速度和可移植性。很多部分是相互矛盾的,需要权衡取舍,并非是网上找段代码,简单合并就成了。商业化的3D引擎,加上AI,物理等东西,那个困难程度很高的,我自问已经把控不了。当某人总说某样东西很简单,就需要小心了,他不会尊重你的劳动成果,因为太简单了,普通大学生也可以做出来。但实际上就算很看起来很简单的东西,你要做好,也是很难很难的一件事情。
回答请先登录