软件工程课程随笔:认识自己、规划学习与持续改进

这个作业属于哪个课程 计科24级6班
这个作业要求在哪里 第一周作业 - 计科24级56班班级博客
这个作业的目标 熟悉博客园、GitHub 基础使用;完成自我梳理,评估自身计算机能力,制定课程与学期学习计划;阅读《构建之法》并提出思考问题;借鉴前辈学习经验,建立学术诚信意识,养成技术写作习惯。

一、介绍自己,建立博客

我是一名计算机相关专业的大学生,目前正在学习 Python、C++ 和 Go。由于不希望在网络上公开过多个人信息,本文主要记录我的学习状态、思考和计划,不写真实姓名等隐私内容。

我建立博客,主要是为了练习技术写作、记录学习过程、上传和展示代码,并逐渐养成规范表达和总结反思的习惯。以前我经常在遇到问题时只想尽快解决,很少认真记录解决过程。这样做虽然可能暂时完成任务,但过一段时间后很容易忘记,也不利于形成自己的知识体系。

写博客需要花费时间,但我认为这件事很有意义。写作会迫使我把模糊的想法组织清楚,也方便以后回顾自己的成长过程。即使一开始写得不够成熟,只要坚持记录,就能看到知识、思考和表达能力的变化。

我目前没有特别突出的竞赛奖项或正式成就,但我愿意把“持续学习、愿意复盘、能够逐步积累”作为自己的优势。学习编程时,我会尝试把大问题拆成小问题,先完成一个能运行的版本,再逐步修改。这个过程看起来比较慢,但它能让我真正理解问题,而不是只记住某个固定答案。

本课程中,我会遵守以下底线:按时完成作业;代码和文字尽量原创;引用他人资料时注明来源;遇到问题先独立思考并查找资料,再向老师和同学请教;提交前检查格式、链接、截图和代码是否完整。

我的 GitHub 仓库地址是:https://github.com/ch998244353?tab=repositories。后续我会在仓库中继续补充学习代码、实验记录和 README 介绍。

二、现状、经验和计划

1. 为什么选择计算机相关专业

我选择计算机相关专业,一方面是因为对编程和技术产品有兴趣,另一方面也希望学习一种能够把想法转化为实际工具的能力。计算机专业需要长期积累,不能只依靠课堂上的短期记忆。现在我对编程的理解还比较初步,但我希望通过持续练习,逐渐具备独立分析问题和完成项目的能力。

距离成为一名合格的 IT 专业毕业生,我还存在一些明显差距:

  • 专业基础还不够系统,对数据结构、操作系统、计算机网络和数据库的理解需要继续加深;
  • 编程经验不够丰富,面对较大的问题时,拆分任务和设计模块的能力还需要提高;
  • 工程实践经验不足,对 Git、测试、调试、代码评审和文档编写的使用还不够熟练;
  • 阅读和维护他人代码的经验较少,需要训练自己快速理解陌生项目的能力;
  • 有时会因为任务困难而拖延,需要通过固定计划和阶段性检查来改善执行力。

2. 技能自评与提升计划

评分范围为 0—9 分。5 分表示基本能够通过相关面试,9 分表示接近世界一流水平。下面的分数是我根据目前的学习经历做出的保守估计。

技能 当前水平 课程结束目标 提升方法
Python 编程 4 7 每周完成练习;阅读标准库文档;完成一个 Agent 相关小项目;复盘代码结构
C++ 编程 3 5 复习语法和标准库;实现数据结构;练习调试;完成小型算法题
Go 编程 2 5 学习 Go 基础语法和并发模型;阅读示例项目;实现简单服务程序
Git/GitHub 2 6 掌握提交、分支、合并、回滚和 README 编写;每周维护个人仓库
数据结构与算法 3 6 学习复杂度分析;实现链表、栈、队列、树和图;每周完成算法练习
技术写作 4 7 每周发布学习记录;练习 Markdown;引用资料时注明来源;请同学提出反馈
调试与测试 2 6 学习断点调试;为作业编写测试用例;记录错误现象、原因和修复过程

3. 为什么要认真上课

