游戏编程十年总结(下) 📅 2026/7/2 2:36:58 游戏编程十年总结的上篇总结了前五年初学编程的经历下篇总结的是开始工作之后的经历前面五年算是一帆风顺而接下来的经历则充满了挫折与失败。第一份工作由于学历不高还没毕业经验不足让我吃了不少闭门羹在大三刚开始时就开始在网上投放简历了但基本是石沉大海。虽然没有面试邀请我还是独自一人来到了深圳因为对深圳这个城市很有好感因为前面来深圳比赛的经历。为了得到面试的机会我不惜跑到人家的办公楼去霸王面可惜并没有获得面试的机会但现在回想起来直闯人家的办公楼要求霸王面的时候还是蛮有魄力的虽然没有拿到面试机会但年轻人就该如此想做的事情就放胆去做不要逃避不要让自己后悔。初来深圳时已经在深圳做了几年游戏开发的梁师兄对我很是照顾过来深圳比赛时认识的在深圳晃荡了一周之后终于否极泰来接到了两个面试通知面试的过程很顺利也学到了不少东西两边的面试官都对我挺满意的拿到了一份转正后3K的3D客户端开发Offer和一份试用期4K的C服务端Offer于是我选择了后面的那份Offer除了因为薪资高些之外上班的地方在师兄附近后来住的地方也在师兄附近。在工作的第一年里学习到了非常多的知识网络编程和Linux服务器开发是我从未接触过的几乎是从入门到熟练掌握服务器开发这段时间的进步比以往任何时候都要快。在入职之前BOSS就给我描绘了一下美好的未来C服务端这个部门现在就你和另外一个工作一年的程序但是马上会有3位经验丰富的大牛入职其中有超过10年经验的大神而且我们还有一位非常强力的技术支持——于彤来自博雅的服务端大神他为我们提供了一套高并发的服务端底层框架虽然他只是偶尔来客串一下但却给了我非常大的帮助也很大程度上影响了我他的话不多但每句都很受用。在认识的人中他的技术几乎是最好的但也是最谦虚的他的头衔是架构师但他说他只是一个程序员。首先复习了网络编程的基础并将其搬到linux上这是我把linux玩得最溜的一年在于彤的指点下看完了《APUE》《Unix网络编程》《TCP/IP详解 卷一》等著作大学时看《TCP/IP详解》如读天书但在了解网络编程之后再看这本书反而津津有味下班之后没有其他事情独自回到白石洲的农民房里就是看书。为了解答疑惑、解决问题而学习比起普通的系统学习效率要高得多因为目标非常明确。在工作中还了解了sql以外的nosql数据库如memcached、redis、mongodb等等让人大开眼界在于彤的指点下自己依葫芦画瓢用epoll单线程非阻塞的模式写了一个简单的服务器框架用这个框架实现了一个负载均衡的服务器于彤看后赞赏有加跟我重申代码要简洁这个词深深刻入了我的脑海里。那时写的服务器能在数万并发连接的生产环境中稳健运行是一份非常宝贵的经验像什么远程调试core和日志的分析性能瓶颈分析也是那时候总结下来的经验。后面在读过于彤的底层框架、memcached和libevent等开源代码之后自己又写了一个开源的迷你服务器框架之后包括现在的项目用的都是这套框架在开发。如何设计分布式的服务器架构来保证服务器的可扩展性保证每台服务器的功能单一简洁满足一些跨网关的实时转发的交互需求等等这又是另外一份宝贵经验。一个靠谱的后端程序员需要拥有能够解决各种问题的能力与前端程序员不同后端程序员更多是靠经验堆起来的没有经验的后端程序员连可能会遇到什么问题都不知道。后端主程在公司待了一年只为公司的一个页游开发了一个PVP系统之后由于没有项目做闲得发慌。由于和主程相处的不是很融洽所以也就打算离开了他的脾气火爆不尊重人并且不喜欢承担责任在项目中解决了他的不少BUG例如死循环、内存泄漏等等。记得他曾使用strlen来判断一个结构体的长度向他指出这个错误之后他跟我扯我不懂操作系统内核实现的原理于彤知道后笑了说那你让他讲讲操作系统内核是怎样实现这个原理的。火爆脾气的主程去到其他公司之后听那边的朋友说他的火爆脾气一点没改并且还掌握了使用挖掘机挖坑的高级技巧。过完年部门发生了巨大的变化C开发部的两个大神就离开了。本来我也打算离开了拿到了Double薪资的Offer但由于是做Java心里并不是太愿意。然而在准备提离职之前公司让我做后端主程负责一个新的MMO手游项目的后端开发我一下子就来精神了这显然比写Java要好得多这可是领导对我的信任啊而且如果去新公司的话我上班得多踩10分钟的自行车吧。开新项目的同时新的血液也注入了进来有3个小伙子进入了我们部门其中的穗智小师弟后来成为了我最得力的助手但有一个小伙子表现不佳怎么带都没带好后来他转行去做测试了主管问我他不是我面试的吗他是怎么通过我面试的我说面试的时候我出的各种题目他都答得很好啊其他人都没答对就他答对了呀。直到前几天想起这个问题才恍然大悟面试时是在他们的培训机构面试的一群人在外面轮流面试只准备了一份面试题前面的人答错了我都会跟他们讲解一下估计最后一个进来的他已经了解了所有的面试题......于彤说主程并不是要自己成功而是要帮助下面的每一个人取得成功这样才是成功。所以后面招了一些新人进来的时候我总会花比较多的时间进行培训当大家都能独当一面的时候主程也就轻松了。磨刀不误砍柴工帮助其他人进行提升也是磨刀。新项目的后端比较简洁人也不多开发进度也是稳步向前但前端的进度看上去颇为糟糕起码从给我看到的一些代码来看算是耦合性较高可读性较差的代码了。构建在这样代码之上的程序BUG自然也是颇多这个做不了那个无法实现。在这个项目中我在技术上并没有多大的提升只是默默地攒着主程、管理的经验值包括如何规划分配任务、沟通传达、如何上政治课、如何给他们打气加油、碰到问题帮忙解决等等。虽然是初任主程但秉着负责的态度基本上保证了后端的开发进度稳定快速。这一年因为总体上比较悠闲所以业余时间自学了一下Irrlicht和Ogre等3D游戏引擎翻译了Ogre的初级和中级教程CEGUI的相关教程以及PhysicX物理引擎的官方文档并用OpenGL开发了一款物理冒险游戏《小铁蛋历险记》。在差不多年底的时候还和师兄使用Cocos2d-x一起开发了一款ios手机游戏。然而又是过完年项目组发生了巨大的变化项目经理、主策、客户端程序纷纷离职然后又空降了一波人过来原先写的代码全部推翻使用新的后端主程带来的框架项目重新开始...。新的后端主程也是一个经验丰富的程序员带来了一套Windows的MMO服务器框架什么东西都是现成的需求大部分都是在这套框架上稍微改一改就做出来了有点类似所谓的换皮复制粘贴成为了最常用的开发技巧。但我并不喜欢做这些工作也不喜欢开发Windows的服务器与Linux相比性能要糟糕很多在这里完成了一些简单的模块吸收了框架里的一些经验之后我提了离职。这是一次裸辞因为我和一个美术同学我称他为淡总使用Cocos2d-x一起开发一款病毒塔防游戏想离职了好好把这款游戏做好业余时间开发游戏还是蛮累的但这款游戏是我目前为止做过最棒的游戏了有强力美术的加盟就是不一样。这次辞职并没有成功改为了请两个月的假期假期里基本将游戏的代码写完了还接入了ShareSDK但是淡总怂了因为后续要制作的各种关卡需要花费的时间太多了从关卡的设计到关卡中每个地图的绘制再到数值的调整这些看上去还是需要一个专业的策划才能搞定于是这款游戏被搁置了。之后淡总提议用这套美术资源开发一些其他的不需要关卡的游戏不要浪费于是我们使用这套资源开发了病毒射击和病毒消除小游戏这两个游戏都做完了但是玩起来感觉很单调于是病毒射击又改成了病毒射击塔防在病毒射击的基础上增加了很多新元素设计了各种地形各种道具看上去游戏的可玩性增强了很多但最后又回到了和病毒塔防一样的问题关卡、场景、数值.....结果这些游戏一个都没出来。在这些小游戏的开发过程中总结了不少经验那时Cocos2d-x刚刚兴起资料还很匮乏于是有了编写Cocos2d-x书籍的念头小游戏不搞了那就将Cocos2d-x积累的经验写成书吧。U3D主程结束两个月的假期回到公司就开始了打杂这时手机游戏和手机游戏引擎Unity3D、Cocos2d-x正是非常火热的时候BOSS希望搭建一套通用的Unity3D底层框架把游戏的规则抽象出来每开发一个游戏都只需要继承一些类然后实现类里面的一些接口即可这样就可以很快的开发一款新游戏。但我完全没有接触过Unity3D多次的开会讨论都没有得出一个好的结果因为这种框架很虚如果说有这样一套框架的话那不就是Unity本身吗最后只是用C#的委托实现了一套消息机制底层另外由于原先U3D的网络底层实在是太糟糕了根本无法重用于是实现了一套U3D通用的网络底层框架代码非常地简洁易用。后面这套消息机制和网络底层被应用在了公司的所有U3D项目上MMO手游项目的新主程接手项目的时候直接推翻了所有的代码只保留了这套消息机制和网络底层再后面一些这套消息机制和网络底层也被应用到了不少其他公司的项目上了然而在代码中关于作者和日期等注释信息却被删掉了......这种感觉就是我写的东西变成了别人的了再跟我没有任何关系。编写框架并没有花费我太多的时间但为了设计好为了简洁好用我投入的精力却不少。业余时间仍然是和淡总他们一起开发着病毒系列小游戏。公司的一个主策建哥很有想法很能忽悠在他的忽悠下我和穗智小师弟也帮他开发了一些小玩意穗智帮他开发了一个看美女图片的应用穗智拿到建哥整理给他的性感美女图片时穗智吐槽了建哥“这样的图片我百度可以随便找到一堆”都是一些普通的泳装美女图片这款手机软件的功能就是一张张地翻阅这些图片30张之后的每10张会有一个密码。建哥打算回老家卖低端的安卓机器顺便推销这款软件当用户需要看到心痒痒的时候密码输入框弹出来了然后用户就要带着手机过来找他交钱之后建哥偷偷地把密码输入进去就是这么一个商业模式建哥说靠这款破软件他一年就可以进账100万虽然最后这款软件一份都没有卖出去但建哥混的要比我们好得多我还是主程他已经是四个轮子的CEO了。另外一个独立开发手机游戏的小团队邀请我加入他们策划美术程序齐全但我没有答应经过了反复的游说我答应帮他们用Cocos2d-x搭建一个框架和基础的Demo仅仅是友情协助。在开发的沟通过程中感觉并不是很靠谱因为游戏不好玩美术不好看很多东西反而要我去催。Demo如期交付了Demo一段时间之后这个团队解散了因为在开发的过程中有人还去接外单当这个团队解散时项目的进度仍然停留在我交付Demo的那一刻。这个团队的解散给了我很深刻的印象要么不做要做就全力以赴兼职开发的这种小团队一个拖后腿全部完蛋每个人都要有很强的责任心对自己做的东西有强大的信心主动往前才行如果是由一个带头的推着整个队伍前进这样是走不远的。不久之后我和淡总的病毒游戏也告了一段落大家都太累了病毒系列的几个项目的代码沉睡在了硬盘上的某个角落。接下来学习了一下U3D发现U3D这个引擎比Cocos2d-x成熟的地方太多了了解了各种更加成熟的理念C#这门语言用起来也非常爽快。我开始作为U3D主程负责一个项目这是一款局域网对战的项目类似一个游戏平台内部可以嵌套很多个小游戏公司已经做了一年多已经做烂了原项目组的程序都跑去MMO的项目组了于是从新招了2个U3D客户端一起捣鼓这个项目。项目的代码实在是非常糟糕各种不规范BOSS希望我在这个基础上继续然而我选择了推翻重构。因为项目的业务逻辑都写到了我的网络底层框架里面了像这种东西就该做成库不然他们改原本这款游戏是可以单机和局域网对战BOSS希望可以加入广域网对战的功能但广域网对战暂不开发。我和两个小伙伴花了2个多月的时间只保留了原有的美术资源所有代码全部重写重新设计。并实现了一些新的功能完成了这个项目重构之后的项目代码简洁耦合性低巧妙使用了消息机制完成了单机版本之后只花了1~2天就把所有的小游戏实现了局域网对战再花上少量的时间我们可以很轻松地实现广域网对战。虽然开发过程中换了3次人来了又走但我们还是按时完成了任务最后打包的那天我们好像加班到了快2点这是加班的最高记录。最后这款游戏在商务阶段没有了下文又是一个无疾而终的项目而这些绞尽脑汁写出来的代码又在硬盘上的某个角落沉睡了。