从行业前景来看,随着人们生活水平越来越高,对高品质游戏的追求也越来越迫切。游戏其实也是一种文化的传播,也是人类文明的发展,所以游戏行业前景是非常长远的。从技术角度来讲,游戏服务器要面对大量的游戏用户,必须解决高并发,低延迟,大数据容量扩展,架构伸缩等问题,所以对于技术深度有很高的要求。当然,它属于计算机的产业,对计算机整体也需要熟悉的认识,比如操作系统原理,网络底层通信原理,CPU + 内存架构及工作原理等。正所谓学无止境,从事游戏服务器开发,也是一个展示所学所用的理想场所。
最近和一些想加入游戏服务器开发行业的朋友聊天,由于之前大部分是从事web开发,或电商开发的,所以对游戏行业不是很了解 ,关心最多的还是从事游戏行业从哪里入手?需要掌握什么技术?直接转行靠普不靠谱等问题。我从大学毕业之后,就一直从事的是Java游戏服务器开发,加入过创业团队,也进入过成熟的游戏公司,时间算算也差不多十年左右了,在这里总结一下,希望对想加入游戏服务器开发行业的朋友有点益处。
首先,从职业发展上来看,在游戏服务器开发行业,主要包括:普通业务开发人员,中级业务开发人员,高级业务开发人员,主程(项目组技术负责人),架构师(负责项目整体的设计与实现),CTO(公司技术总负责人),老板(一般是最后和别人一起创业去了)。
对于刚入行的新手来说(没有相关工具经验或刚毕业的新同学),到游戏服务器开发团队之后,只要曾经从事过编程,都是从普通业务开发人员做起,慢慢了解整个项目的开发流程,熟悉项目开发要求,及团队内部自己开发的一些工具应用。一般来说,业务都比较简单,只要有扎实的编程基础就可以胜任。比如Java语言开发,这些业务大多数是一些简单的逻辑判断,直接编码就可以实现。
一般来说,一个游戏项目中,游戏服务器团队大约是4-50人不等,根据游戏项目类型区分,工作量不一样。在团队中,通过阅读别人的代码,可以补充自己开发方面的经验,提高编程能力。向中级,高级业务人员发展。
对于中高级业务人员来说,需要掌握的技术深度就比较多,往往会承担很多比较复杂的业务,比如多线程,高并发,设计模式的应用,公共业务抽象,游戏中有很多复杂的业务场景,比如公会战,竞技场,副本,全服排行榜,充值支付等。达到中高级可能需要3-5年时间,这包括编程经验的积累,新技术学习,当然也有天才般的人物,在很短时间内可以胜任团队中高级业务的开发。
再一个级别就是主程,对于一般的公司来说,招聘一个主程的条件是:1,有上线项目的经验,2,技能能力强,解决遇到的各种技术问题。3,一定的管理能力,因为他需要培养团队成员技术能力,以及团结团队成员,把工作按时完成。主程应该是游戏公司技术团队中最低层的干部了,正所谓,千军易得,一将难求,毛主席说过,正确的路线确定之后,干部就是决定性的因素。所以如果你想往主程提高,不仅技术能力强,还要学一些管理方面的知识,把团队的力量最大化。而且有一定的人格魅力,这样才能管理好团队。
再看架构师,架构一词,不同的行业有不同的解释,但是最根本的就是制定基础规则,让参与方都遵守某种规则,减少错误的产出,把握项目的总体方向。抽象整个项目中公共的部分,实现项目更高层次的可用性,可扩展性,看一下百度百科上面关于软件架构的定义,因为游戏服务器也算是一种软件架构:
一般而言,软件系统的架构(Architecture)有两个要素:
1.它是一个软件系统从整体到部分的最高层次的划分。一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。详细地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(Task-flow)。所谓架构元素,也就是组成系统的核心”砖瓦”,而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。
2.建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。在建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。
所以,如果公司要研发一款新的游戏类型的服务器,首先是要确定此游戏类型的服务器架构。而做为架构师,就是要综合项目需求,确定技术方案。所以对于架构师的综合能力要求非常高,涵盖领域也比较多。比如网络通信,是使用http,socket,TCP,UDP;开发语言选择,是c ++,还是java,还是其它语言,如果使用java,是不是可以使用spring boot,spring cloud减少开发量;数据库选择,是mysql,还是mongodb,数据量大的情况下,如何做数据扩展;是单服,还是分布式服务,如何实现服务进程的动态伸缩,高并发情况下如何加快响应,提高系统吞吐量;缓存应用,比如redis;还有多线程下如何更新操作角色的数据等等。
CTO,看一下百度百科的定义:首席技术官是技术资源的行政管理者,英文为Chief Technical Officer或Chief Technology Officer,简称CTO。其职责是制订有关技术的愿景和战略,把握总体技术方向,监督技术研究与发展(R&D)的活动,并对技术选型和具体技术问题进行指导和把关,完成所赋予的各项技术任务/项目。通常只有高科技企业、研发单位、生产单位等才设立CTO职位。这一职位有点类似于我们常说的总工程师,其工作需要对企业老总(CEO)负责。
CTO及以上职位,我也没有担任过,但是如果我在那个职位了,要做的工作我觉得应该有如下几点:
- 根据公司主打的游戏类型或发展方向,统一公司技术发展方向。
- 制定公司技术成员成长路线,有计划的提高公司团队的技术能力。
- 协助架构师制定公司游戏类型构架设计与开发
- 制定技术管理机制,创建有效的技术总结知识库,不让项目或技术因为人员的变动出现损失。
- 关注和试验新的行业技术,把有助于游戏服务器开发的新技术以最低的成本融入到公司的游戏架构或开发实践之中。
从技术角度来说游戏服务器的开发,主要的任务就是实现服务器架构,业务逻辑,以及大数据,高并发,低延迟,稳定性的处理。由于计算机软件技术范围很广,甚至不同的开发语言可能都会形成一个自己的生态体系,比如C++开发,Java开发,javascript开发,python开发等。从技术成长来说,最好的发展是一专多博,把一个方向作为主要方向,其它的做为辅助进行了解。毕竟一个人的精力是有限的,不可能面面俱全,还是需要依赖团队的力量。
所谓,一图顶千言,下面以一个技术栈的脑图来看一下,如果进入游戏服务器开发行业,可以把哪些技术做为学习方向,最好是选择自己感兴趣的技术,因为我一直是从事Java方面的开发,所以就以Java编程语言为例:
欢迎关注公众号