第一周作业

这个作业属于哪个课程 软件工程
这个作业要求在哪里 第一次作业
这个作业的目标 建立博客并练习 Markdown 写作;介绍自己并反思自己的现状;制定本学期软件工程学习计划;阅读《构建之法》并提出有质量的问题;阅读前人经验,总结对自己有帮助的教训。

一、介绍自己

我小时候最初的兴趣爱好是绘画,接触过素描、水粉、水彩等。后来在初中报名参加了国画班,因此接触了书法,并坚持练习了三年。在这期间,我获得过一些校级奖项,也取得过少数区级奖项。
这段经历中,让我印象最深的是“用笔”的基础训练。不论是绘画还是书法,对手部稳定性、观察能力和重复练习都有很高要求。素描常常要求坐姿写实,惯用手要频繁进行同方向排线;书法在提按、顿挫和转折时,则要求手腕保持稳定。为了达到这些要求,老师常常会让学生通过惯用手负重的方式,在一段时间内反复练习基础动作。
我认为这是我的一个优势技能:我比较能接受长期、重复、看起来枯燥但有价值的基础训练。绘画和书法都不是短时间能看到明显成果的事情,很多时候需要先练习线条、结构、笔画,而不是一开始就追求完整作品。这个过程让我明白,能力的形成往往不是靠一时兴趣,而是靠持续练习和复盘。
这对我学习计算机也有帮助。编程和书法、绘画一样,也需要基本功。刚开始写代码时,很多内容看起来重复,比如语法、调试、命名、循环、函数拆分,但这些基础会影响之后能否写出更复杂、更稳定的程序。

二、现状、经验和计划

(1)为什么选择计算机专业

我选择计算机专业,主要是因为计算机能把许多抽象的想法转化为可以运行、可以展示、可以交互的具体成果。
相比一些更偏理论的学科,计算机专业让我感兴趣的一点是:写出的代码可以被运行,算法可以被验证,界面可以被看到,数据可以被分析和可视化。也就是说,学习过程不只是理解概念,还能把概念变成作品。
同时,计算机技术的应用范围很广,例如软件开发、数据分析、图像处理等。我希望自己不只是学习书本知识,也能通过项目实践,把知识真正用于解决问题。

(2)离合格 IT 专业毕业生的差距

我目前具备一定编程基础,但离合格的 IT 专业毕业生还有明显差距。
在专业知识方面,我对程序设计基础知识有初步了解,但很多内容还停留在“知道概念”的层面,缺少深入理解和熟练应用。
在技能方面,我可以完成一些C/Python的基础代码,但项目经验不足,对样本点的测试、需求分析、代码规范等工程化内容掌握不够。
在能力方面,我还需要提高自主学习能力、需求分析能力、长期坚持能力和团队沟通能力。尤其是遇到复杂问题时,我有时会倾向于先找现成答案,而不是系统分析问题来源,并且时刻记录每次项目进度状态。

(3)重要技能调查表

《软件工程师能力自我评估之硬方面》

技能 当前的水平 课程结束的水平
程序设计理解 2 5
C/Python 2 5
架构设计与模块化设计 1 5
处理大数据 2 5
自主学习能力 1 6
需求分析能力 1 6
报告项目状态 1 6

(4)博客阅读心得

a. 我认为来上课并认真参与,是因为大学课程提供的不只是知识点,还有学习节奏、同伴环境和外部约束。
如果完全靠自学,我可能也能找到视频、博客和资料,但很容易出现三个问题:第一,学习不系统;第二,遇到困难容易放弃;第三,缺少项目实践和反馈。课程的意义在于,它会要求我们按阶段完成任务,并让老师、助教和同学看到我们的过程。
我不认为“听过课”就等于“学会了”。计算机专业尤其需要动手实践。就像绘画和书法不能只看老师示范一样,编程也不能只看别人写代码。只有自己写、自己调试、自己踩坑,才可能真正掌握。
b. 我希望的师生关系
我在大学中体验到的师生关系,大多数还是“老师讲授,学生完成作业”的模式。这种模式能保证基本教学秩序,但如果学生只是被动听课,效果可能有限。
我希望这门课更像“教练和学员”的关系。老师不只是给出标准答案,而是通过任务、项目、反馈和要求,帮助学生逐步提高能力。学生也不应该只等老师安排,而要主动练习、提问和复盘。
如果老师布置的作业对我来说有些困难,我选择:(c)向老师和同学请教,花更多时间,把作业全部完成。原因在于困难本身就是学习的一部分。如果一遇到困难就放弃,那么课程结束后能力不会有实质变化。当然,向老师和同学请教不是让别人替我完成,而是在自己尝试、查资料、定位问题之后,请别人帮助我理解关键卡点。

