大家好,我是 Z 哥。

所谓“跳槽爽,一直跳槽一直爽”。但是,世上哪有那么好的事哦,跳槽虽然可以带来更快的涨薪机会,但是你也是要面对和克服一些新挑战的,其中最大的挑战莫过于要熟悉一个陌生的项目。毕竟,进入到一个新的团队,又恰好遇到做的是一个新项目,这个概率就太小了。

对我们程序员来说,这里的陌生项目就是一套陌生的源码。

有时候如果运气好,有一位带教老师或者热心的同事来帮助你熟悉项目,那自然会轻松很多,速度也更快。

但是如果你运气没那么好,或者去到了一个人员紧张的快速发展期企业,那就只能靠你自己了。这个时候如果你掌握了一些快速熟悉项目的技巧,会对你有很大帮助。

否则,因为没能在一定时间内对项目有足够的了解,导致工作完成得不好,进一步导致没过试用期,那就麻烦大了。

很多人熟悉项目,先从其中用到的中间件开始。这个思路其实不太好,虽然中间件是通用的,在哪个项目里都能用,所以比较容易下手。但是具体怎么用,承担了什么职责,在一些细节上,不同项目会有所不同。

所以从中间件入手去熟悉项目,就犹如管中窥豹,了解的并不全面,甚至可能会判断错误。

在 Z 哥的职业生涯中,大多数时候都没有什么人来指导,自己摸石头过河熟悉过大大小小十几个项目,也积累了一些经验,在这里和大家交流一下。也欢迎你在评论区分享你的好方法。

我的思路总共分为 5 步。我相信,沿着这个思路来熟悉项目,不敢说对项目了如指掌吧,至少可以在短时间内了解项目的 6、7 分。

/01  从哪里来/

“从哪里来,到哪里去”是一个著名的哲学问题,其实这个逻辑也适用于我们熟悉一个陌生项目。

大部分情况下,技术都是为业务服务的,所以任何项目都是为了解决某一个问题而诞生的,因此,「从哪里来」自然藏在业务里。

建议可以从以下两个问题入手,搞清楚了这两个问题,相信你也知道了这个项目的由来。

  1. 谁在用这个系统?

  2. 用这个系统做什么?

其实你会发现,这两个问题构建的是一个画面,一个人或者一群人在如何使用这个系统进行工作的画面。这其实就是所谓的工作场景,它们也解答了「从哪里来」这个问题。

举个例子,比如说你接手了一个消息通知类的系统,那么经过了解会得到这样的一条信息。

运营人员会用这个系统发送APP通知、短信通知等,以此来触达消费者,并引导用户促成交易转化。

进一步你也会知道,这个系统的职责就是编辑通知内容、发送通知、记录触达的结果。如果更进一步的话,还能考虑到点击率、转化率等数据记录,因为这些数据可以更好的帮助操作人完成他的工作目的,“促成更多的交易”。

/02  到哪里去/

第一步搞清楚了「从哪里来」,下一步搞清楚「到哪里去」。

「到哪里去」就是搞清楚这个项目生命周期,这个项目实际是如何运转创造价值的。这其实也是必要的一个前期准备工作。毕竟不管做任何事,有准备总是更好的。没有准备,谈何事半功倍呢。

第一步主要需要做两件事:

  1. 知道源码在哪里。

  2. 搞清楚项目运行涉及到的环境。这里的环境不仅仅是生产环境,还有各个测试环境和 CI / CD 机制。

只要知道了这两项内容,其实你对这个项目的「生命周期」就了解的很清楚了。知道了它是如何流转的,就相当于知道了它到哪里去。

/03  梳理技术链路/

在第一步中我们做的工作其实间接也算梳理了一遍业务链路。基于这个信息其实我们也可以进行技术链路的梳理了。

对于技术链路的梳理,我的建议是,「先纵再横」。

「纵」就是沿着一条线从前往后梳理,一般从应用侧开始, 应该很多人也的确是这么干的。比如上面我们在前面例子中提到的通知系统,一般是,UI -> API -> MQ / DB -> 各个通知渠道的 Service -> DB。

「横」就是对梳理出来的多条「纵」的技术链路进行整理,找到其中的共同点以及相关性。这些共同点大多会由一个通用组件/ Service 来满足需求,而相关性则代表着多个业务链路之间的「耦合」关系。