我来上这门课,不只是为了获得学分,更是希望建立比较完整的软件工程视角。单独学习语法和工具,容易把编程理解成“把代码写出来”;但软件工程还包括需求理解、沟通协作、版本管理、测试、维护和持续改进。

我希望通过课程作业获得稳定反馈,把“知道”转化为“能做”,再把“能做”提升为“做得规范、可靠、可维护”。因此,遇到困难时我的选择是:

C:向老师和同学请教,花更多时间,把作业全部完成。

具体来说,我会先拆分问题、查阅资料、做最小实验,再带着具体问题请教,而不是一遇到困难就放弃。如果某项任务确实超出当前能力,我会先完成核心功能,再逐步补充优化和扩展内容。

4. 师生关系与学术诚信

我在大学中体验过的师生关系比较多样。有些课堂主要是老师讲授、学生记录;有些课堂则更鼓励提问、讨论和反馈。我希望这门课能够形成一种相互尊重、目标一致、允许提问和持续反馈的关系。老师负责提供方向、标准和指导,学生负责投入时间、完成任务并对自己的学习结果负责。

如果作业对我来说有困难,我不会选择直接不做,也不会只完成最低要求。我会先独立分析,搜索官方文档、教材和可靠资料,尝试写出最小可运行版本;如果仍然无法解决,就向老师、助教或同学描述清楚问题、已尝试的方法和具体报错。

在学习和工作中,引用资料、借鉴思想与抄袭剽窃并不相同。合理引用应该明确标注来源,说明哪些观点或代码来自他人,并在自己的分析、实现或改进中体现独立工作。抄袭则是把他人的文字、代码或成果据为己有,隐瞒来源,或者只做很少改动却宣称完全原创。

今后我会遵守以下原则:

  1. 引用文章、书籍、代码和图片时提供链接或出处;
  2. 对参考代码说明使用范围和自己的修改内容;
  3. 不复制同学作业,不购买或代写作业;
  4. 不确定是否构成违规时,主动向老师确认;
  5. 保留自己的思考过程、提交记录和实验结果。

5. 未来方向与本学期规划

目前我比较倾向于 Agent 开发方向,希望学习如何结合大语言模型、工具调用、工作流和软件工程方法,构建能够解决实际问题的系统。这个方向对编程基础、接口设计、调试能力、数据处理和持续学习能力都有要求。

我的优势是愿意学习新工具,也愿意通过实践理解概念;我的劣势是基础还不够扎实,项目经验少,遇到复杂问题时容易缺少清晰的拆分方法。因此,本学期我计划:

  • 每周投入 8—10 小时学习本课程,其中包括上课、阅读、编程、写作和复盘;
  • 每周完成一篇学习总结或一份实验记录;
  • 每周维护 GitHub 仓库,保持提交记录清晰;
  • 完成至少一个简单的 Agent 或自动化工具项目;
  • 学会为项目编写基本测试和使用说明;
  • 在学期末回顾技能评分、代码量和学习时间,分析计划完成情况。

6. 代码量与学习时间

由于过去没有持续统计代码行数,下面是按目前学习经历做出的保守估算,代码量均为约数:

语言 当前代码量(约) 主要用途
Python 1500 行 基础练习、脚本和简单实验
C++ 1200 行 语法练习、算法和数据结构练习
Go 500 行 基础语法和简单程序练习
合计 3200 行

我认为,进入一流软件公司不能只用代码行数衡量能力。代码量需要和代码质量、项目复杂度、测试、协作、文档以及解决问题的能力结合起来。对本课程而言,我计划在课程结束时累计完成约 8000 行有效代码,平均每周完成约 250—300 行经过理解、测试和整理的代码。

如果过去两年有浪费时间的情况,我不能只停留在“以后要努力”的口号上,而应该付出具体行动。因此我的选择是:

D:比以前的课要多很多,直到达到目标为止。

三、WOOP 学习计划

Wish:确定愿望

在本课程结束时,我希望能够独立完成一个结构清晰、具有基本测试、使用 Git 管理、能够向他人说明设计思路的 Agent 或自动化工具项目。

Outcome:确定结果

