思维层面
凡事欲成,心中有数。掌握了方法论,有了核心思想和目标,效率才可以上来,不会走弯路。所以,我先讲一下项目入手的方法论,心态吧。如下:
- 心态调整:真正好的代码是自解释的,那些看似高深的代码,大部分都是人家写的不够好,不是你不行。同时,项目入手,必定是个循序渐进的过程,不要操之过急。
- 心态调整2:不要以追求完美的心态去接手项目,刚刚接手初期不要试图搞懂整个项目。时间紧张的情况下,过去的功能已经完成了,需要修改该功能时,你才需要读过去的代码,方便修改。
- 抓住主干,逐渐扩展:先找到主函数或者主thread,没必要深入每个函数,初步了解项目的大概流程即可。(通用程序的核心功能都是由增删改查组成然后通过通信、运算和人机交互串起来的,系统的复杂度主要体现在系统规模、性能、稳定性、业务流程、通信等方面)
- 由点到面:从小部分切入,然后扩展到整个项目。和上面说的主干一样,了解了入口之后,不可避免的要走入某条分支,你只要先抓住一点即可。
- IDE的技巧使用:善用find all,或者ctags,看看他们是怎么连起来的。
- 深入理解代码前,先跑起来,自己操作一遍。
具体操作
- 提问方式引导自己去看文档,心里有个大概的概念先:先搞清楚新的系统是搞什么的,就问简单几个问题,谁在用这个系统?用这个系统做什么?然后自己根据这些问题去文档找答案。
- 由架构层面了解项目的大体实现,就像是软件工程开发的第三步:详细设计。弄清楚系统是怎么分层、分模块的,每层、每个模块都用到了什么技术和框架,之间是怎么通信的。这一步还不用深入到底层,到每一个类的实现。此时的entity,dao都不用怎么具体看实现,只要抓住大体架构就好了。这一步最好能把类图画出来。
- 找到一个自己熟悉的功能,看看这个项目是怎么实现的,这一步就是深入代码了。走一遍流程,基本上是初步搞懂了实现。通过几个典型的功能,主要是为了弄清楚系统里面增删改查、通信、用户交互是怎么实现的。这一步可以通过debug模式一步一步地跟下去,以点带面地去熟悉整个项目。
上面的三板斧基本上就可以搞懂一些基本的开发了。到这一步,差不多可以植入自己开发的东西,写一些项目安排的需求了。
- 深入掌握项目,并且获得提升。三板斧后面就要重点关注那些没用过的技术和组件:是什么,为什么要用,怎么用,最后了解底层实现。再照着文档做几个demo,平常工作时把它的文档建个快捷方式,随手查询学习一下,回忆知识点。
- 补充三板斧更加具体的做法:https://zhuanlan.zhihu.com/p/62134600
- 项目维护有三宝:沟通 、文档 、代码跑。目标:了解业务逻辑流。即:直接问项目的重点难点,由前人传授经验,在点到面的时候,也知道那个切入点是最好的。而后是看相应文档了。再之后是自己跑一跑,拉到本地,数据库备份好,然后跑起来。
- 项目出活四部曲,跟、改、理、测要一起。这一步其实就算是一个费曼学习法。通过跟看懂一个“点”的流程,再改,修改代码看变动,以此验证想法,这是最好的一个方式,有反馈。而后是理,就是扩展,了解这一“点”相关的“面”,最后测,也是一个反馈,验证自己的理解。(费曼学习法:学习一个概念后,要尝试输出验证,根据结果判断理解是否正确,通过良好的反馈循环才可以逐渐修改你对知识的理解,快速达到正确的终点)
参考
- https://www.zhihu.com/question/38865497/answer/108214957
- https://blog.youkuaiyun.com/luoweifu/article/details/27250179