大厂居然让我用文心快码来熟悉项目?

写在前面 :
上了好多年的学,终于毕业进入职场啦~在公司也有一段时间了,慢慢地也变成了纯正的社畜了。近来开始熟悉部门的项目代码,说实话公司的代码真跟以前接触的不一样,内部各种自建框架,让人看得眼花缭乱,一时不知道如何下手,而且公司的代码和咱们之前的课设、毕设、开源项目等都不一样,公司代码积累了很多年,经历了很多手、业务变更也很多、每个人的习惯也很不一样,所以代码内容也不是那么容易理解。好在部门的同事很 nice,给予了足够时间去摸索、去学习,并且感谢科技的进步,大模型的出现让我学习项目的效率大增!经过这段时间的学习摸索,感觉慢慢有了一些快速上手的方法论,同时结合我所阅读的文章,在此就进行相应方法的总结吧,这也是属于我的人机结合的方法论(想起小时候看的动画片,人车合一 hhh)。前段时间我看好多人都对如何快速熟悉项目发愁,我想我有必要写一篇文章去介绍我的方法!现在终于出炉了,内容总共一万字,构思到完成花费时间巨久,满满真诚!希望大家能够仔细看完~ 如果有用,愿点赞关注收藏分享,让我也有继续分享的欲望 hhhhh
在这里插入图片描述

一、学习新项目的步骤

公司代码不方便用来展示,接下来以github上的开源项目 bbs 为例进行方法的分享。

1、准备好工具

虽然说工具不是决定性因素,但好的工具能提高咱们学习及开发的效率,分为两块:编译器和开发插件

  • 编译器:我使用的是 jetbrains 的 goland,使用的原因呢,主要是之前 java 开发的时候一直用 idea,而且 goland 对 go 语言的提示也很智能化。当然这也只是个人习惯,选择 vscode 并相应开发插件效果也很不错。
  • 开发插件:看新项目过程中对我帮助最大的有 GitToolBox 和 Baidu Comate。GitToolBox 是用来展示出 git 历史状态,能展示每行代码什么时候添加的、添加人是谁、为什么添加的,很 nice。Baidu Comate 是基于大模型的辅助工具,可以用来进行各种操作,对!各种操作,它提供了丰富的功能,包括函数注释、行间注释、生成单元测试、代码解释、调优建议以及相关知识讲解等,并且以对话形式呈现, 可以问他 各 类问 题,我是java转go的,在这段熟悉代码的时间里,它极大提高了我的学习效率,有些代码看不明白或者涉及语言知识的就问它,也不用再去其他地方搜索了。

1.1 下载 GitToolBox 插件

在 Goland 的设置中找到插件选项,搜索 GitToolBox 插件,安装后重启即可。

在这里插入图片描述

1.2 下载 BaiduComate

百度 Comate 基于百度文心大模型,目前提示生成的代码有 46%采纳率,百度 30%的代码都是它写的!使用我的内部邀请链接可以获取高级功能 Comate官网 点开这个链接之后点击个人免费使用,会有相应安装教程,

在这里插入图片描述

点开后会,相应教程,根据自己的编译器进行选择相应的安装方法。
在这里插入图片描述

安装好后,comate 就会出现在编译器的右侧,如下图。
在这里插入图片描述

2、想办法把项目跑起来

这个过程其实是最烦琐、最复杂的过程,你要配置安装各类东西,包括:语言版本、开发框架、数据库、依赖文件等。通过这些操作把项目跑起来后,你可以初步了解到项目的情况。

2.1 语言版本

这里就拿开源的项目来说吧,因为是 go 语言,所以基本的 go 语言依赖信息在 go.mod 里,打开该文件能够看到该项目所依赖的 go 语言版本、框架等信息。我们首先要准备好相应的语言版本,然后再进行项目依赖的下载。
在这里插入图片描述

2.2 开发框架

对于开发框架来说,我认为这里还挺重要,因为我在学习上手项目的时候,项目所使用的框架是内部开发的,这就很头疼,如果你没见过这种框架,可能就不好里面数据流转的逻辑,也增加了学习负担,所以应该先明白所依赖框架的结构才有利于后续的理解。
在学习使用开发框架这里,我想流程应该遵循以下逻辑比较好:
进入该框架的官网—>按照教程安装配置----->完成安装----->在看业务代码前,在官网阅读框架架构设计文档----->看完业务代码逻辑,再次去官网阅读框架架构设计文档------>结合框架总结出数据流转过程,当然在这里是先对框架进行安装。

2.3 数据库及其他配置

然后查看相应配置文件,查询其数据库配置,并修改成对应地址。接着查看其他依赖配置,看是否有需要修改的地方,然后也进行修改。
在这里插入图片描述

