Java 大型项目工程代码快速上手指北

知無涯 · 2021年11月06日 · 最后由 尼古拉斯赵四 回复于 2021年11月08日 · 3296 次阅读

很多入职阿里的同学在学习产品业务文档的时候,发现团队内部没有业务文档沉淀;虽说师兄能培训一些业务知识,但这些都是 “面” 层面的内容,掌握核心业务,必须了解核心业务知识以及易踩坑点。没有业务文档怎么办呢?那就必须扒项目代码中业务的实现逻辑了。

当然程序员在工作过程中,会遇到很多需要阅读代码的场景,比如学习技术框架源码、review 他人的代码、维护老产品等等。毫无疑问,阅读代码是程序员的基本功,这项基本功是否扎实,会在很大程度上影响一个程序员在技术上的成长速度。

啃了将近两周的项目代码,本人也总结出来一些快速吃透项目代码的套路,下面就给大家分享一下我的经验。

目的

凡事预则立,不预则废;带着目的性做事情更容易成功,读代码也是一样。当我们需要阅读代码时候,一定要明确自己的目的,无非有以下两种目的:

学习框架源码

产品代码维护

计划

明确目的后,必须给自己制定完成这件事情的过程中各个节点应达到的目标。主要是为了 check 你的学习质量。比如:学习 Kafka 项目源码,你的目的是为了在新的项目中更加游刃有余使用 Kafka 解决业务问题;那么针对你投入的学习时间,可以制定三个阶段的学习计划以及要达成目标;各个目标建议给自己制定一个需要实践的任务,这样通过项目检验自己的学习质量。

上下文

什么是上下文呢?举个例子:高考,我们参加高考基本上务必需要掌握小学、初中、高中各个年级的基础知识,这样我们在考场做题时候就可以将这些知识应用于解题,那么这些基础知识就是上下文。回到我们源码学习场景中,上下文可以分为 通用技术、业务基础。

业务基础:每一份有实际意义的源码都离不开业务,必须先对业务有基本的概念。

通用技术:每个复杂的项目肯定是运用了各种保证业务实现的技术框架。就 Java 语言实现的项目而言,Spring 框架、分布式框架、消息队列框架、分表分库框架等这些基本都会涉及到。学习项目代码前,如果不懂这些框架,那么看代码的过程就像看天书一样。

其他资源:能帮你解决看代码过程中遇到问题的人或工具都可以称之为资源。

工具

工欲善其事必先利其器。利用工具可以让我们事半功倍,我在学习过程中用到的工具如下:

PlantUML,这是一款 IDEA 插件,即安装即用,非常方便。可以让你随时绘制各种图(类图、时序图、流程图等),而且语法也相当简单。

语雀、石墨文档、幕布等,记录阅读源码过程中的关键点、心得体会、分析过程

Visual Paradigm,用于绘制简单的框图,表述源码的模块划分、层次结构等.

xmind 8, 画思维导图,可以将学习的内容铺成一个面。

笔记

在阅读源码的过程中,做笔记是必须的。因为代码不是自己写的,很难很快在脑子里刻下印记,经常是看着这里忘了那里,早上觉得弄懂了数据流向,但是中午吃个饭,下午开始干活的时候又忘了原先的链路。所以,多记笔记就显得尤为重要。

建议用软件(语雀、石墨文档)记录,这样可以将文档整理成册,将来也可以给团队增加文档产出。

关键 action 尽可能详细记录,但不必看到什么记录什么。比如弄明白了某个子模块的逻辑、某个类的作用、某些函数的调用关系时再记录,否则记录这个动作本身会打断思考。

每天工作结束,记录学习进度,记录疑问(以及明天找谁进行咨询),明日计划等。

总结

下面的一些经验供大家参考:

将业务模型和数据模型建立映射关系。

理清模块间的依赖关系。

找出关键 action 代码,并画出时序图、流程图。

如果能运行代码,强烈建议调试代码,核心方法打断点,这样可以更清楚调用链路。

读不懂才要读,想不明白才要想,这是进步和成长的开始。

多和师兄沟通学习进度,让他明白你的进度以及可以发现你存在的问题。

共收到 2 条回复 时间 点赞

不错的分享,点赞。社区里阿里的同学好像越来越多了呀。

代码怎么快速上手这个,我自己以前也总结过,确认目的->找到对应功能的出入口(比如 controller 层)->从入口开始阅读,期间同时记录 uml 时序图。过程中持续了解用到的框架功能(java 工程有挺多功能是某些框架自带,所以直接看代码体现不出来的,而且框架姿势使用不对也非常容易出 bug ),大体差不多。

如果是源码阅读的话 ,工具:Sourcetrail 非常不错,支持多语言,图形化代码结构

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册