从游戏服务端到Web前端

虽然这个标题看起来很厉害,但是其实只是我的一篇随笔,没有很大的技术参考价值,况且我无论哪个方面也没有很高的造诣。这里只是抒发一下我开始工作后的感受,在这个公司提前下班的七夕里。

怀着对游戏的满腔热情,我拿到了一个主营网络游戏的公司的Offer,心想,迎合我的兴趣和特长,我一定能成就一番事业。于是我在几个月前开始了实习,刚开始是一段自学期,因为公司用python作为游戏脚本,而且推荐教材是《Python核心编程》,于是前两周便都在啃那本书。然后是一个考核,决定我们这帮新来的程序猿将进入哪个项目组。我灰常荣幸地进入了公司最赚钱的游戏的服务端,顺便说一下在公司里对程序猿的划分从牛掰到水逼是服务端>客户端>应用软件>移动平台游戏>WEB,当然这只是由公司文化决定的。

然而我的想象很快就被扑灭了,作为一个服务端的程序员,你要做的只有根据策划提出的要求,写逻辑写逻辑写逻辑。如果这是一个独立游戏,我想最有趣的地方就是写逻辑了吧,然而对于网游来说却并不是这样的。

这是一个已经完全引擎化的东西,基本上公司所有游戏都是用的同一个引擎,服务器引擎基本上只定义了客户端与服务端通信的方法以及数据库存储的抽象化。因此逻辑与显示被完全分离了,显示完全就是客户端做的事情,逻辑完全属于服务端,两者之间只是通过socket来相互传递命令。如果只是这样的话还不错的,逻辑与显示分离一直是很多框架所追求的,然而基本的脚本框架也都基本是从一个游戏拷贝到另一个游戏中的,所以程序员能做的基本上只是往框架里面填东西。明明可以使用更好的设计模式,更好的结构,但是为了让你从一个项目组调到另一个项目组时能很快进入状态,这些都是不允许你去改的。

于是随着功能的添加,局部代码只能越来越臃肿,甚至臃肿到可读性已经基本没有的程度。最后只好不再给你将一些通用的功能添加到父类里,而在子类里特殊地实现,目的只是不再降低通用部分的可读性。他们对“代码即文档”这句话痴迷到近乎疯狂的地步,甚至不允许你多写注释。

那么,所谓的写逻辑,就只能是一些很简单的往框架里填的逻辑,比如某人到某地触发一些什么对白,触发什么战斗,战斗后有什么奖励,收集一些什么物品,或者将这些东西组合起来做成一个任务或者活动。尽管你可以将这些东西写得很面向对象,然而这只是脚本,你写得面向对象并不是因为可扩展性好,而是可读性好,让别人更能读懂你的代码,当然这减少了你的代码量,也是一件好事。底层引擎你是不可能去接触到的,对所有普通员工来说都是闭源的,所以你只要掌握了这个写一般脚本的能力,你可以很轻松,不需要再学什么新技术,也能在这里呆个10年左右,因为技术以及架构都几乎不可能再更新了。作为一门脚本,除了bug的修复,也不需要什么更新。当然,首先你要去读懂那些没有文档,也没有注释的只能祈祷他不再用拼音命名的“即文档”的代码。

尽管在公司里面认为在越能赚钱的项目做越牛掰,而且公司也会将提升的程序员调往更赚钱的项目,而将更有资历的程序员调往新项目,然而一个游戏能否赚钱,实际上跟他的技术甚至程序员没有绝对的联系。因为每个游戏的技术基本是一样的!从引擎到框架,也许只有战斗系统和技能系统有所不同,但是这并不是由程序猿决定的事情,而是策划。换而言之决定一个游戏赚不赚钱是由策划决定的,而你在这样一个最赚钱的项目组里做,你面对的挑战只是更多更多更多的策划需求,而不是运用更好的技术。

很多业内人士都觉得游戏行业不是IT行业,一开始我很鄙视这种说法,凭什么我们运用程序设计的技术来创造虚拟世界就不是IT了呢。然而,我终于体会到,网游这种东西只是刚好用到编程的营销而已,不但技术落后,而且不思进取。我当然可以选择在这里干上十年,到时我也能成为一个富裕的人吧,仅仅是金钱上的,没有业余爱好,没有技术,没有时间,没有妹纸。。。一旦这个行业被淘汰,我必将失业,因为我只会写一定逻辑范围内的脚本,而这种技能除了在本公司之外几乎没有用武之地。

然而实习期间,我也没啥怨念的,仅仅是用来长经验的,越来越多同期的实习生被往下调到其他项目、客户端、还有WEB。最后我成为了基本被组长认同的实习生之一。但是正式入职第二天我想到我的将来,提出了转职,转往网站部从事网站开发。这当然是个令组长甚至主管都震惊的决定,没有资格留下来的人被调往网站部,而一个及格个人却主动申请调往网站部。他们甚至因此而添加了一条入职未满一年的人禁止提出转职的规定。他们用来挽留我的理由除了钱、还是钱,但是我知道有很多东西是无法用钱来衡量的。我花了九牛二虎之力东拉西扯两天后终于让他们让我转职了。

衡量之后,我发现做网站是比较符合我的情况,而且可以直接接触到最新的技术。比起后端也是基本逻辑加数据操作,我还是觉得比较有设计感的前端更适合我这个游戏制作人,于是我选择了做前端JS。我觉得这个职位还是比较多元化的,虽然只写JS,但是涉及的方面也可以很广泛,从页面逻辑,到页面特效,从前端JS到后台也可以用JS(Node),从PC到移动端,从数据交换到数据渲染,从页面功能到用户体验,JS能做到的东西比我想象中要多很多。可惜JS程序员在公司的地位没有得到重视,专注于前端的程序员不多,也没有统一规范,不过好消息是公司将越来越重视这一方面,将前端JS从后台人员自己编写中分离出来,我转职后不久便要我起草一份Javascript编程规范,包括命名、语法、文档注释、面向对象、前端模板等的规范。所以我还是觉得能转到前端还是挺不错的。

最重要的一点是,我有了自己的时间,有了外网机!在服务端为了防止泄密,是没有外网机的,用一台内网机你甚至见不到机箱,所以除了工作之外,你在公司几乎干不了别的事情,技术不会更新,只要懂了基本语法,基本不需要到网上查资料,加班即使没事干,也只能玩自己的游戏项目。为了坚持我的同人创作,我觉得外网机是基本的条件。

以后可能会陆续发些关于前端的文章吧,虽然以前我也没发过什么技术文章,主要是技术太烂拿不出手,今后就以学习交流的态度来写些东西吧。