2.4 依赖文件

最后就是检查依赖文件了,这里其实是针对于公司项目的,因为有些依赖文件是需要脚本进行生成,他们没有存放到仓库里,所以需要你多关注下。建议的步骤:
先询问同事有没有其他依赖文件---->运行------>查看错误发现缺少依赖文件---->询问同事------>安装配置---->成功运行。

3、快速熟悉项目代码结构

在这里主要是查看项目代码的情况,让我们能够对项目代码有初步的了解,便于后期快速上手。

3.1 阅读项目文件结构

阅读目录结构其实也属于读程序的一个部分,最起码能让你对代码的功能分类有个大概的了解。如果经验比较丰富,项目的目录结构也比较合理的话,其实看包名就能知道对应包的作用。但是如果是经验不太充足,或者是目录结构很混乱的情况,可以使用comate为我初步讲解项目代码中文件夹的作用,这能极大提高效率,下面详细介绍:

  • 点开右边的Comate插件

在这里插入图片描述

  • 使用# 选择当前代码库,这样comate能够识别整体的代码库,并在此基础上回答你的问题

在这里插入图片描述

  • 输入你的问题,然后comate会基于你的问题进行回答,效果真的不错,建议亲自尝试尝试~

在这里插入图片描述

在这里插入图片描述

借助大模型的力量,咱们能够快速了解到项目的文件结构,这个过程阅读加上理解也就5min,这里呢,建议把基本介绍记录下来,要不然容易忘,以下是这个开源项目的项目简介,复制于Comate。

bbs-go是一个使用Go语言搭建的开源社区系统,它采用了前后端分离的技术架构。整个项目主要由以下几个部分组成:



server:这是后端服务部分,基于Go语言搭建,使用了Iris MVC框架。它主要负责提供API接口,处理前端请求,并与数据库进行交互。该部分还使用了Gorm作为ORM框架来操作数据库,以及Resty作为HTTP客户端。此外,还集成了Cron定时任务框架和Goquery用于HTML DOM元素解析。后端服务通过Docker容器进行部署。

site:这是前端页面渲染服务,基于Nuxt.js搭建。Nuxt.js是一个基于Vue.js的服务端渲染框架,它使得前端开发更加高效。该部分负责页面的渲染和展示,通过与后端API的交互来获取数据并展示给用户。前端服务也通过Docker容器进行部署。

admin:这是管理后台系统,基于Vue.js和Element-UI搭建。它提供了一个可视化的界面,允许管理员对社区进行管理,如用户管理、内容审核、系统设置等。管理后台同样通过Docker容器进行部署。

docker-compose.yml:这是Docker Compose的配置文件,它定义了如何启动和配置上述的三个服务(server、site、admin)以及MySQL数据库服务。通过Docker Compose,可以方便地一键启动整个项目。

数据库:项目使用MySQL作为数据库,存储用户数据、帖子内容、评论等信息。数据库服务也通过Docker容器进行部署,并在docker-compose.yml中进行了配置。

总的来说,bbs-go项目的架构是典型的前后端分离架构,通过API接口进行前后端通信。后端基于Go语言和Iris框架提供高效稳定的服务,前端则使用了Nuxt.js和Vue.js等现代前端技术来提供丰富的用户体验。整个项目通过Docker和Docker Compose进行容器化部署,使得项目的部署和扩展变得更加容易。

3.2 阅读数据库表文件

阅读数据库表文件,这个看项目的具体情况,数据库表定义情况都不同,但总的来说,数据库表对应着重要业务实体,是大多数项目的关键部分。
在阅读这部分的时候,主要分为两个方法:

  1. 通过连接数据库,利用数据管理工具查看表信息,主要有:Navicat、DBeaver、Datagrip等
  2. 如果有SQL文件的话,可以直接查看SQL文件,了解里面定义的内容。针对这种情况,我们可以使用Comate帮助梳理与理解SQL文件内容,使用过程如下:打开SQL文件并利用命令 #当前文件 锁定对应文件,输入你的问题,即可获取相应答案,如下图

在这里插入图片描述

在这里插入图片描述

可以看到,Comate很快给出了对应的答案,介绍了该SQL文件中定义了哪些表以及他们之间的关系,我对照SQL文件看了下,总结的很正确。
在了解到了这些数据库表后,我们也基本就能看出这个项目业务描述的对象是谁,接下来我们就该看如何调用处理这些对象。

4、深入了解业务代码

