# 程序员如何快速上手一个自己不太熟悉的新项目？有什么技巧？

Source: https://blog.ferstar.org/posts/how-to-quickly-onboard-new-projects/






作者：Jim Jin
链接：https://www.zhihu.com/question/38865497/answer/108163546
来源：知乎
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。

不知道你有没有经历过一个五年或者更长工作年限的开发人员半路加入团队的情况，可能第一两个星期他会问一些业务或者技术问题，不过一两个月他就可能在指导那些初级开发人员了。

什么原因呢？因为他已经从过往经验里面总结出来一些套路了。

那么套路是什么呢？

1. 绝大部分业务系统，不管他后端是oracle、mysql、nosql还是内存数据库，也不管他前端是web、h5、winform、android还是ios，它的核心功能都是由增删改查组成然后通过通信、运算和人机交互串起来的，系统的复杂度主要体现在系统规模、性能、稳定性、业务流程、通信等方面。（部分工具类、基础架构类系统可能不一样）

2. 绝大部份系统，不管是基于Java、.NET、C++还是Nodejs技术，都是遵循某种或几种设计模式分层进行开发的，最最常见的也就是MVC了。其他请参考一下设计模式教程。


那么怎么快速熟悉新的项目呢？同样也是套路。

1. 先搞清楚新的系统是搞什么的，就问简单几个问题，谁在用这个系统？用这个系统做什么？然后自己根据这些问题去文档找答案。

2. 弄清楚系统是怎么分层、分模块的，每层、每个模块都用到了什么技术和框架，之间是怎么通信的。有架构设计文档的话学习一下最好，没用过的技术先查查资料知道个大概。

3. 把开发环境搭起来，通过几个典型的功能弄清楚系统里面增删改查、通信、用户交互是怎么实现的。最简单的方法是根据系统的分层，先从前端到数据库把代码疏通一下，搞不清楚的话打开debug模式一步一步走一下。

4. 经过上面三个步骤基本上就可以改几个bug和照葫芦画瓢做个功能了。后面重点关注那些没用过的技术和组件：先搞清它的目的、背景、实现原理和功能列表，再照着文档做几个demo，平常工作时把它的文档建个快捷方式，随手查询学习一下。

5. 平常开发过程中如果遇到问题首先要相信： 
1）绝大部分自己遇到的问题很多人已经遇到过并且解决了 。 
2）绝大部分自己遇到的问题在当前系统里面已经有了答案。 
3）绝大部分自己遇到的问题在你用的框架和组件里面都有现成的解决方案。

6. 对于规模比较大的系统或者系统集合，其实你平时工作接触到的也就是其中的一个系统或者模块，先把自己接触的部分搞定就行了。

7. 对于老系统，首先建议看一下我另外一个回答：在感觉项目代码的构架不行的时候,你们会怎么办? - Jim Jin 的回答
1）老系统其实满是宝藏，里面有很多你可以借鉴和学习的东西。
2）老系统也满是坑，一个看起来毫不悬念的代码改了以后可能会引发地震。
3）很多你看着不爽的代码其实都是有道理的。
4） 不要在老系统里面继续挖坑。
5）看不懂的代码不要动。
6）在你力所能及的范围内让老系统变的更美好。

上面这个套路应该符合百分之七八十的项目，题主可以试试看。

