第一周作业

这个作业属于哪个课程 软件工程https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS/
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS/homework/15692
这个作业的目标 注册github,博客园,写随笔

从完成课设到学会开发——我的软件工程学习起点

一、自我介绍:从这篇博客开始记录

我叫肖琳瀚,是计算机科学与技术专业大三 6 班的一名学生。我学过 C 语言、Java、计算机组成原理、计算机网络和算法,目前的实践经历主要是课程设计,还没有实际的企业项目经历。毕业后,我希望从事后端开发工作。

选择计算机专业,一方面是考虑未来的就业方向,另一方面也是希望掌握一项能解决实际问题的技能。相比单纯使用软件,我更想逐渐弄清楚软件背后的运行过程:一次请求如何得到响应,数据如何被保存,一个功能又是怎样由代码实现的。

如果要说自己的优势,我更愿意把它理解为愿意分析问题、逐步寻找答案,而不是已经掌握了多少技术。对现在的我来说,这还需要通过持续实践来证明。我希望遇到问题时,能够先把问题拆开,弄清楚已知条件和不理解的地方,再通过查资料、调试和请教推进,而不是直接寻找一份可以交差的答案。

经过前两年的专业学习,我已经接触了一些基础知识,但还没有足够的成果证明自己具备突出的工程能力。因此,这篇自我介绍也是一次提醒:认识自己的闪光点,并不意味着回避不足;承认基础还不够扎实,也不意味着否定已经投入的努力。

为什么要写博客

写博客确实需要时间。除了完成代码,还要整理思路、检查表达、补充引用。不过,如果一个问题只能在刚解决时说清楚,过一段时间就完全忘记,那么这次学习留下的东西仍然有限。

我希望今后的博客至少记录三件事:解决了什么问题、为什么这样解决、还有什么没有弄懂。写作也能帮助我检查理解是否完整,因为“程序运行成功”和“能把实现思路解释清楚”之间,往往还有距离。

Git 和 GitHub 的学习也会纳入这一过程。

image

二、现状、经验和计划

1. 我距离合格的 IT 专业毕业生还有多远

技能 当前水平(暂估) 期末目标 提升办法
需求对齐与代码健康度 3 4 编码前列出功能要求和验收条件;结合 Java 课设练习模块划分,检查命名、重复逻辑和异常处理
验证深度与测试覆盖 2 4 为核心功能编写测试,覆盖正常输入、空值和边界情况;修复问题后保留对应测试
工程复现性与构建完整度 1 3 在 README 中写清环境、依赖和运行步骤,检查项目能否在新的环境中按说明运行
开源杠杆与社区贡献 1 3 练习使用 Git 管理代码,规范记录引用来源;遇到开源项目问题时,尝试提交包含复现步骤的反馈
手动掌控力与底层原理 3 5 独立完成 Java 基础编码和算法练习,结合计算机网络知识理解请求处理过程,练习依据日志和报错定位问题

这张表让我意识到,需要积累的不只是语言知识,还有把一个功能做完整、验证清楚并让别人能够运行的能力。本学期,我会通过代码、测试结果、运行说明和问题记录来检查进步,而不是只根据学习时长或代码行数判断自己是否达到了目标。

2. 我为什么要认真参与课程

我认真参与软件工程课程,是因为自己的目标已经逐渐清晰:毕业后从事后端开发。课堂提供了练习、反馈和纠错的机会,如果只在考试前记住几个概念,就很难把这些机会转化成能力。

自学很重要,但自学也可能留下自己察觉不到的盲区。课程中的作业、讨论和评价,可以让我发现“以为懂了”和“实际会做”之间的差距。认真上课对我而言,是主动利用这段有老师和同学共同参与的学习时间。

对于师生关系,我希望它更接近教练与训练者之间的关系。老师提供目标、方法和反馈,我负责投入时间、完成练习,并如实说明困难。这样的关系需要双方沟通,也需要学生承担自己的学习责任。

如果作业比较困难,我会选择向老师和同学请教、投入更多时间完成,同时先做必要的独立尝试:

  1. 重新阅读要求,明确输入、输出和验收条件。
  2. 把任务拆分成可以分别验证的小步骤。
  3. 查询相关资料,记录已经尝试的方法。
  4. 仍然无法解决时,带着具体问题请教。
  5. 解决后整理原因,避免下次重复卡在同一处。

如果预计无法按时完成,我也应该提前说明进展和困难,而不是等到截止时才放弃。

3. 参考资料与抄袭的边界

我理解的合理参考,是明确说明哪些内容来自他人、哪些是自己的工作,并在理解和遵守使用要求的基础上继续完成任务。

例如,博客中使用他人的观点,应标明出处;参考代码时,应说明来源和借鉴范围。把他人的实现稍微改名后作为自己的成果提交,即使能够运行,也不能说明自己完成了相应学习。

