第一周随笔
软件工程作业随笔:自我介绍、学习规划与读书思考
作业信息
一、准备工作
- GitHub 账号:https://github.com/it-cc?tab=repositories
- 博客园账号:https://home.cnblogs.com/u/3850326
- 博客名称:it-cc
- 仓库地址:https://github.com/it-cc/it-cc
![[Pasted image 20260906023959.png]]
二、正文
1. 介绍自己,建立博客
1.1 自我介绍
我叫蔡志冲,来自广东省汕尾市。我目前对嵌入式和具身智能比较感兴趣。
1.2 我的优势技能
我是一个平庸的人,没有优势技能。
1.3 我对写博客的看法
写博客很麻烦,也很浪费时间,我不喜欢这件事。
三、现状、经验和计划
2.1 专业选择与能力差距
我选择计算机科学与技术的原因是:随大流,填志愿时选择了一个比较热门并且分数够得上的专业。
我认为自己距离合格的 IT 专业毕业生还有以下差距:
- 专业知识:对数据结构、算法、操作系统、计算机网络和数据库等基础知识掌握得还不够系统。
- 编程技能:有较好的cpp基础,但没有深入学习。
- 工程实践能力:缺乏实践经验。
- 沟通、协作或表达能力:主动沟通和及时反馈做得还不够。
技能自评
| 技能 | 当前水平(0-9) | 课程结束目标(0-9) | 提高方法 |
|---|---|---|---|
| 需求理解与代码健康度 | 4 | 6 | 学习模块化设计;使用 Git 提交清晰的 Commit。 |
| 测试与验证能力 | 3 | 5 | 为课程作业编写单元测试;测试空值、异常输入和边界情况;使用GoogleTest编写测试代码。 |
| 工程复现与项目构建 | 5 | 7 | 为项目编写 README; |
| 开源协作与 Git 使用 | 5 | 7 | 掌握分支、合并、Pull Request 和代码回滚;规范引用开源代码;完善 README。 |
| 手动掌控力与底层原理 | 2 | 5 | 减少对 AI 的完全依赖;独立完成基础算法。 |
我的具体提高措施包括:阅读教材、参加项目、问AI、看文档。
2.2 阅读心得与师生关系
a. 为什么要认真上课和参与
我阅读了《你为何要来上课并且认真参与》。我理解认真参与课程并不只是为了完成考勤或获得成绩,更重要的是利用课堂和作业建立持续学习的节奏。软件工程中的很多能力,例如需求分析、代码评审、测试和团队协作,仅靠零散地看视频或复制代码很难真正掌握,需要在实际任务中不断练习。
结合自己的情况,我准备按时参加课程,认真完成每次作业,遇到问题时先记录错误现象、尝试过程和自己的猜想,再向老师、同学或 AI 提问。完成作业后,我还会进行一次复盘,记录本次作业中做得好的地方、出现的问题以及下次可以改进的地方。
b. 我经历过的师生关系与期待
我在大学中体验到的师生关系主要是以课堂教学和作业完成为主,师生之间的交流通常集中在有问题时。这样的关系能够帮助学生学习基础知识,但学生主动提问和反馈的机会相对较少。
我希望这门课中的师生关系是一种相互尊重、共同学习和及时反馈的关系。老师负责提出清晰的要求、提供指导和评价,学生则需要主动参与、认真完成任务并及时反馈问题。这样学生不只是被动接受知识,也能够逐渐形成独立学习和解决问题的能力。
如果作业有困难,我选择向老师和同学请教,花更多时间,把作业尽量完成。我的具体做法是先阅读作业要求,拆分任务,查找教材和可靠资料,记录已经尝试过的方法;如果仍然无法解决,就带着具体问题向老师、助教或同学请教,而不是直接放弃或照搬别人的答案。
c. 引用、借鉴与抄袭的区别
我理解,引用和借鉴是在承认他人成果的基础上使用相关资料,并且明确标注来源,同时保留自己的理解、分析和实现。抄袭或剽窃则是把他人的文字、代码或观点直接当作自己的成果,隐瞒来源,或者没有经过独立思考就提交。
在本课程中,我会对参考的文章、代码库和资料标注来源;对于参考的代码,我会先理解其功能和实现方式,再根据自己的项目进行修改,并说明参考部分。对于 AI 生成的内容,我也会进行检查、测试和修改,不能因为代码是 AI 生成的就直接提交。
2.3 几年后的选择与本学期规划
几年后,我希望从事嵌入式开发或具身智能相关的软件开发工作。选择这个方向是因为我对软硬件结合、机器人感知和智能系统比较感兴趣,也希望将 C++、计算机基础知识和实际设备结合起来。
相比其他同学,我的优势是对嵌入式和具身智能有比较明确的兴趣,并且具备一定的 C++ 基础。我的劣势是项目经验不足,专业基础还不够系统,对 Linux、硬件接口、算法和工程工具的掌握还不够深入。针对这些问题,我本学期会重点提升 C++ 编程、Git 使用、测试能力和项目实践能力。
2.4 我对本课程的计划和期待
我希望通过这门课理解软件工程项目从需求、设计、编码、测试到维护的完整过程,而不只是学习某一种编程语言。我也希望通过团队项目和代码评审提高自己的沟通能力,学会写出结构清晰、容易维护和能够复现的代码。
我打算按时参加课程,提前阅读相关资料,按计划完成作业。每次作业完成后,我会检查代码、补充必要的测试和文档,并将重要过程提交到 GitHub。遇到困难时,我会先独立分析并记录过程,再向老师、同学或 AI 请教。小组合作时,我会及时汇报进度,明确自己的任务,不影响其他成员的工作。
代码量现状与目标
| 语言 | 当前代码量(精确到 100 行) | 证明或统计方式 |
|---|---|---|
| C | 1000行 | cloc |
| C++ | 9000行 | cloc |
| 合计 | 10000行 | cloc |
我认为,要获得一流软件公司、互联网或人工智能公司的入职资格,不能只看代码行数,还要看代码质量、项目复杂度、测试覆盖、问题解决能力、团队协作和持续学习能力。代码量可以说明练习和实践的积累,但大量重复或低质量代码并不能真正代表能力。
如果从事高校教学科研工作,除了代码能力,还需要具备科研问题意识、论文阅读和写作能力、实验设计能力、教学表达能力以及持续研究的耐心。
WOOP 计划
Wish:愿望
我希望在本课程结束时,能够独立完成一个结构较为清晰、包含基本测试和完整 README 的 C++ 或相关项目,并能够使用 Git 记录完整的开发过程。
Outcome:结果
如果实现这个目标,我将不仅能够完成课程作业,还能更清楚地理解软件工程的开发流程。以后学习嵌入式和具身智能相关内容时,我可以把代码、测试、文档和版本管理结合起来,减少只会让程序“跑起来”但不会维护和改进的问题。
Obstacles:障碍
最可能妨碍我的因素是基础知识不够系统、遇到困难时容易依赖 AI,以及学习计划执行不稳定。外部障碍包括课程任务较多、临时事务和时间安排冲突;内部障碍包括缺乏耐心、遇到 Bug 时容易焦虑,以及不能持续记录和复盘。
最可能导致我达不到目标的因素是不能长期坚持学习计划,遇到问题时直接复制 AI 的答案,而没有真正理解代码。
我准备先明确每周任务,再把任务拆分成较小的步骤。使用 AI 时,我会要求它解释思路和可能的问题,并对生成的代码进行人工检查和测试。对于没有理解的部分,我会查阅教材或官方文档,并把解决过程记录下来。
Plan:如果-那么计划
- 如果我遇到 Bug 并且十分钟内没有找到原因,那么我就记录错误信息、缩小问题范围,使用调试器或日志逐步排查。
- 如果我发现自己想直接复制 AI 生成的代码,那么我就先要求 AI 解释代码,并亲自修改、运行和测试后再决定是否使用。
- 如果我因为手机或其他事情无法集中学习,那么我就暂时关闭无关软件,安排一段完整的学习时间,先完成当天最重要的任务。
- 如果某周没有完成计划,那么我就利用下一周的空闲时间补上,并调整后续计划,避免把问题一直拖到学期末。
四、提有质量的问题,给认真的反馈
3.1 《构建之法》前三章阅读问题
问题一:个人小项目什么时候需要软件工程方法?
章节和上下文: 第 1 章第 1.1 节“软件 = 程序 + 软件工程”。书中指出,程序能运行不等于软件质量好。
我的问题: 对于一个人完成的小型课程项目,是否也需要需求分析、模块化、版本管理和测试?
我的分析: 我以前只关注程序能否运行,代码变复杂后才发现难以修改。结合第 2 章的 WC 项目,我认为小项目也应该使用简化的软件工程流程,至少写清需求、做好模块划分、使用 Git、编写基本测试和 README。
问题二:AI 降低了编码难度,是否也降低了软件复杂性?
章节和上下文: 第 1 章第 1.2.1 节“软件的特殊性”。书中提到软件具有复杂性、不可见性和易变性。
我的问题: AI 可以快速生成代码,这是否只是降低了编码成本,并没有降低软件在需求、架构、测试和维护方面的复杂性?
我的分析: 我使用 AI 生成 C++ 代码时遇到过重复逻辑和异常处理不完整的问题。因此我认为 AI 只能提高编码效率,不能代替人进行需求分析、架构选择和结果验证。
问题三:单元测试能证明一个模块真正正确吗?
章节和上下文: 第 2 章第 2.1 节“单元测试”。书中介绍了通过单元测试保证模块质量。
我的问题: 如果测试只覆盖正常输入,没有覆盖空值、异常输入和边界条件,测试通过是否仍可能存在问题?
我的分析: 第 2 章的 WC 项目要求测试空文件、单字符文件和典型文件,说明测试数据很重要。我认为单元测试不能证明程序完全正确,但应该覆盖核心逻辑和边界情况。
问题四:需求变化后,回归测试应该如何维护?
章节和上下文: 第 2 章第 2.4.2.3 节“回归测试”。书中建议在程序修改后反复运行测试,确认原有功能没有被破坏。
我的问题: 当需求变化导致测试结果改变时,如何判断这是正常变化,还是程序出现了回归错误?
我的分析: 我认为修改测试前必须先确认需求变更并说明原因。原有功能的测试应尽量保留,新功能增加新的测试,不能为了让测试通过而直接修改断言。
问题五:如何比较一个软件工程师的真实能力?
章节和上下文: 第 3 章第 3.1 节“个人能力的衡量与发展”。书中提到,工程师能力还包括软件设计、职业技能和实际成果。
我的问题: 一个代码量较少但结构清晰、测试完整的学生,是否可能比代码量很多但代码混乱的学生更有工程能力?
我的分析: 我以前认为代码量越多能力越强,但 AI 可以快速生成大量代码。因此我认为应该综合考虑功能完成度、代码质量、测试、文档、协作和实际效果。
3.2 课程反馈计划
我选择 D:经常提问题,平时就经常给老师和助教提反馈。我认为反馈不是对老师工作的否定,而是帮助老师了解学生学习困难和课程效果的重要方式。
我计划每周至少整理一次学习记录,遇到影响理解或完成作业的问题就及时提问。提问时会先说明问题背景、已经阅读的资料、尝试过的方法、错误信息和目前的具体困惑,尽量避免只提出“为什么运行不了”这类无法定位的问题。对于课程节奏、作业难度、测试要求和团队合作中遇到的共性问题,我会认真填写课程反馈,并提出具体建议。收到老师或助教的回复后,我会继续验证解决方案,并补充反馈结果。
五、前车之鉴
文章一:辜新星《时刻调整方向,找到人生的蓝海》
链接:https://book.douban.com/subject/4006425/discussion/22803733/
文章主要内容:文章作者回顾了自己的大学学习、专业理解和求职经历。作者在大一时参加了很多社团活动,虽然生活非常忙碌,但学习效果并不理想,后来意识到大学的主题仍然是学习和进步。在学长的建议下,作者把事情分成 A、B、C、D 四类,并为不同任务安排专门的时间,从而提高了学习效率。作者还通过阅读专业书籍、亲手编译代码、了解计算机底层原理和向前辈请教,逐渐弥补自己的编程基础。求职时,作者根据自己的兴趣和比较优势选择发展方向,并提前了解目标职位,进行有针对性的准备。
我的具体感想:这篇文章给我最深的感受是,成长并不是一直沿着一条直线前进,而是在发现方向不合适时不断调整。作者大一时参加了很多活动,但后来发现自己不能因为“很忙”就忽略专业学习。这让我想到自己选择计算机科学与技术专业时有一定的随从因素,进入大学后也没有很早地明确发展方向。如果只是跟着课程走,或者看到什么热门技术就学习什么,很容易花费很多时间却没有形成真正的能力。
文章中提到的 A、B、C、D 时间分类方法对我也很有帮助。我目前对嵌入式和具身智能感兴趣,但 C++、数据结构、操作系统等基础知识还不够扎实。因此,我应该先把重要且基础的学习任务安排好,再处理其他事情,而不是用忙碌代替有效学习。作者通过亲手敲代码、编译代码来学习编程,也提醒我不能只看懂 AI 生成的代码或书上的示例,必须自己动手实现和调试,才能发现真正的问题。
对我的启发和行动:
- 每周开始时把任务分成 A、B、C、D 四类,优先完成课程作业、C++ 基础和项目实践等重要任务。
- 继续关注嵌入式和具身智能,但先打好 C++、数据结构、操作系统和 Linux 等基础,避免盲目追逐新技术。
- 学习代码时坚持亲自编写、编译和调试,不能直接复制书本或 AI 的代码。
- 通过课程作业和小项目了解自己的兴趣与能力,逐步明确今后的发展方向。
文章二:刘帅《在失望中寻找希望》
链接:https://book.douban.com/subject/4006425/discussion/22803961/
文章主要内容:作者回顾了自己本科阶段的学习、工作、考研和求职经历。虽然本科期间学习成绩不错,也学过很多计算机课程,但由于学习方式比较机械,只完成作业和考试,没有主动思考和大量实践,所以毕业后才意识到自己并没有真正学懂计算机。工作中,作者发现工作内容和自己的技术兴趣不完全一致,于是通过考研改变发展方向。后来在实习和求职过程中,作者因为算法、底层原理、测试、系统设计和行业知识等方面准备不足而经历失败,但也通过这些失败看到了自己的真实差距,最终不断改进并找到新的机会。
我的具体感想:这篇文章让我认识到,考试成绩和真正的专业能力并不是一回事。作者本科阶段能够取得较好的成绩,但主要依靠听课、做作业和机械记忆,缺少主动实践,因此在面对实际技术问题和深入面试时暴露出很多不足。这一点对我有很大的提醒:我不能只以“完成作业”作为学习目标,也不能认为程序能够运行就代表自己已经掌握了相关知识。
文章中作者在面试失败后没有简单地把原因归结为运气不好,而是具体分析了自己在算法、测试、底层原理和思考方式上的不足。这种面对失败的态度值得学习。我的 C++ 基础虽然还可以,但目前缺少完整项目经验,对测试、调试和工程实践掌握不够。如果现在只关注表面的功能实现,今后也可能出现“知其然但不知其所以然”的问题。
文章还提到,遇到不理解的内容时,要主动思考、提问和交流,而不是一直机械地记忆。对于我来说,使用 AI 时尤其需要注意这一点。AI 可以帮助我理解概念、提供思路和定位部分错误,但不能代替我思考。只有自己分析需求、编写代码、测试程序并解释实现原因,才能真正提高能力。
对我的启发和行动:
- 学习 C++ 和数据结构时,不只背诵概念,必须亲自实现链表、栈、队列、排序等基础内容,并分析时间复杂度。
- 每完成一个项目,都要记录需求、设计、遇到的问题、测试方法和改进方向,避免只留下一个可以运行的程序。
- 为课程项目编写基本的单元测试,主动测试空值、异常输入和边界情况,提高对代码质量的认识。
- 遇到失败或答不上来的问题时,先分析具体原因,再制定改进计划,而不是简单否定自己或选择逃避。
- 使用 AI 时先独立思考,再让 AI 提供辅助;对于 AI 生成的代码,必须理解、修改并测试后才能使用。
浙公网安备 33010602011771号