(5)引用、参考与抄袭的区别

在学习和工作中,引用文献、参考资料、复用已有成果是正常现象,但它们和抄袭、剽窃有本质区别。
引用和参考的前提是:基于别人写的框架和各种模块上提供新的价值。实事求是地说明各种引用,是做学问,做项目的基础(《一门课程的底线》)。明确说明来源,尊重原作者贡献,并在理解的基础上形成自己的表达或进一步工作。比如写博客时参考了某篇文章,就应该贴出链接;在代码中使用了开源库,就要遵守许可证;如果借鉴了别人的思路,也应该说明来源。
抄袭和剽窃的问题在于:把别人的文字、代码、观点或成果当成自己的提交,故意隐藏来源,或者只做少量修改就声称是原创。这不仅违反课程要求,也会损害自己的学习过程。

(6)我对这门课的计划和期待

几年后,我目前更倾向于从事人工智能与视觉类学术类相关的工作。这个方向要求我既有扎实的编程能力,也要能理解需求、完成项目、与他人合作。
相比其他同学,我的优势可能是比较能接受长期基础训练,也比较重视作品的呈现效果。过去学习绘画和书法的经历,让我对“细节”“结构”和“反复修改”比较敏感,这对写代码和做项目也有帮助。
我的劣势是项目经验不足,代码量还不够,专业基础也不够扎实。特别是在算法、系统知识、工程规范方面,我还需要投入更多时间。
本学期我的规划是:

  1. 跟上软件工程课程节奏,按时完成每次博客和项目任务。
  2. 提高代码量,同时重视代码质量。
  3. 参与团队项目时,不只完成分配任务,也理解项目整体结构。
  4. 增加代码编写量和完成对应时间的文档写作。
  5. 每周至少复盘一次,记录本周学到了什么、哪里没做好。

我对课程的期待包括:

  1. 学会如何从需求出发设计软件。
  2. 学会团队项目中的分工、协作和沟通。
  3. 学会使用Git和GitHub管理代码。
  4. 提高文档写作能力和博客表达能力。
  5. 建立测试意识,理解软件质量的重要性。
  6. 通过课程项目积累一次较完整的软件开发经历。

我暂时不打算申请助教,因为目前我的专业能力还不够成熟。但如果以后我在这门课中学得比较扎实,也愿意帮助后来的同学解决基础问题。

我目前的代码量估计如下,后续会根据本地项目和GitHub仓库统计进行修正:

语言 代码量
C/C++ 1000 行
Python 1000 行
其他 0 行
合计 2000 行

我认为,从事高校教学科研工作,代码量也不是唯一标准,还需要数学基础、论文阅读能力、实验设计能力和科研表达能力。但在计算机相关方向,复现实验、处理数据、训练模型和实现原型系统也需要长期写代码,因此同样需要大量实践。
我打算平均每周拿出 8 到 10 小时用于这门课,包括上课、阅读、写博客、写代码和团队项目沟通。
如果前面说过要发奋赶上,我选择:(D)比以前课要多很多,直到达到目标为止。我计划在本课程结束时,总代码量达到5000行左右。我需要新增约3000行代码,每周大概要增加160行代码。这个目标不只追求数量,而是希望这些代码来自课程项目、练习和可解释的实践。

(7)WOOP 计划

Wish:确定愿望

我希望在本学期结束时,能够完整参与一个软件工程项目,掌握 Git 基本协作流程,写出结构清晰、可以运行、有文档说明的代码,并形成持续写博客和复盘的习惯。