讨论思路与直接复制答案也有区别。和同学讨论问题之后,我仍然需要独立组织实现,并能够解释其中的逻辑。注明来源同样不能代替课程对独立完成的要求。

目前,我还没有确认本课程关于引用、协作和 AI 辅助的具体规定,也没有核实学校相关处理条款。这部分需要向老师确认。如果使用 AI 辅助整理文字或理解问题,我也应按照课程要求说明使用范围,并自行核对内容。

4. 面向后端就业的本学期安排

我目前选择毕业后就业,方向是后端开发。

我的基础条件是已经学习过 C 语言、Java 和几门计算机专业课程,可以在已有知识上继续深入。同时,我也清楚,自己的项目经验仅限于课设,对实际开发流程的认识还不够完整。

本学期,我希望围绕一个较明确的方向积累,而不是同时追逐很多技术名词:

  • 巩固 Java,优先解决常用知识掌握不牢的问题。
  • 结合课程任务,完成一个范围适当、能够解释清楚的后端实践。
  • 补充数据库和接口相关基础,把知识用到具体功能中。
  • 练习测试、Git 和文档编写,保留开发过程记录。
  • 整理课设与课程成果,准确描述自己的工作,不把练习包装成企业项目。

我暂时不把担任助教作为本学期目标。现阶段更重要的是先完成自己的学习任务;如果后续具备相应能力,也愿意帮助同学解决自己确实理解的问题。

5. 时间与代码量计划

我尚未准确统计过去的代码量,因此不填写未经核对的数字。后续会整理课程练习和课设,只统计自己编写的代码,并按要求取整到 100 行。

语言 累计手写代码量
C 语言 900
Java 4600

关于进入一流软件公司、互联网公司或人工智能公司需要多少代码量,我不认为可以给自己设置一个“达到就一定合格”的数字。对我而言,代码量适合用来检查是否持续练习,而不能代替对代码质量、基础知识和解决问题能力的判断。面向人工智能方向,还需要依据岗位补充相应知识,不能仅靠通用编程练习推断自己已经胜任。

如果从事高校教学科研,也应结合具体研究方向考虑实现、实验和结果复现能力,而不能把代码行数直接当作科研水平。

我的课程计划暂按 16 周、每周 10 小时安排,实际周数确认后再调整:

内容 每周计划时间
上课及课堂讨论 4 小时
编程与课程任务 3 小时
阅读和资料查阅 2 小时
博客整理与复盘 1 小时

我愿意比以往只围绕作业截止时间安排学习的方式投入更多,也会根据每周的实际完成情况调整任务量。

代码练习暂定每周约 200 行,16 周累计约 3,200 行,包含自己编写的功能代码和测试代码,不把自动生成或直接复制的内容计入。这个目标用于提醒自己保持实践,不为了凑行数增加重复代码。遇到需要集中调试或修改设计的一周,也要如实记录,不能仅凭新增行数判断是否有进展。

6. 用 WOOP 把计划落到行动上

Wish:我的愿望

课程结束时,能够完成一个范围清楚的后端实践,解释主要设计和实现,并留下代码、测试和文档记录。

Outcome:我希望得到的结果

面对一个小需求时,能够先分析和拆分,再逐步实现、验证;展示成果时,也能说明为什么这样设计,以及目前还有哪些限制。

Obstacles:可能的障碍

我需要重点防范的是拖延:任务刚布置时觉得时间还多,遇到陌生知识又迟迟不开始,最后只剩下赶工时间。这样即使交上作业,也很难认真测试和总结。

Plan:如果出现问题,我就采取行动

  • 如果任务看起来太大,我就先写出三个能够独立完成的小步骤,当天开始第一步。
  • 如果连续 30 分钟没有取得进展,我就整理报错、复现步骤和尝试结果,再针对性查资料或请教。
  • 如果学习时反复打开无关页面,我就关闭它们,把手机放到够不到的位置,先完成一个 25 分钟的专注时段。
  • 如果一周进度落后,我就在周末缩小下一周的任务范围,优先补齐核心功能和验证。
  • 如果功能已经能运行,我就继续检查边界情况,再决定是否可以提交。

三、带着问题学习,认真提供反馈

1. 关于《构建之法》的五个阅读问题

问题一:怎样判断测试用例已经足够?

对应章节:第 2 章,第 2.1 节“单元测试”。

这个问题来自单元测试与“功能是否完成”之间的关系。假设一个函数用于计算平均值,普通数组能够得到正确结果,并不意味着空数组、特殊数值等情况也得到了恰当处理。

