如何快速熟悉一个软件

news/2024/9/18 14:58:05/ 标签: 程序人生

当入职一家新公司时,必然要熟悉一些新的软件项目,这个时候,如何才能快速熟悉软件项目,以达到快速上手的目的。

1大忌

还记得自己刚毕业的第一份工作,一上来就去看代码,看代码的细节。在看代码的时候,争取函数的每一行都要看懂是什么意思,并且函数中调用的函数,同样想去看懂被调用函数的实现细节。一开始就陷入代码的细节中,这是大忌。这样的效率非常低下,并且看完之后,自己还是什么都回想不起来。

循序渐进,从部分到整体,从细节到整体,这是作为学生时的学习顺序,但是在工作中,在熟悉一个软件的时候,这样的习惯并不适用。

 

2跑起来

当我们接收一个新的项目时,先不要陷入到代码细节中,需要先让软件跑起来,运行起来,这是我们修改软件,增加日志,学习熟悉的基础。这个时候,首先要知道从编译,打包,到部署运行是如何操作的。先让软件跑起来。

在学习阶段,使用debug版本更有效。debug版本打印的日志更丰富,同时使用调试工具,比如gdb调试时,可以看到的信息也更多。

 

3日志

软件跑起来之后,可以看日志,通过打印的日志找到日志打印的地方,有利于对软件有一个整体的认识。知道了如何编译,打包,部署,运行之后就可以修改代码以及增加日志,这样就可以有目的的去查看自己想要查看的信息。当看到自己加的日志打印出来的时候,会提升自己的信心,促使继续看下去。

 

4调试工具

以c和c++为例,gdb是调试工具。通过gdb,可以设置断点,查看函数的调用栈,同时也可以查看一些局部变量和局部变量的值。

 

5沉淀

在熟悉软件的过程中,可以将已经了解的软件架构,模块划分,数据结构,流程等通过文字或者流程图的形式记录下来。

 

从外部到内部,从整体到细节,带着问题去看代码。

①先了解软件是干什么的,了解软件是干什么的之后可以自己想一想,如果要自己实现这样的功能,会怎么去实现。为了实现这个功能,需要划分哪些子功能,要怎么划分模块,模块之间怎么交互?需要定义哪些数据结构,主要业务的处理过程是什么样的?需要定义哪些类,这些类之间的接口有哪些?

大部分人的思维过程,架构设计会存在一定的相似性,自己思考之后,再去看代码。

②从外部到内部,从整体到细节,不要一开始就陷入代码细节。先了解软件的整体功能,模块划分,再去看具体的细节。

③带着问题去看代码,在求证问题的过程中,对代码的理解是深刻的。要避免“系统”性的学习,这里的系统性指的是我们学生时代,学习一个科目的过程,学生时代学习的时候,总是从课本的第一章学习到最后一章,并且前边章节是后边章节的基础。但是在工作中,熟悉软件项目的时候,这种习惯不完全适用,通过问题的方式,有针对性的进行学习,往往效果更好。

 


http://www.ppmy.cn/news/1517054.html

相关文章

[C++]set和map的介绍及使用

关于set和map的接口函数部分&#xff0c;只重点介绍一些相较于别的容器有特殊地方的接口&#xff0c;set和map的接口可以触类旁通。 一、概念 &#xff08;一&#xff09;、关联式容器 关联式容器存储的元素是一个个的键值对<key,value>。通过键&#xff08;key&#x…

MATLAB 生成指定范围、角度、厚度的含噪平面点云(77)

模拟生成点云并可视化显示,可以验证算法有效性,尤其是针对验证算法的某方面 MATLAB 生成指定范围、角度、厚度的含噪平面点云(77) 一、算法介绍二、使用步骤1.代码2.效果一、算法介绍 如题,模拟生成一组平面点云,含有噪声点,确定算法稳定性,可以指定生成平面的范围,厚…

Java集合—Map系列集合(习题一)

文章目录 Java集合—Map集合&#xff08;习题&#xff09;1.使用泛型修改根据学员姓名找学员对象2.运用Map的三种遍历方式进行遍历迭代器遍历键值对遍历增强遍历 综合要求 Java集合—Map集合&#xff08;习题&#xff09; 1.使用泛型修改根据学员姓名找学员对象 2.运用Map的三…

【JAVA]DAY 2在网页中输出日期和时间,实时还是静止?

一、如何输出日期文本 使用document.write(Date()); 会在网页中输出当前的日期和时间。在 2024 年 8 月 28 日星期三执行这段代码&#xff0c;可能会输出类似 “Wed Aug 28 2024 [具体时间]” 这样的内容。 Date()是 JavaScript 中的一个内置对象&#xff0c;用于处理日期和…

UE5 多个类选择界面生成

在Unreal Engine 5 (UE5) 中&#xff0c;如果你想要创建一个可以选择多个类的界面&#xff0c;你可以使用SClassPicker小部件。以下是一个简单的例子&#xff0c;展示如何在UE5的编辑器模块中创建一个自定义的编辑器工具栏按钮&#xff0c;并打开一个类选择器。 #include &quo…