Outcome:确定结果

如果这个愿望实现,我会对自己未来掌握更多计算机专业知识更有信心。我不再只是完成零散作业,而是能拿出一个较完整的项目,说明自己做了什么、为什么这样做、遇到了什么问题、如何解决。到那时,我在面对后续课程、项目实践和求职准备时,会更清楚自己的能力位置。

Obstacles:找出障碍

最可能妨碍我实现目标的因素是长期自律不足。
具体表现可能是:刚开始计划很积极,但一段时间后因为其他课程、娱乐、拖延或遇到Bug而放慢节奏。尤其是当任务没有立刻看到成果时,我可能会产生“先放一放”的想法,最后导致作业集中在截止前完成,质量下降。

Plan:风险防范计划

如果我发现自己连续两天没有推进软件工程课程任务,那么我就在第三天晚上固定拿出至少1小时,只做一件最小任务,例如提交一次代码、写一段博客或整理一个问题。
如果我在程序没有写完时开始分心上网,那么我就先离开电脑 一段时间,再回来把当前问题写成一句话,然后只解决这一个问题。
如果我遇到Bug超过30分钟仍无法解决,那么我就记录报错信息、已经尝试的方法和最小复现步骤,再向同学或老师请教。

三、提有质量的问题,给认真的反馈

(1)阅读《构建之法》后的 5 个问题

问题 1:第 1 章“概论”——软件工程是否会让小项目变得过于复杂?

我看到第 1 章中强调软件不只是程序,还包括需求、设计、测试、维护等内容。我的问题是:对于学生课程项目这种规模较小的软件,是否也需要完整套用软件工程流程?
我的困惑在于,如果项目很小,过多文档和流程可能会让开发效率下降;但如果完全不做需求分析和测试,项目又容易混乱。我目前的理解是,小项目也需要软件工程思想,但流程应该适当简化。比如可以不写很长的文档,但至少要有需求列表、任务分工、版本管理和测试记录。

问题 2:第 2 章“个人技术和流程”——记录时间真的能提高效率吗?

书中提到个人软件过程时,会强调估计时间、记录时间和分析时间。我想问:对于初学者来说,记录每个任务花了多久,真的能明显提高编程能力吗?
我以前写作业时,很少记录时间,只关心最后有没有完成。但这样的问题是,我常常不知道自己到底是卡在理解题目、查资料、写代码还是调试上。如果记录时间,可能能帮助我发现真正低效的环节。但我也担心记录过细会增加负担,导致坚持不下去。所以我的问题是:学生在刚开始实践 PSP 时,记录到什么粒度比较合适?

问题 3:第 4 章“两人合作”——结对编程适合所有任务吗?

书中介绍结对编程时,我理解它可以提高代码质量,也能让两个人互相学习。但我的问题是:结对编程是否适合所有类型的任务?
例如,对于需要讨论设计思路、排查复杂 Bug 的任务,两个人一起看代码可能很有效;但对于比较机械的页面调整、简单函数实现,两个人同时做是否会降低效率?我的看法是,结对编程更适合关键模块、复杂逻辑和代码审查,而不是所有任务都必须结对完成。

问题 4:第 8 章“需求分析”——用户自己也说不清需求时怎么办?

需求分析部分让我想到一个问题:如果用户一开始并不能清楚表达自己真正想要什么,开发者应该如何判断需求?
在很多实际场景中,用户可能只会描述一个模糊目标,例如“系统要方便”“界面要好看”“分析要准确”。这些话很难直接变成代码。我目前理解,开发者需要通过原型、访谈、场景分析和反复确认来逐渐明确需求。但我的困惑是:在课程项目时间有限的情况下,我们应该做到什么程度,才算需求分析足够?

问题 5:第 13 章“软件测试”——怎样判断测试已经足够?