如果这个愿望实现,我将拥有一个可以展示的 GitHub 仓库,也能更自信地阅读他人代码、定位问题和解释自己的设计。更重要的是,我会形成持续学习、按计划完成任务和及时复盘的习惯。

Obstacles:找出障碍

我最可能遇到的障碍包括:基础知识不牢;任务拖延;遇到错误时缺少耐心;手机和网络分散注意力;同时参加其他活动导致时间不足;一开始制定目标过高,后面因为压力过大而放弃。

Plan:使用 if—then 做风险防范

  • 如果我连续 20 分钟无法定位错误,那么我就记录错误现象、缩小问题范围、制作最小示例,再查阅文档或请教他人;
  • 如果我在写程序时想刷手机或浏览无关网页,那么我就离开电脑活动 5 分钟,回来后开启专注计时;
  • 如果当天任务没有完成,那么我就当天记录原因,并在第二天优先补齐;
  • 如果一周结束时进度落后,那么我就减少非必要活动,安排一个固定的补课时段;
  • 如果我觉得任务太大而不想开始,那么我就先完成一个 15 分钟内可以完成的最小步骤;
  • 如果我连续几天没有提交代码,那么我就重新安排一个小任务,恢复稳定提交,而不是等待状态自动变好。

四、阅读《构建之法》后提出的五个问题

问题一:个人能力与团队协作如何平衡?

参考内容:第 1 章“概论”以及软件团队协作相关内容。

书中强调,软件开发通常不是一个人的工作,团队成员需要沟通、分工、评审和共同承担责任。我认同团队协作可以减少重复劳动、提高项目质量,但我也担心过多的会议、流程和文档会降低小团队的开发速度。

我的问题是:对于课程小组项目,如何判断某个流程是必要的工程实践,还是形式主义?是否可以用缺陷数量、返工时间、交付稳定性等指标判断流程是否有效?我认为流程不应该为了“看起来专业”而存在,而应该能够减少错误、降低沟通成本或帮助团队做出更好的决策。

问题二:代码复用的边界在哪里?

参考内容:第 2 章“个人技术与流程”中关于复用、学习和提高效率的讨论。

使用成熟库可以提高开发效率,也能减少重复造轮子的问题;但是,如果学习者什么都直接调用库,就可能对底层原理了解不足。我的困惑是:在学习阶段,哪些功能应该自己实现以理解原理,哪些功能应该直接使用成熟库?

我的理解是,如果某个功能本身就是本次学习目标,就应该先自己实现一个简化版本;如果它只是项目中的辅助功能,而且已有成熟、可靠的库,就应该优先使用库,并阅读文档、理解接口和限制。判断标准应该同时考虑学习目标、项目风险和时间成本。

问题三:如何衡量软件的可维护性?

参考内容:第 3 章“软件工程的思想”以及关于代码质量和维护的内容。

书中多次提到可维护性,但可维护性不是一眼就能看出的指标。除了代码规范和注释之外,我认为还可以观察修改需求时的改动范围、测试覆盖情况、缺陷修复时间和新成员理解项目所需的时间。

我的问题是:这些指标是否足以客观评价可维护性?如果一个项目代码很短、功能也能运行,但几乎没有测试和文档,我们应该如何判断它是否适合继续维护?我倾向于认为,能否让未来的开发者安全地修改代码,比当前代码是否“看起来简洁”更加重要。

问题四:敏捷开发是否适用于所有项目?

参考内容:第 6 章及书中关于敏捷流程、迭代和反馈的讨论。

敏捷方法强调快速迭代、尽早交付和及时反馈,但某些安全性、可靠性要求很高的项目可能需要比较完整的前期设计。我的问题是:当需求变化频繁,同时又有较高可靠性要求时,应该怎样组合敏捷迭代与严格的设计、测试流程?

我认为敏捷并不等于“什么都不设计”,而是把大设计拆成可验证的小步骤,在保留必要文档和质量门槛的基础上快速反馈。关键不在于完全选择某一种流程,而在于根据项目风险调整迭代速度、评审深度和测试范围。

问题五:创新与工程约束如何兼容?

参考内容:第 16 章“创新”。