当然,如果你参与到的是一个超大型项目,很多「纵」其实已经单独做成一个子系统了,这个时候对「横」的梳理,其实就是对子系统之间的梳理。

注意,做技术链路梳理的时候,不需要陷入到代码细节里去,只要大致知道不同 class 之间的引用关系如何即可。如果你提前深入到代码细节里去,那么一但遇到复杂度较高的项目,你很容易产生焦虑感。

/04  梳理数据表/

如果说站在整个业务的本质上看,业务无非就是一堆代码运行在一堆机器上;那么站在单个项目来看,一个项目无非就是对数据库的增删改查操作而已;或者从使用者的角度看,一个项目就是输入一些参数得到一些返回结果而已。

工欲善其事必先利其器,梳理数据表我平时最喜欢用的工具是 Red Gate 里的 SQL Doc 和 SQL Dependency Tracker。前者可以自动根据数据库的信息生成方便查看的文档,后者可以生成图表查看数据之间的关系,很好用。

如果遇到一个表数量达到 3 位数的时候,怎么能快速定位核心表呢,有 2 个小技巧。

  1. 忽略 config、log、flow、statistics 为后缀或者前缀的表,这些的表的作用从名字也能看出来作用,必然不会包含什么核心业务信息。

  2. 从一些前缀统一的表,但是前缀不属于上面 4 个单词的表开始。比如 order、trade 这种,一般越核心的业务,往往基于它前缀所扩展出来的表也越多。

/05  运行并调试一下/

调试是一个有效的 Debug 方式,也是一个有效理解代码的方式。我们进行调试的目的倒不是为了弄清楚某一个业务的细节,而是通过调试来观察数据的流转情况,验证自己对之前做的这些信息整理所形成的猜想是否属实。

因此,尽量挑选一个你认为业务最复杂的页面,然后对页面上的每个按钮都去点一下看看。在这个期间你还能加强对前后端之间通讯方式的理解。

前阵子写过一篇《帮助阅读源码的 8 个技巧》,里面有些思路其实是类似的。

最后再多说几句感想,我知道有很多人在熟悉项目的时候会吐槽原来的设计多么多么垃圾。我劝大家善良,因为可能未来接手你现在负责的这个项目的人也会这么吐槽你。但实际上我相信每个人在当时作出的决策设计,一定是在当时综合各方因素后的最优解,毕竟没有人那么傻,明知故错。

另外,以下这三点也是在我们熟悉项目的过程中可以相信的事情。

  • 你遇到的问题很多人已经遇到过并且解决了 。

  • 你遇到的问题大概率在当前系统里面已经有了答案。

  • 你遇到的问题大概率在你用的框架和组件里面都有现成的解决方案。

好了,总结一下。

这篇呢,Z 哥和你分享了我对如何快速熟悉一个项目的经验。我的思路主要分为 5 步:

  1. 从哪里来

  2. 到哪里去

  3. 梳理技术链路

  4. 梳理数据表

  5. 运行并调试一下

希望对你有所帮助。

对很多人来说,更愿意重头做一个新系统而不是去接手一个老系统。不过,老系统其实满是宝藏,里面有很多你可以借鉴和学习的东西。

推荐阅读:

  • 这个时代最重要的技能之一

  • 对DDD的常见误区

原创不易,如果你觉得这篇文章还不错,就「点赞」或者「在看」一下吧,鼓励我的创作 :)

也可以分享我的公众号名片给有需要的朋友们。

如果你有关于软件架构、分布式系统、产品、运营的困惑

可以试试点击「阅读原文