书中关于测试的内容让我意识到,程序能运行一次并不代表没有问题。我的问题是:在实际项目中,怎样判断测试已经足够?
如果追求完全测试,时间可能不够;如果测试太少,又容易留下 Bug。我查阅资料后了解到,测试通常要结合风险、核心功能、边界情况和用户场景来设计。我的理解是,课程项目至少应该保证核心功能、常见输入、异常输入和关键边界情况都有测试。但我仍然想进一步学习:如何设计更系统的测试用例,而不是想到哪里测到哪里。

(2)关于认真反馈

对于课程反馈,我选择:(C)有问题就问,至少一学期提三个问题,认真按时填写反馈。如果自己确实有比较明确的建议,也会尽量做到(D)经常提问题,平时就给老师和助教反馈。
我认为反馈不是为了挑毛病,而是帮助课程变得更有效。学生如果完全不反馈,老师很难知道哪些地方大家真正理解了,哪些地方只是表面听懂。对我自己来说,提出问题也是整理思考的过程。
本学期我计划至少提出三个有质量的问题。每个问题尽量包含背景、我已经查过的资料、自己的理解和具体困惑,而不是只是什么都不会。

四、前车之鉴

(1) A:《辜新星:时刻调整方向 找到人生的蓝海》

这篇文章让我印象最深的是时间规划和方向调整。作者提到把事情分成A、B、C、D四类:紧迫且重要、重要不紧迫、紧迫不重要、不重要不紧迫。这个方法对我很有启发。
我平时容易把“紧急”误认为“重要”。例如作业快截止时才开始做,就会觉得它非常重要,但其实如果早点安排,它本来可以变成“重要但不紧急”的任务。软件工程课程作业周期比较长,如果总是拖到最后,就很难写出高质量博客和代码。
所以我打算把课程任务提前拆分:阅读、写问题、写代码、截图、整理博客分别安排时间,而不是最后一天一起完成。

(2) B:《刘帅:在失望中寻找希望》

这篇文章中“科班却没学懂计算机”的反思让我很有触动。计算机专业学生如果只满足于听课、考试和完成作业,可能成绩不差,但并不一定真正具备计算机能力。
我也担心自己出现类似问题。比如学过数据结构,并不代表真的能在项目中选择合适的数据结构;学过编程语言,也不代表能写出可维护的软件。很多知识如果不通过代码实践和项目训练,很容易停留在概念层面。
这篇文章提醒我,大学阶段不能只追求“课程过关”,还要主动建立自己的能力体系。对计算机专业来说,真正的学习应该包括阅读、实践、调试、总结和不断修正方向。

(3) I:《我的软件开发生涯 (10年开发经验总结和爆栈人生)》

这篇文章给我的感受是,软件开发的知识面比我想象中更宽。作者提到不同方向都有各自庞大的技术栈,例如系统开发、前端、数据库、.NET等。一个人不可能一开始掌握全部内容,但需要知道自己所处方向的大致地图。
这让我意识到,学习计算机不能只盯着眼前一门语言。语言只是工具,更重要的是理解开发流程、系统结构、数据存储、网络通信、测试维护等内容之间的关系。
对我目前来说,最现实的做法不是追求“全都会”,而是先打好基础:编程语言、数据结构、Git、数据库、Web基础和软件工程流程。等基础稳定后,再根据兴趣选择具体方向深入。

五、本次作业总结

通过这次作业,我对软件工程课程有了更具体的认识。它不是单纯要求写代码,而是要求我们建立工程意识:会表达、会计划、会提问、会协作、会复盘,也要尊重引用规范和学术诚信。
我目前还有很多不足,例如代码量不够、项目经验不足、Git 使用不熟练、测试意识较弱。但这些不足也让我更清楚本学期应该努力的方向。
接下来,我会坚持使用博客记录学习过程,使用GitHub管理代码,并在课程项目中尽量主动承担任务。希望到课程结束时,我不仅能完成作业,也能真正提高自己的软件工程能力。

六、后台博文编辑界面的截图

a83cec11b9dd1ca45e89b47c61899c17

七、GitHub仓库

21894c28ead46e08e3a7cbcb591c7fe0
GitHub地址:https://github.com/Siruetto/liuhaobin.git

posted @ 2026-09-04 15:23  刘浩彬  阅读(8)  评论(0)    收藏  举报