创新需要尝试新想法,但工程项目又受到时间、预算、兼容性和用户需求的约束。我的问题是:如何判断一个想法值得进入原型阶段?除了个人兴趣,是否应该先用用户需求、实现成本、技术风险和预期收益进行筛选?

以 Agent 开发为例,很多新工具和新框架都很有吸引力,但如果没有明确需求,只是不断尝试新技术,很容易把时间花在工具切换上。我认为创新应该保留探索空间,但也要通过最小原型验证价值,避免把“新”误认为“有用”。

五、对课程的认真反馈

我选择:

C:有问题就问,至少一学期提三个问题,认真按时填写反馈。

如果反馈只是泛泛地写“很好”或“太难”,对改进课程帮助不大。因此,我会尽量提供具体事实,例如某个概念难以理解的原因、作业中最耗时的环节、资料链接是否有效,以及我认为可以改进的地方。

我希望课程反馈能够形成闭环:学生提出问题,老师说明处理方式,下一次课程中展示改进结果。这样学生会更愿意认真反馈,也能理解教学设计背后的考虑。

六、前车之鉴:阅读感想

1. 关于时间分类与优先级

参考文章:把每天要做的事情分成 ABCD 四类

文章把任务分为“紧迫且重要、重要但不紧迫、紧迫但不重要、不紧迫也不重要”四类。过去我经常被临近截止日期的任务牵着走,忽略了基础学习、代码整理和长期规划。这样做短期内可能完成了任务,但长期来看会让自己一直处在被动状态。

对我来说,最需要改进的是“重要但不紧迫”的事情,例如复习基础知识、阅读文档、整理代码和提前规划作业。我准备每周开始时列出任务,并为重要但不紧迫的任务安排固定时间,而不是等到截止日期临近才开始。

2. 关于“科班但没有学懂计算机”

参考文章:你是否也觉得自己是科班,但没学懂计算机?

我认为,科班学习并不自动等于掌握知识。课程能够提供学习路径、基本概念和练习机会,但真正的理解还需要自己动手、查资料和反复总结。如果只参加考试而不写代码,知识很容易停留在短期记忆中。

这篇文章让我意识到,不应该只问“这门课考什么”,还应该问“这个知识能解决什么问题”。今后我会把课程知识转化为小实验,并记录自己实际不会的地方,逐步补齐基础。

3. 关于热情、能力与选择

参考文章:热情、能力、选择

热情能够帮助人开始,但长期进步还需要能力积累和正确选择。只有“我喜欢编程”是不够的,还要能够持续阅读、调试、沟通和完成枯燥的任务。特别是 Agent 开发涉及模型、工具、接口和工程实践,如果没有基础能力支撑,很容易停留在尝试新工具的阶段。

我会把热情落实为具体行为:固定学习时间、每周提交成果、主动寻求反馈,并根据结果调整方向。选择一个方向之后,也不能只关注热门技术,而应该先把编程、数据结构、Git、测试和软件设计等基础能力打好。

七、GitHub、博客和后台编辑器截图

我的 GitHub 仓库地址:

https://github.com/ch998244353?tab=repositories

请在发布前补充以下截图:

  1. 此处插入博客园“管理 → 选项”中默认编辑器设置为 Markdown 的截图;
  2. 此处插入 GitHub 个人仓库主页截图;
  3. 此处插入 GitHub README 个人介绍截图;
  4. 此处插入本文在博客园后台编辑界面的截图。

图片示例写法:

![博客园 Markdown 编辑器设置](图片地址)
![GitHub 个人仓库](图片地址)
![GitHub README 个人介绍](图片地址)

八、总结

这次作业让我意识到,软件工程学习不仅是增加代码量,还包括表达、计划、协作、规范、反馈和持续改进。我的计划不应该只是写在文章里的目标,而应该通过每周可检查的行动来落实。

我会在课程结束时回看这篇文章,对照最初的技能评分、代码量、学习时间和项目成果,分析哪些目标完成了,哪些没有完成,以及原因是什么。希望这篇博客不是一次性的作业,而是我持续记录和改进的起点。

提交前检查清单

posted @ 2026-09-06 22:33  ch998244353  阅读(5)  评论(0)    收藏  举报