我的初步想法是,测试应该围绕需求和风险选择,而不是只追求用例数量。但对于缺少经验的学生,怎样系统地发现值得测试的情况?当时间有限时,应该优先覆盖哪些风险?

我希望阅读后能找到一种可执行的方法,用来解释为什么选择这些测试,以及还有哪些未覆盖的情况。

问题二:怎样衡量进步,才不会只关注代码量?

对应章节:第 3 章,第 3.1 节“个人能力的衡量与发展”。

这次作业要求统计代码量,也让我产生了疑问:假设两个人实现相同功能,一个写了很多重复代码,另一个通过合理拆分减少了代码,不能仅凭行数判断谁的能力更强。

但如果完全不做数量记录,又可能把“看过教程”误当作“已经掌握”。

因此,我想知道,初学者应该怎样结合代码量、任务难度、独立完成程度和错误修复情况,评价自己的进步?哪些指标适合一个学期的学习,而不会反过来诱导自己凑数字?

问题三:水平差距较大时,怎样进行有效的结对编程?

对应章节:第 4 章,第 4.5 节“结对编程”。

我关心的是,结对过程中怎样保证两个人都在思考。假设一方明显更熟练,为了赶进度,可能很快变成一个人负责全部实现,另一个人只是观看。

轮换操作是否足以解决这个问题?如果操作较慢的一方还不理解当前设计,应当先暂停解释,还是让任务继续推进?

我的困惑在于,团队交付与个人学习有时会争夺时间。我希望了解怎样安排分工和交流,既推进任务,也避免参与流于形式。

问题四:课程小项目需要多少开发流程?

对应章节:第 5 章,第 5.3 节“开发流程”。

假设几名同学只有几周时间完成一个小项目,如果前期花大量时间写文档,可能影响实现;但如果完全没有需求记录和分工约定,也可能在后期发生理解不一致的问题。

我的初步观点是,小项目同样需要流程,但流程应当与规模相适应。问题在于,“适当简化”的边界怎么判断?

我希望阅读后能够说明:对于学生项目,哪些记录和检查不能省略,哪些可以采用更简单的形式,以及判断依据是什么。

问题五:改进已有功能,怎样证明有创新价值?

对应章节:第 16 章,第 16.1 节“创新的迷思”。

我想把这一问题和后端学习联系起来。假设一个项目没有增加新奇功能,只是减少了操作步骤、改善错误提示或缩短了等待时间,这样的改进应当怎样评价?

我的初步想法是,创新价值应当与实际问题及使用效果有关。但如果只有开发者觉得方便,缺少使用者反馈,这种判断又可能只是自我评价。

因此,我希望进一步理解:学生项目应该如何收集证据,说明改进确实解决了问题?在使用人数很少的情况下,可以采用怎样的验证方式?

2. 提问和反馈也需要练习

娄老师的《如何提问》是这次作业提供的提问参考。对我来说,需要落实的是让问题有足够的背景,使别人能够理解并判断。

以后提问时,我会尽量说清楚预期结果、实际现象、运行条件和已经尝试的方法。得到帮助后,也应反馈问题是否解决,并记录最终原因。

课程反馈方面,我选择认真、按时填写,有问题主动沟通。本学期至少提出三个经过思考的问题。反馈时尽量具体,例如说明哪个知识点缺少怎样的练习、哪个任务在哪一步遇到了困难,让意见能够用于改进教学。

四、前车之鉴:把别人的经历转化成自己的行动

1. 《一直在路上——记我从初中到本科近十年的学习成长历程》

文章链接:周见智:一直在路上

作者回顾了从阅读学习转向动手实践的过程,也反思了实习经历与基础能力之间的关系。这两点与我目前只有课设经验的状态很有联系。

我得到的启发是,学过的知识需要通过实践暴露问题。对我而言,可以先回头完善课设,尝试解释设计、补充异常处理,而不是急着在简历上增加项目名称。

对于实习,我希望把它当作接触实际工作的机会,同时继续补基础。今后评估一次实践的价值时,我会关注自己解决了什么问题、理解了什么,而不只看参与过多久。

2. 《老刘连载:编程十年》开篇

文章链接:Anders Liu:老刘连载——编程十年

作者在开篇解释,“编程十年”的起点,是能够把自己的想法写成程序,而不仅是实现书上的示例和习题。这里的感想针对开篇说明,不代表已经读完全部连载。

这给我的启发是,可以通过一个小需求检查自己是否真正会用所学知识。例如,离开现成步骤后,能否自己分析数据、拆分功能并验证结果?

我目前只做过课设,接下来希望在课程要求允许的范围内,多承担一些独立分析和设计。即使功能简单,也要能说清楚它解决了什么问题,以及实现中有哪些取舍。

posted @ 2026-09-06 12:58  cxjtc  阅读(8)  评论(0)    收藏  举报