我认为深入理解业务代码的一个关键目标是清晰地掌握业务数据的流转过程,在实现这个主要目标前其他的目标都是次要的,什么代码书写形式、变量命名都不是重要的,都应暂时忽略。其实大多数项目的基本逻辑是:
获取请求----->解析并处理请求------>调用对应服务---->服务进行数据的调用处理------>返回结果
虽说是这基本逻辑,但公司项目的逻辑是更为复杂的,每个步骤可能涉及十几个函数及模块处理,那我们如何能够快速深入了解业务代码从而理解业务代码的本质?
这里建议的方法是:先局部,再整体,后细节,最后总结。

4.1 局部–>调用接口实现局部了解

在这里的局部是指涉及到该接口的各个模块。先了解到某个接口调用逻辑,再扩展到所有接口。现在的项目基本上都是前后端分离,为了熟悉代码再把前端起来也是有点麻烦,所以可以通过调用接口的形式进行项目代码的调试,从而快速锁定接口相关业务代码,实现局部了解。

4.1.1 获取接口

获取接口主要有两种方法:找他人获取和从前端界面获取,找他人获取当然是最快捷的途径,但如果环境不支持,那只能从前端界面获取,这里提供一个获取的方法。
打开浏览器界面,并且按下F12打开开发者工具,并点击网络按钮

在这里插入图片描述

点击前端界面按钮,这里点击文章

在这里插入图片描述

可以看到右侧出现了浏览器与服务端的交互,点击对应接口,可以看到APi具体信息

在这里插入图片描述

这里因为是直接访问开源项目作者部署的地址,如果是本地启动的应该是localhost,流程都一样。

4.1.2、进行断点调试
4.1.2.1 快速选择断电位置

这里涉及到如何快速打断点,代码那么多,总不能一条条看吧,因此我总结了一些方法,根据api进行搜索选择,打上断点,然后专注调试过程。这里直接拿项目代码举例。
我们以上面抓取的api接口为例:api/article/articles

  • 在编译器上全局查找该接口api/article/articles,发现只有在前端界面有这个,咱们关注的是后端代码,然后再进行搜索

在这里插入图片描述

  • 扩大范围全局搜索/api,出现以下界面,针对含有/api的文件依次查看

在这里插入图片描述

首先,打开server.go文件,一言就发现这跟咱们api接口调用有着大关系,但为提高效率,直接调用@AutoWork插件 询问comate

在这里插入图片描述

在这里插入图片描述

回答的很好,把这个文件的作用及与api之间的关系都详细地讲了出来,那咱们直接打断点

在这里插入图片描述

找到了接口核心介入点,后面调试的时候,就直接从这个入口进去查看api如何使用

然后,在打开api_auth_middleware.go文件的时候,我想初步了解这个文件是做什么的,这里为节约时间可以直接询问comate
在这里插入图片描述

在这里插入图片描述

从comate得知这个中间件通过角色基础的访问控制(RBAC)来增强API的安全性,确保只有具有适当权限的用户才能执行特定的操作或访问特定的资源,跟业务相关调用关系不大

4.1.2.2 遍调试边理解

在调试过程中,不能走马观花,但也不能过于追求细节,应该明白该请求在这个环节经历了什么,也就是需要明白调试过程中处理函数的作用。这里我也发现了个比较好的方法,举例,在调试中部分代码内容不太了解,可以利用comate选中这部分去询问,如下
在这里插入图片描述

comate很快就给予了相关回复

在这里插入图片描述

这样便能在最短的时间内准确的了解到某部分代码的含义,效率up~

4.2 整体–>从头调试,了解整体流程

回到项目流程的基本逻辑:
获取请求----->解析并处理请求------>调用对应服务---->服务进行数据的调用处理------>返回结果
在上一节介绍了如何了解局部代码的方法,即:调用对应服务---->服务进行数据的调用处理,可以说,如果按照上个流程过一遍,基本上核心的业务流程已经明白的差不多了,但是对解析并处理请求以及返回结果的流程还不太了解,所以有必要从项目启动入口开始进行调试,一步步跳转,看数据流转。方法一样,这里不多多叙述

在这里插入图片描述

同时,可以使用#前去调用当前文件插件进行对话,让其帮你梳理函数逻辑,

在这里插入图片描述

询问并展示其结果,可以看到我询问的两个问题都回答了,很详细

在这里插入图片描述
在这里插入图片描述

但是,我是个小白,我不知道CORS策略检查是什么意思,按照以前还要去互联网上进行搜索,现在Comate也能直接回答这个问题了
调用AutoWork插件进行自由回答模式
在这里插入图片描述

输入问题,立即可以看到它的回答,效果不多说了挺不错~
在这里插入图片描述

4.3 细节–>把握关键业务代码逻辑

