软件工程:(一)重塑软件思维与线性表精要

目录

一、软件工程导论(宏观篇)

[1. 软件危机:为什么程序员总在加班?](#1. 软件危机:为什么程序员总在加班?)

[2. 软件生命周期:软件的一生](#2. 软件生命周期:软件的一生)

二、数据结构------线性表(微观篇)

[1. 顺序表 (Sequential List)](#1. 顺序表 (Sequential List))

[2. 链表 (Linked List)](#2. 链表 (Linked List))

知识卡片:一表对比

心得


一、软件工程导论(宏观篇)

1. 软件危机:为什么程序员总在加班?

软件危机是指在计算机软件开发和维护过程中所遇到的一系列严重问题。

  • 核心痛点(必考)

    • 估不准:成本和进度经常超出预期。

    • 不满意:用户拿到的产品和想的不一样。

    • 质量差:Bug 满天飞,可靠性低。

    • 难维护:前人写的代码像"屎山",后人不敢动。

    • 没文档:开发过程缺乏记录,全靠开发者大脑记忆。

注释(深度理解): 软件危机的产生不是因为程序员变笨了,而是软件的规模和复杂度增长速度远远超过了人类手工管理的能力。就像盖一间草房不需要蓝图,但盖一座摩天大楼如果没有工程学,必倒无疑。

2. 软件生命周期:软件的一生

软件不仅仅是"写代码"。它从出生到消亡经历三个阶段:

  1. 定义期 :可行性研究、需求分析(搞清楚做什么)。

  2. 开发期 :概要设计、详细设计、编码、测试(搞清楚怎么做并付诸实践)。

  3. 维护期 :改正性维护、完善性维护等(确保一直好用)。


二、数据结构------线性表(微观篇)

1. 顺序表 (Sequential List)

就像火车站排队,每个人必须挨着坐,逻辑上相邻,物理上也必须相邻。

  • 特点 :随机存取。通过 瞬间定位。

  • 代价

    • 插入 :平均移动 个元素。

    • 删除 :平均移动个元素。

  • 时间复杂度 :查找,增删

2. 链表 (Linked List)

就像玩"寻宝游戏",你手里只有下一个人的线索(指针)。逻辑相邻,物理上可以各在天涯。

  • 核心操作(考研/面试常客)

    节点后插入节点:

    cs 复制代码
    s->next = p->next;  // 1. 先接后路
    p->next = s;        // 2. 再断前路

注释(避坑指南): 顺序千万不能反!如果先写 p->next = s,那么原本指向 后面那个节点的指针就丢失了,整条链表就像断了线的风筝,找不回来了。


知识卡片:一表对比

特性 顺序表 (Array) 链表 (Linked List)
存储空间 预先分配,可能浪费 动态分配,利用率高
存取速度 随机访问 顺序访问
增删效率 需大面积搬家 仅需改动指针
适用场景 存储规模固定,频繁查询 存储规模未知,频繁增删

心得

第一天的学习让我们明白:软件工程是教你如何"避坑",数据结构是教你如何"加速"

对于软件危机,记住它不仅仅是技术问题,更多是管理和沟通的问题。

对于线性表,一定要在纸上画出指针指向的过程,脑子里有了图,代码自然就顺了。


课后练习建议:

尝试在不看书的情况下,手写一遍单链表的逆置算法。这是检验你是否真正掌握指针逻辑的"金标准"。

相关推荐
郝学胜-神的一滴21 小时前
墨韵技术|CMake:现代项目构建的「行云流水」之道
c++·程序人生·软件工程·软件构建·cmake
停止重构1 天前
我大概也是软件工程的专家
低代码·软件工程·规范·开源框架·自研开发语言
Duran.L2 天前
从限购到畅通:GLM-5.1 Coding Plan接入攻略
人工智能·ai·软件工程·个人开发·ai编程
workflower4 天前
深度学习是通用型人工智能的基础
人工智能·深度学习·设计模式·软件工程·软件构建·制造
搜佛说4 天前
01-第1章-概述与快速开始
物联网·golang·开源·软件工程·边缘计算·嵌入式实时数据库
无籽西瓜a4 天前
【西瓜带你学设计模式 | 第十五期 - 策略模式】策略模式 —— 算法封装与动态替换实现、优缺点与适用场景
java·后端·设计模式·软件工程·策略模式
老兵发新帖5 天前
软件开发国内常用镜像源配置及回退方法(MAC版)
macos·软件工程
老兵发新帖5 天前
ast-grep
软件工程
无籽西瓜a5 天前
【西瓜带你学设计模式 | 第十四期 - 享元模式】享元模式 —— 内外状态分离与对象共享实现、优缺点与适用场景
java·设计模式·软件工程·享元模式
wxl7812276 天前
驾驭工程 (Harness Engineering):AI Agent 时代的软件工程新范式
人工智能·软件工程