# 对游戏服务端开发岗位的调研

学习来自:多名游戏开发专家的知乎问答(知乎话题:游戏后台开发

客户端与服务端 #

从技术上来说,两者无高低优劣之分。

客户端做深了做到引擎级别,图形图像算法,兼容性,内存优化等层面;
服务端主要价值含量在高并发,高负载,高可用,这些架构层面的东西对每个大规模并发的应用来说必不可少;

客户端技术更新迭代较快(需要学的东西更多),而且体力活比后端多;
服务端其实更为稳定,优势在于技术更新迭代没客户端那么快,而且所积累的知识转行到其他互联网服务 80% 依然适用;

产品上线前,客户端不停地加班,服务器需要陪着,上线后服务器端不停地加班,客户端需要陪着,对于开发你永远都有事情要做,而且永远做不完;

特别地,服务器程序还要跟数据库打交道,而数据库里面的数据有些又和充值相关,一旦出错就相当严重,故压力很大;赶上版本更新,从第一天下午一直加班到第二天的下午都算是正常的;

服务端技术含量:底层优化了多少性能,做了什么高可用架构,服务器稳定运行了多少天(所做游戏承载了多少用户就代表着面临多大的挑战,平时几百并发在线的 2D 卡牌游戏和腾讯的王者荣耀相比,无论是服务器架构或客户端表现甚至美术原画细节上,需要考虑的问题都是天差地别的);

后端的日常工作 #

主要是编码,完成策划的需求的同时,必须注意代码的质量,可运营、可维护,必须掌握:

关于团队协作,特别是代码框架,模式等抽象的内容,为了保证整体质量,每做个大功能在编码前可能需要和全组的成员一起开个评审会,确保不会破坏现有框架,确保没有重复造轮子等等;

缜密严谨的编码习惯,重视内存和性能,不放过任何错误处理,关键逻辑都确保有 Log 记录;

需求分析和沟通能力,来自策划同事和运营同事的压力比较大,后端的努力可以让他们的工作变得方便简单;

除了编程技巧,对网络编程要理解深刻,异步操作,RPC 机制这些也会用到,因此加锁,回调等内容会使得你编码的脑力消耗变大,不过在成熟的团队中这些基本上都封装好了,只需要学习一门脚本语言即可;

关于游戏后端开发语言 #

做游戏后端可以使用的语言有:Go、Lua、Python、PHP、C、C++、Java,或者对这些语言组合使用

关于后端存储 #

有时候 MySQL 的访问速度就能保证,有时候要上 Redis,有时候需要 Memcache + MySQL 或者 mongoDB

前辈的经验 #

链接:https://www.zhihu.com/question/41498780/answer/93337165

能靠做技术达到富贵的毕竟是人极少数,如果只是想找个赚钱的工作,做程序员并不是啥好的选择,因为没有兴趣就一定做不好。特别是在游戏行业,程序员只是一个辅助角色,其价值必须依附于产品才得以实现,但产品最终是否大卖核心并不在技术。

做好一个游戏程序员,最重要的是对技术的兴趣(当然还有对游戏的兴趣)。

在程序界,游戏程序员算是一个较为独立的领域,换言之,如果你真的做了多年游戏,与其他如电商 / 社交之类的领域会有一定的分隔。固然,这个分隔随着个人能力的积累会越来越模糊,但是不能忽略。比如工作 5 年后想改行去做电商,就不是那么现实,游戏行业在过去十几年可能算是黄金年代,但辉煌不会是永远。

需要学什么?不要问这个问题,做好眼前的工作,做到极致,探究根本。要学的东西是列不完的,谁知道明年什么技术重要呢。不存在什么需要学习的技能列表,核心是学习的兴趣 & 心态: 追求极致,探求根本,拥抱变化。

后端每天做什么?太多了,典型的有:跟策划讨论需求(能否实现,如何实现,何时实现);设计 & 实现各种后台系统如玩家物品管理,好友管理,排行榜…等等;上线的产品还需要跟进维护,比如半夜发现有严重 bug 需要紧急处理的(相对而言客户端程序员很少遇到这种情景)。

工作内容会怎么发展变化? 多年后,工作范围早就模糊了.可能某天客户端的同事遇到啥棘手Bug,你也帮忙处理,于是客户端你也开始做了.可能某天策划觉得手工填写刷怪的坐标点太繁琐了,于是你就操起C#开发工具了.可能某天公司又招了几个毕业生,为了让他们快速上手,于是,你负起了指导新人的责任,开始带团队了.

对工作回报的预期.经常在知乎上看到人讨论剑网三,撸啊撸之类的,但是做出这种大作的概率极低,业内超过90%的产品是死掉的,就算是在腾讯这种大厂也一样.当然,技术做得好的话,个人也不会太穷,只是不要指望靠这个富贵.

其他资料参考 #

游戏后台开发九问(腾讯技术分享实录)
从游戏角度看后台开发

End.