项目数据流程的基本逻辑:
获取请求----->解析并处理请求------>调用对应服务---->服务进行数据的调用处理------>返回结果

在理清数据流转的整个过程后,我们要把重点放回咱们的业务逻辑,这一块是我们后期书写项目的关键,所以需要把里面代码内容了解清楚。在这里我也总结了一套方法,感兴趣的可以进行尝试,完成这些事情后,可以实现对业务代码的全面了解。

下面拿个例子详细解。

  1. 利用Comate生成函数流程图(这个功能目前只能用于java,go语言的预计9月份更新),这里随便拿了个java代码片段进行举例,先选中对应代码,让他生成流程图,让函数流程清晰可见~
    在这里插入图片描述

  2. 找到对应业务代码,比如这里我们根据以上api调试找到了对应的article业务代码在这里插入图片描述

  3. 借助Comate给具体函数业务代码生成注释,便于快速理解代码
    在这里插入图片描述

点击采纳,可以看到代码注释显示得很清楚,虽然我之前是java选手,但这样再阅读还有什么压力?
在这里插入图片描述

  1. 结合git信息,查看当初作者写这个用于什么功能,这样可以更好地理解业务。

在这里插入图片描述

  1. 深入代码逻辑,不能只停留在当前代码函数,要去查看其调用的相关函数,了解其相关业务逻辑代码,比如这里发现调用services,那需要点击看如何实现的

在这里插入图片描述

在这里插入图片描述

  1. 适当进行单测,了解该模块数据变化,使用comate进行单测更是事半功倍
    在这里插入图片描述

Comate会生成以下内容
在这里插入图片描述
觉得正确采纳即可。

  1. 进行相应的思考,代码为什么这样设计?对应的业务逻辑是什么?不明白的需要根据git信息联系同事询问,当然也可以思考怎么写更好,但不建议自己私自更改,嘿嘿,都懂。平时自己书写代码的时候也可以询问comate是否有调优建议
    在这里插入图片描述

4.4 总结---->写出自己总结与思考

最后,就是将上面学到的东西进行输出了,这里可以根据自己习惯来,有的喜欢写文章、有的喜欢用流程图、有的喜欢用纸画、有的喜欢给别人讲,都行啦~
但一定要回顾、思考,这样才能真正快速掌握,而不是走马观花。

二、一点真诚小建议

1、学会借力,不要闭门造车

当前辅助工具的完善能够极大提高咱们的工作效率,不要去排斥它,而是要学会如何使用它,以达到事半功倍的效果。在学习使用这些工具可以点击我的内部邀请链接Comate官网 (现在有活动,可以点击我的链接获取高级功能以及一些小礼品)查看相关教程,快速了解,并总结出自己的使用方法,不过常用功能,我的文章里融合的挺不错了hhhh

2、虚心请教,多学多问

项目里的问题,有时候业务上的需求很复杂,不了解业务很难理解代码的逻辑,这时候有人来讲解一下是很重要的。有些问题自己纠结半天可能也搞不明白,但他们熟悉项目的,两句话就给你整明白了。但是你需要学会提问,其次是,提问是一门学问。虽然说提倡提问,但是也并不是说一有问题就问,逮到谁就问。有时候别人项目工作很多,正在忙的时候,你时不时找人家问问题打断人家思路显然不好。最好是不懂的先记录下来,然后找机会,比如吃饭午休的时候,再问问。当然,前提是和同事搞好关系,平时一起聊聊天吃个饭啥的,关系亲近了,人家也比较愿意带带你。

3、勤记笔记,踏踏实实

虽然有了Comate工具的加持,但本质上也只是辅助,是加快熟悉项目的一种工具,想真正熟悉了解项目还需要自己动手去记录,可以记录一些代码流程逻辑、核心代码注释、业务逻辑思路、易混淆地方等等。

4、 分清层次,不要上头

在代码调试过程中,我们首先要做的是理清整体业务逻辑,而不是细节,所以要分清层次,不要死抓细节。等理清完逻辑之后,再看业务代码,注意是业务代码,而不是整体框架代码。最后把项目都熟悉了再去思考代码后期的优化之类的问题。

三、如果有用,不要吝啬你的鼓励

当然,以上是我个人观点,是自己目前的总结,可能有不完善的地方,如果有更好的想法和建议,可以私信我,欢迎与我沟通~
这篇文章构思了很久,也写了许久,如果这个对你有帮助,希望请给予我鼓励,点赞、收藏、关注、投币~
同时,可利用现在Comate进行内部活动的机会,点击我的内部邀请链接Comate官网 进行安装下载尝试,可以获得高级功能的使用权限,并且有好礼相送~

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下次一定少写BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值