软件工程第一次作业随笔

一、技能树梳理与技术偏好

1.1 已具备的专业知识与能力

  • 能力 A —— C / C++ 语言基础
    掌握基本语法、指针、结构体、类与对象、面向对象思想,能独立编写百行级算法与工具程序。C 与 C++ 是我目前最顺手、练习最多的语言。

  • 能力 B —— 数据结构与算法应用
    熟悉常见数据结构(链表、树、图)与基础算法思想。曾利用 AI 辅助从零实现了 Van Ginneken 布线树缓冲器插入优化算法(一种经典的动态规划算法,用于数字电路物理设计),完成了从论文理解、代码实现到结果验证的完整闭环。

  • 能力 C —— 静态时序分析(STA)初步知识
    学习了静态时序分析方向的入门知识,理解时序约束、关键路径、延迟等基本概念,能看懂基础的时序分析流程,为转向 EDA 方向打了一点地基。

1.2 感兴趣的技术方向

  • EDA(电子设计自动化)与数字 IC 后端:最感兴趣。C/C++ 与 STA 知识在这里有直接用武之地,也是我考研拟深造的方向;

1.3 还欠缺的能力(自我审视)

  • 工程化能力薄弱:没有写过测试用例,没有使用过 CI/CD、代码审查流程,代码的"可维护性"意识不足;
  • 软件架构与设计模式欠缺:只会"照功能写代码",不会"按架构设计软件",面对复杂需求拆解能力弱;
  • 团队协作经验为零:没参与过多人协作开发,不熟悉 git 分支合并、merge 冲突解决、Code Review;
  • 技术面偏窄:前端只会原生三件套与 Flask 皮毛,没掌握开源生态里常用的框架;操作系统、计算机网络等计算机基础仍较薄弱;
  • 算法深度不足:仅停留在"能看懂、能实现",远未达到竞赛水平,复杂工程优化能力有限。

坦率地说:"会什么"我可以说出一串,"不会什么"更是我心里很有数的一串。 正是因为知道自己缺的不是"会不会敲代码",而是"怎么把代码变成可靠软件",我才对软件工程这门课格外期待。


二、代码量现状与学期目标

截至目前

  • Van Ginneken 布线树缓冲器插入工具(C++):约 730 行(algorithm / tree / solution / main 四模块);
  • Hugging Face 图像生成网页应用(Python + JS + CSS + HTML):约 675 行;
  • 若干 C/C++ 课程练习与学习笔记代码:约 150 行。

合计约 1500 行。这些代码基本都由我一个人、以"单文件或小项目"的方式写成,结构简单,没有测试。

期望目标

  • 本学期结束后希望达到 5000 行左右,并以"完整、规范、可测试"为前提,而不是堆代码;
  • 形式上希望覆盖 2–3 个完整项目:一个带前后端的完整 Web 应用、一个可测试的算法工具库、一个团队协作项目(多人共同维护、走 git 分支与 Code Review);
  • 每份代码包含单元测试与 README 文档,把"会跑"提升到"能用、好看、耐得住别人改"。

三、本课程最期待学习的知识与希望收获

最期待的知识

  1. 从"需求"到"设计"的方法:如何把一句模糊的用户需求,拆解成清晰的功能模块与数据流——这正中我的短板;
  2. 测试与质量保障:单元测试、集成测试怎么做,如何让代码"可被验证",而不是"试试能跑";
  3. 团队协作开发流程:git 分支模型、Code Review、项目管理(敏捷/迭代),真正体验"一群人写一个系统";
  4. 软件生命周期与维护:程序写完只是开始,如何设计得便于扩展、便于他人接管。

希望获得的收获

  1. 建立起完整的工程观——从"我会写代码"升级为"我能做软件";
  2. 完成至少一个多人协作带测试的课程项目,作为作品放进简历与 GitHub 个人主页;
  3. 让软件工程的规范(文档、测试、协作)内化成习惯,为考研复试与后续科研/就业做好铺垫。

四、AI 生成的学习指南与合理性分析

4.1 AI 生成的学习指南

《软件工程课程学习指南》(AI 生成 · 简要版)

  1. 摆正定位:软件工程的重点不是"编程语言",而是"制造的纪律"——需求、设计、测试、维护、协作。写代码只占整个工程的一小部分。
  2. 学习主线:按"需求分析 → 概要/详细设计 → 编码 → 测试 → 发布与维护"的生命周期走,任何知识点都放到这条主线里理解。
  3. 三大核心实践
    • 版本控制:熟练使用 git,精通分支、合并、Rebase,习惯小步提交、清晰 commit message;
    • 测试:掌握单元测试与 TDD 思想,学会写"先失败再通过"的测试,用测试保障重构;
    • 文档:养成写 README / 接口文档 / 设计文档的习惯,把"想法外化"。
  4. 必做项目:独立完成一个"需求明确的完整应用" + 参加一次"小组协作开发",对照生命周期各阶段交付物自检。
  5. 每周自检:花 30 分钟复盘本周产出——是否提交了代码、是否写了测试、是否有设计决策记录。
  6. 善用 AI 但不依赖:让 AI 当"结对编程同伴"(解释、查错、Review),但最终要能自己解释每一行代码。

4.2 合理性分析

合理的部分:

  1. 定位准确:把软件工程定义成"制造的纪律"而非"写代码",点出了我和多数初学者最容易误解的地方,与我在 1.3 的自我评估完全对上;
  2. 按生命周期组织知识:用"需求→设计→编码→测试→维护"一条主线串起全部知识点,逻辑清晰、便于学习时定位;
  3. 实践向、可执行:把抽象原则落成"小步提交、先写测试、每周复盘"这类具体动作,而不是空洞的口号——这份指南对"知道该怎么开始"帮助很大;
  4. "善用 AI 但不依赖":恰好呼应我 1.1 的"能力 F",提示我 AI 是辅助而非替代。

不足的部分:

  1. 缺少量化与考核导向:没有给出时间安排与阶段验收标准(比如"第三周前完成 git 通关、第五周产出第一个测试案例"),容易让人泛泛而听;
  2. 未涉及团队冲突与项目管理细节:对"多人协作如何分工、评审标准怎么定"这类具体痛点着墨太少;
  3. 没区分课程重点:对"本课要考什么、老师重点讲什么"没有任何针对性,只能作为通用框架使用。

能否带来帮助:

能。它最大的价值是给了我一张可执行的行动清单与一条主线,把"软件工程"这座大山的攀登路线画了出来;同时它也让我更清醒:指南是地图,路还得自己走。我会结合自身情况把它改造成"半个月一个里程碑"的版本——先补 git 与测试,再用一个小组项目把"需求→设计→协作→测试"完整走一遍,让 AI 生成的框架真正落到我的代码量目标和考研规划里。


结语

感谢教师与助教阅读这份"诚实清单"。此刻的我,会的东西不多,但知道自己不会什么、想学什么、要走到哪——这本身,就是这门课最好的起点。

posted @ 2026-09-11 15:23  147lsq123  阅读(4)  评论(0)    收藏  举报