论文写作遇到的问题——个人记录用

1.实验结果图绘制 python画图字体设置 Science Plots使用中中文配置的问题 11种 Matplotlib 科研论文图表教程 2.论文写作格式 word公式居中、编号右对齐、自动编号、交叉引用 mathtype操作合集&#xff0c;使用大全 arxiv.org的文章引用格式 LaTex的下载与安装&#x…

[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - DataSet篇

[CLIP-VIT-L Qwen] 多模态大模型源码阅读 - DataSet篇 前情提要源码解读完整代码逐行解读导包readjson函数data_collate函数ImageCaptionDataset类&#xff08;init函数&#xff09;ImageCaptionDataset类&#xff08;readImage函数&#xff09; 参考repo:WatchTower-Liu/VLM-…

Java中Objecy类

没有成员变量 也就只有无参 的构造方法 /*** ClassName Test* author gyf* Date 2024/8/28 10:32* Version V1.0* Description : */ public class Test {public static void main(String[] args) {// toString()Object object new Object();System.out.println(object);String…

网络安全新视角:人工智能在防御中的最新应用

人工智能在网络安全中的最新应用 概述 人工智能&#xff08;AI&#xff09;在网络安全领域的应用正日益成熟&#xff0c;它通过机器学习和深度学习技术&#xff0c;为网络安全带来了革命性的变革。AI技术不仅能够自动化、智能化地检测、分析和应对安全威胁&#xff0c;还能够…

Jenkins:自动化的魔法师,打造无缝CI/CD流水线

标题&#xff1a;“Jenkins&#xff1a;自动化的魔法师&#xff0c;打造无缝CI/CD流水线” 在当今快速发展的软件开发领域&#xff0c;持续集成&#xff08;Continuous Integration, CI&#xff09;和持续部署&#xff08;Continuous Deployment, CD&#xff09;已经成为提升开…

Docker续1:

一、打包传输 1.打包 [rootlocalhost ~]# systemctl start docker [rootlocalhost ~]# docker save -o centos.tar centos:latest [rootlocalhost ~]# ls anaconda-ks.cfg centos.tar 2.传输 [rootlocalhost ~]# scp centos.tar root192.168.1.100:/root 3.删除镜像 [r…

总结:Python语法

Python中的字典、列表和数组是三种常用的数据结构&#xff0c;它们各自有不同的用途和特性。 字典&#xff08;Dictionary&#xff09; 字典是一种无序的、可变的数据结构&#xff0c;它存储键值对&#xff08;key-value pairs&#xff09;。字典中的每个元素都是一个键值对&…

flink--会话模式与应用模式

flink-会话模式部署 会话情况&#xff1a; 添加依赖 <properties><flink.version>1.17.2</flink.version> </properties> ​ <dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-strea…

CSS属性

一、CSS列表样式 1、list-style-type属性&#xff08;列表项标记&#xff09; CSS列表属性允许我们设置不同的列表项标记。 在HTML中&#xff0c;有​两种类型​的列表&#xff1a; ​无序列表​&#xff08;<ul>&#xff09; - 列表项目用​项目符号​标记​有序列表…

【Linux】自动化构建工具makefile

目录 背景 makefile简单编写 .PHONY makefile中常用选项 makefile的自动推导 背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 ​ ◉ 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…

开放式耳机怎么戴?佩戴舒适在线的几款开放式耳机分享

开放式耳机的佩戴方式与传统的入耳式耳机有所不同&#xff0c;它采用了一种挂耳式的设计&#xff0c;提供了一种新颖的佩戴体验&#xff0c;以下是开放式耳机的佩戴方式。 1. 开箱及外观&#xff1a;首先&#xff0c;从包装盒中取出耳机及其配件&#xff0c;包括耳机本体、充电…

使用 FinalShell 链接 Centos

1. 安装 FinalShell 下载地址&#xff1a;https://www.hostbuf.com/t/988.html 2. 查看 IP地址。 2.1 通过命令查询IP 输入 ip addr show 查询&#xff0c;输出效果如下截图&#xff0c;其中的 192.168.1.5 就是 IP 地址。 2.2 通过可视化界面查询IP 点击右上角的网络图标…

LoadBalancer负载均衡

一、概述 1.1、Ribbon目前也进入维护模式 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的…

企业中需要哪些告警Rules

文章目录 企业中需要哪些告警Rules前言定义告警规则企业中的告警rulesNode.rulesprometheus.ruleswebsite.rulespod.rulesvolume.rulesprocess.rules 总结 企业中需要哪些告警Rules 前言 Prometheus中的告警规则允许你基于PromQL表达式定义告警触发条件&#xff0c;Prometheus…

poi word 添加水印

poi word 添加水印 依赖DocxUtil调用遇到的问题部分客户给的word无法添加水印水印文案 过长会导致字变小变形 超过一定长度就会显示异常。消失等情况 依赖 <!--poi-tl--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</art…