每次跳槽,总得面对这摊事相关推荐

  1. 跳槽需要注意的一些事

    关于跳槽,应知应晓的那些事. 本文总结 不轻易跳槽,不做没有准备的跳槽: 跳槽动机,精准洞察. 1.团队氛围,没有凝聚力.一盘散沙----没有再待下去的意义 2.自身能力不足,无法完成上级领导交办的工 ...

  2. iOS13.4.1每次越狱后要做的事

    不完美越狱重启后越狱失效,需要重新越狱. 安装的必要软件也和iOS10不一样,记录一下. 1.越狱设备安装"AFC2"补丁:  雷锋源https://apt.abcydia.com ...

  3. 10个人里有几个大学生?

    大家好,我是Z哥. 昨天看了一份报告,感触特别深,想随便聊几句.留给未来作为父亲时的自己. 前几天教育部发布了 2020 年的<教育发展统计公报>,看着里面的一张张图表,不由得感叹一句,& ...

  4. 提高「搜商」,挣大钱

    大家好,我是Z哥. 在之前的一篇讲述数据分析的文章<这个时代最重要的技能之一>中提到了这周要和大家聊聊「搜商」的事情. 搜商这个词诞生于互联网时代,体现的是一个人利用搜索引擎查找自己所需信 ...

  5. 面对职场“毕业”,PMPMO应该如何从容的应对?如何跳槽能够大幅度升职加薪?【大海午餐】

    昨晚收到一个群里的朋友关于职场问题的咨询,熟悉我的朋友可能知道,按惯例我是不接受私人问询的,在前沿群坚持一不做咨询,二不卖课,三不谈合作,但因为这个问题有一定的共性,我就在群里做下公益性解答,希望对这 ...

  6. 一年换7家公司,95后跳槽多疯狂

    来源 | 开菠萝财经(kaiboluocaijing) 作者 | 李楠 吴娇颖 路俊迪 苏琦 金玙璠 这届年轻人,工资不一定很高,但工作换得很勤. 领英发布的调查报告显示,职场人第一份工作的平均在职时 ...

  7. 程序员最讨厌的100件事,瞬间笑喷了,哈哈~~

    特长 大家好,我是工作时长两年半的程序员汤姆,喜欢谷歌.复制.粘帖和提交. 招聘 应聘程序员,HR一上来就问我:有对象吗? 我:分了! HR:为什么? 我:因为她影响我编程! HR:明天来上班! 意见 ...

  8. 软件行业薪酬待遇调查:涨薪不给力致员工跳槽

    "在软件企业的跳槽里,薪资待遇是最主要的离职原因,近70%的员工是因为待遇或主动离职,或被挖角."一位在软件企业工作多年的人力资源经理告诉记者,跳槽是员工快速提高薪资的最有效手段, ...

  9. “那个工作 10 年没跳槽的人,混不下去了”

    作者 | Jenny乔 来源 | 猎聘(ID:liepinwang) 每年年末,都是跳槽高峰,不少人拿了年终奖就走.虽说就业寒冬,但丝毫不影响身边人跃跃欲试想跳槽的心.但也有些人,工作好多年,跳槽从 ...

最新文章

  1. hdu 3006(状态压缩)
  2. Failed:(13: Permission denied)导致访问浏览器出现Nginx 500 Internal Server Error
  3. leetcode892. 三维形体的表面积
  4. 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(4)--(计算透视中心的三维位置)
  5. Java写的斗地主游戏源码
  6. Glide圆角和centerCrop()的那些坑
  7. Keil 中 Error L6002U
  8. 谷歌邮箱的注册以及GEE的注册使用教程
  9. 计算机安全中心无法启动,如何解决Win10无法启动Windows安全中心服务问题
  10. 关于小虾米大学尾声的感慨
  11. 微信支付接入-弹出支付框输入密码后一直在转圈,20s后提示:支付失败,请稍后再试
  12. Alist保姆级搭建教程
  13. 显示器 如何切换输入源
  14. 知网复制太麻烦了?试试这个方法
  15. 遇到的问题要记录下来 javascript值班表
  16. 这五大采购流程最需要实现自动化
  17. 如何看待区块链游戏,避免陷入区块链游戏骗局
  18. linux 程序退出 调试,linux驱动程序调试常用方法(printk,OOP,strace,hacking,ioctl,/proc,kgdb)...
  19. 从0开发小程序,一个月时间实现盈利!内附抖音去水印原理
  20. POI导出word上下标

热门文章

  1. python基础之字符编码
  2. mysql数值类型总结及常用函数
  3. ligerUI的列头合并代码片段
  4. return view详解
  5. ⑥又是星期五,小试牛刀(编写定制标签)
  6. 页面上指定类型的控件的样式添加
  7. JavaScript Dom编程艺术
  8. 惠普m1005连接电脑步骤_电脑连接电视机详细步骤方法图文
  9. java语言不用担心内存吗_不用担心智能手机的电池,只需使用它
  10. css段落缩进_如何缩进Google文档中的段落