zoukankan      html  css  js  c++  java
  • 如何快速的熟悉一个新的软件项目?

    转载:https://blog.csdn.net/bigestt/article/details/80278452

    https://blog.csdn.net/a236209186/article/details/52043383

    http://blog.sina.com.cn/s/blog_13ca7342f0102xcpf.html

    我们会经常遇到一些新来公司的大牛,在短短是一两周就可以熟悉公司的业务和技术了,而且还能熟练的辅导比他更早来公司的小菜鸟了。

        什么原因呢?因为他们已经从以往的经验中总结了一些套路出来了。上套路

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

        2、绝大部分系统,不管是基于Java、.NET、C++还是NodeJS技术,都是遵循某种或几种设计模式分层进行开发的,最最常见的就是MVC了。

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

        1、先搞清楚新的项目是搞什么的。几个简单问题:谁在用这个系统?用这个系统解决什么问题?用这个系统和不用这个系统的区别?根据这些问题去寻找答案。

        2、弄清楚系统是怎么分层、分模块的。每层、每个模块都用到了哪些技术和框架,之间是怎么通信的。

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

        4、经过上面的3个步骤基本上可以了解到系统的大致功能,后面就可以重点关注那些没有用过的技术和组件,先搞清楚它的目的、背景、实现原理和功能列表,再照着文档做几个demo,增加熟悉度。

        5、平常开发过程中如果遇到问题首先要相信:

            1)绝大部分自己遇到的问题很多已经遇到过并解决了。

            2)绝大部分自己遇到的问题在当前系统里面已经有答案了。

            3)绝大部分自己遇到的问题在你用的框架和组件里面都有现成的解决方案。

        6、对于老系统。

            1)老系统其实满是宝藏,里面有很多你可以借鉴和学习的东西。

            2)老系统也满是坑,一个看起来毫无关联的代码改了之后可能引发地震。

            3)很多你看着不爽的代码其实都有道理。

            4)不要早老系统里面继续挖坑。

            5)看不懂的代码不要动。

            6)在你力所能及的范围内让老系统变得更美好。

    新接手一个系统,如果你的目的是假设需要你排查一个问题,你就能快速定位代码位置这样的要求即可的话,掌握系统的大体架构和核心流程即可。

    大体手段都差不多,从全局角度理解问题,拆开看细节实现。

    1,弄明白系统是什么(定位,以及对外提供的功能)
    2,有文档就看系统的设计文档,弄明白系统的模块结构,理解系统是如何构成的。(如果没文档只好看代码目录结构了,然后试图通过模块间的接口梳理清楚模块关系)
    3,看一下核心功能实现,理解整个功能流程是如何走通。

    至于后续如果需要你去优化系统关键流程,优化架构,就需要你对业务、对原理、对实现更深刻的理解了,这个没有什么捷径可走,只能花时间思考和折腾。
     
    仅从单个项目的角度而言,有两个思路:
    1. 按接口从上往下梳理
    2. 按数据库从下往上梳理

    需要梳理的东西主要有两个:
    1. 类/方法/函数之间的调用关系
    2. 参数传递与变化

    通过上面的方法基本能整理出一套从接口到各处理类/方法/函数再到数据库的逻辑链条,然后再具体看每个类/方法/函数的实现,基本就能快速上手了

     读代码的技巧:

    o  先补充基础知识。比如新上手Visual Studio,了解一下nuget;刚接触Android,了解一下什么是activity、service、context这些。这是纯粹读代码无法读懂的

    o  先大块,后小块。大块的读,知道每个module大致干啥就行,然后当做一个黑箱即可。再相关的module,把黑箱化小

    o  设断点,打log,看call stack

    o  头脑里思考两件事。一,静态上dependency是怎样的,谁调用谁;二,动态上时序是怎样的,思考一下线程之间的关系

    o  勤问,自己读之前找人大致讲一下会省很多时间。纠结于细节等于丧失big picture

    · 然后你会发现你有一大堆需要读的,一大堆需要问的,一大堆需要学的。分好轻重缓急,一个个去做就好

    补充:推荐可以看https://www.jianshu.com/p/56a764cb48ec

  • 相关阅读:
    Python并发编程之深入理解yield from语法(八)
    Python并发编程之从生成器使用入门协程(七)
    Python并发编程之消息队列补充及如何创建线程池(六)
    Delphi中Chrome Chromium、Cef3学习笔记(一)
    Webbrowser指定IE内核版本(更改注册表)
    C#截取字符串按字节截取SubString
    C# DataGridView导出Excel
    C# Microsoft.Office不存在空间名称Interop和Excel
    c#线程间传递参数
    C#根据进程名称获取进程的句柄?
  • 原文地址:https://www.cnblogs.com/mo-lu/p/11198999.html
Copyright © 2011-2022 走看看