刚入职应该如何快速阅读公司项目代码呢?

前言

我想作为任何一名程序员都会遇到这个问题,是的,比如我!今年刚跳槽从北京回到了深圳。入职的时候我以为看两三天就会开始给我分配任务。结果第一个星期过去,第二个星期过去,都没没有给我安排任务,每天都是让我自己看项目代码,然后看的不明白的地方去问。

实话说,开始挺慌的,因为其实我更习惯去在做的过程中去理解,光看能看的个啥,实践出真知!哈哈哈哈。但是其实这是错的!磨刀不误砍柴工呀!!,其实前期花时间去理解是很有必要的! 因为在后面我开发的时候,很多东西自己做完之后,带我的导师给我检查,然后发现其实很多东西是项目框架中已经有相应的接口了的。然后试用期的第一个月的评价是符合预期,其中最大的问题就是细节处理不够好,小错误有些,然后项目框架还不够熟希。害其实做好这些我觉得能拿个超出预期的,哈哈哈。但是当时看代码的时候基本是把每一个大的点看明如何用,就没去了解细节了。

那么如何看项目代码呢?


步骤一:项目框架和文档

拉取到项目之后,先整体看看项目的目录结构,如图中可以发现有script的文件夹,remote 的文件夹,这些还是挺重要的,我们的文件肯定不是随意安放的。在我们游戏中,一般我们平常开发的功能分为常驻的和活动开启的。比如大厅,设置界面这些,是会一直存在的,但是一些游戏限时活动,往往是我们开启这一个活动才需要加载这一个 bundle。所以一般会有一个文件夹放常用的,而一些限时开启的放到远程来加载,在这里也就是 gameassets 和 remote 文件夹。

好的项目目录结构,我们能够很快速的定位到每一个模块实现的功能,所以仔细过一遍项目目录,我们能够最快速的建立对项目的一个大致认识。

那么再过来的就是项目的文档的,天呀!能有文档的公司真的非常nice的!那就是项目的说明书的!有说明书,那还不好办~

步骤二:那么肯定是得让项目跑起来啦

真的,每一家公司项目都有自己的方案!有些时候跑起项目都不容易!首先看看是否缺依赖,还是不行的话,大胆的去问同事 吧!

那么接下来就是,从入口开始真的事半功倍呀!我们往往在游戏或者项目打开的时候做很多初始化的处理和启动,那么从这里开始可以了解整个项目的执行流程!

步骤三:核心功能

从上面起,我们就会开始到了解每一个模块的功能和使用,这里我建议自己在记事本中简单记录一下,我们这时候分版块去阅读理解,在游戏中,很多时候我们用到某一个板块,往往只是使用它的一两个接口。那么作为常用的接口我们记录下来它的使用,后面我们用到相应的功能,我们可以直接在我们的笔记中找到相应的内容,同时也是一个标识,方便我们快速的再次定位到我们想要的功能的位置。比如下图是我当时做的一些记录,同时在后面也能继续补充一些容易疏漏的地方。

总的来说,这里就是做拆分模块的处理,把整个项目分解每一个模块,然后逐步的理解每个部分的功能 和实现,避免手足无措,不知道从何下手,也便于更深入的理解每个功能模块。

步骤四:断点调试

断点调试那也是非常便利的方式去理解,不仅能够在我们想要的地方暂停,能够去看变量以及调用的堆栈等信息。同时,我们也能在我们想要开始的地方断点,然后单步调试,一步步的跟着执行走下去,来看代码的执行。

步骤五:问同事

很多时候一个很简单的问题会困扰我们很久,这时候不要觉得不好意思,首先作为新入职不知道是很正常的,这时候同事也会很乐于回答你的。如果怕老是打扰到别人的话,你可以把你的问题都记录下来,然后找一个看起来别人比较空闲的时候去问。不要害怕问,多去问和交流,因为往往讨论的时候,不仅仅是会解决一个问题,还会带来一些别的扩展,打开思维。

工作中如果不敢说,不敢去找别人帮助,没能解决问题,快速上手,不仅是给你自己带来问题,同时等到那个时候可能还得别人来帮你收拾锅,那才更加麻烦别人。其实在职场,真的需要厚脸皮一点会比较好!

其他个人经验

阅读的过程中,我觉得还得特别注意抽象方法,一般我们基类实现好的,会定义好一些抽象方法,子类需要实现,那么我们就要了解好它的一些调用和实现了。开发中使用这些实现好的,而不是自己经常因为没有留意到这部分而去重新实现了类似的方法。

尝试跟踪数据的变化流动也是不错的方式,查看数据的调用关系,流动方式,也能便于理解功能模块间的关系。

还有的话,我觉得是枚举,在游戏开发中,往往很多通用事件会定义枚举,然后通过发布订阅者模式来通知。比如我们奖励的数据变化,那么我们就需要通知到每一个用到这个数据的视图的地方更新。那么就会有这个通知的枚举。

同时,我不同公司在技术上会有很多不同的,有优点和缺点。我喜欢经常会把公司做的好的地方,留意下来,平时会研究,拆分出来,作为自己的技术框架添砖加瓦,特别在游戏中,一个完善的游戏开发框架非常来之不易的,特别是在实际市场中验证过的,作为技术开发,我想每个人都应该有自己的技术储备,以及一些问题的解决方案。因为业务会变,但是解决问题的方案是能适应市场的。

相关推荐
lpfasd1234 小时前
node-sass 停止维护!老项目迁移 Dart Sass 完整教程
前端·rust·sass
Data analyse4566 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai6 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
环境栈笔记7 小时前
指纹浏览器 WebRTC 怎么设置?从 ICE 候选、代理出口到功能验证
前端·人工智能·后端·自动化
赵大仁8 小时前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu8 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
小羊没烦恼!8 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
史瓦辛格8 小时前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人8 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
鸥梨菌Honevid8 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet