前言
我想作为任何一名程序员都会遇到这个问题,是的,比如我!今年刚跳槽从北京回到了深圳。入职的时候我以为看两三天就会开始给我分配任务。结果第一个星期过去,第二个星期过去,都没没有给我安排任务,每天都是让我自己看项目代码,然后看的不明白的地方去问。
实话说,开始挺慌的,因为其实我更习惯去在做的过程中去理解,光看能看的个啥,实践出真知!哈哈哈哈。但是其实这是错的!磨刀不误砍柴工呀!!,其实前期花时间去理解是很有必要的! 因为在后面我开发的时候,很多东西自己做完之后,带我的导师给我检查,然后发现其实很多东西是项目框架中已经有相应的接口了的。然后试用期的第一个月的评价是符合预期,其中最大的问题就是细节处理不够好,小错误有些,然后项目框架还不够熟希。害其实做好这些我觉得能拿个超出预期的,哈哈哈。但是当时看代码的时候基本是把每一个大的点看明如何用,就没去了解细节了。
那么如何看项目代码呢?
步骤一:项目框架和文档
拉取到项目之后,先整体看看项目的目录结构,如图中可以发现有script的文件夹,remote 的文件夹,这些还是挺重要的,我们的文件肯定不是随意安放的。在我们游戏中,一般我们平常开发的功能分为常驻的和活动开启的。比如大厅,设置界面这些,是会一直存在的,但是一些游戏限时活动,往往是我们开启这一个活动才需要加载这一个 bundle。所以一般会有一个文件夹放常用的,而一些限时开启的放到远程来加载,在这里也就是 gameassets 和 remote 文件夹。
好的项目目录结构,我们能够很快速的定位到每一个模块实现的功能,所以仔细过一遍项目目录,我们能够最快速的建立对项目的一个大致认识。
那么再过来的就是项目的文档的,天呀!能有文档的公司真的非常nice的!那就是项目的说明书的!有说明书,那还不好办~
步骤二:那么肯定是得让项目跑起来啦
真的,每一家公司项目都有自己的方案!有些时候跑起项目都不容易!首先看看是否缺依赖,还是不行的话,大胆的去问同事 吧!
那么接下来就是,从入口开始真的事半功倍呀!我们往往在游戏或者项目打开的时候做很多初始化的处理和启动,那么从这里开始可以了解整个项目的执行流程!
步骤三:核心功能
从上面起,我们就会开始到了解每一个模块的功能和使用,这里我建议自己在记事本中简单记录一下,我们这时候分版块去阅读理解,在游戏中,很多时候我们用到某一个板块,往往只是使用它的一两个接口。那么作为常用的接口我们记录下来它的使用,后面我们用到相应的功能,我们可以直接在我们的笔记中找到相应的内容,同时也是一个标识,方便我们快速的再次定位到我们想要的功能的位置。比如下图是我当时做的一些记录,同时在后面也能继续补充一些容易疏漏的地方。
总的来说,这里就是做拆分模块的处理,把整个项目分解每一个模块,然后逐步的理解每个部分的功能 和实现,避免手足无措,不知道从何下手,也便于更深入的理解每个功能模块。
步骤四:断点调试
断点调试那也是非常便利的方式去理解,不仅能够在我们想要的地方暂停,能够去看变量以及调用的堆栈等信息。同时,我们也能在我们想要开始的地方断点,然后单步调试,一步步的跟着执行走下去,来看代码的执行。
步骤五:问同事
很多时候一个很简单的问题会困扰我们很久,这时候不要觉得不好意思,首先作为新入职不知道是很正常的,这时候同事也会很乐于回答你的。如果怕老是打扰到别人的话,你可以把你的问题都记录下来,然后找一个看起来别人比较空闲的时候去问。不要害怕问,多去问和交流,因为往往讨论的时候,不仅仅是会解决一个问题,还会带来一些别的扩展,打开思维。
工作中如果不敢说,不敢去找别人帮助,没能解决问题,快速上手,不仅是给你自己带来问题,同时等到那个时候可能还得别人来帮你收拾锅,那才更加麻烦别人。其实在职场,真的需要厚脸皮一点会比较好!
其他个人经验
阅读的过程中,我觉得还得特别注意抽象方法,一般我们基类实现好的,会定义好一些抽象方法,子类需要实现,那么我们就要了解好它的一些调用和实现了。开发中使用这些实现好的,而不是自己经常因为没有留意到这部分而去重新实现了类似的方法。
尝试跟踪数据的变化流动也是不错的方式,查看数据的调用关系,流动方式,也能便于理解功能模块间的关系。
还有的话,我觉得是枚举,在游戏开发中,往往很多通用事件会定义枚举,然后通过发布订阅者模式来通知。比如我们奖励的数据变化,那么我们就需要通知到每一个用到这个数据的视图的地方更新。那么就会有这个通知的枚举。
同时,我不同公司在技术上会有很多不同的,有优点和缺点。我喜欢经常会把公司做的好的地方,留意下来,平时会研究,拆分出来,作为自己的技术框架添砖加瓦,特别在游戏中,一个完善的游戏开发框架非常来之不易的,特别是在实际市场中验证过的,作为技术开发,我想每个人都应该有自己的技术储备,以及一些问题的解决方案。因为业务会变,但是解决问题的方案是能适应市场的。