软件工程第一次个人作业——从自我认知出发,在实践中成长
| 这个作业属于哪个课程 | H202601软件工程与软件工程实践 |
|---|---|
| 这个作业要求在哪里 | 软件工程第一次个人作业 |
| 这个作业目标 | 1. 完成GitHub与博客园账号注册、班级加入,搭建个人技术展示平台;2. 学习调用Hugging Face API并结合前端实现AI图像生成交互;3. 搭建GitHub个人主页,梳理个人技能与三年发展规划;4. 通过随笔进行深度自我评估,明确技术方向、代码量目标与课程学习期待 |
| 学号 | 102401415 |
一、Hugging Face API 调用(任务2)
1.1 账号注册与API获取
在 Hugging Face 官网注册账号后,进入 Settings → Access Tokens 页面创建一个具有读取权限的 API Token,用于后续模型调用时的身份验证。
1.2 模型选择与调用
使用模型:XLabs-AI/flux-RealismLora
通过 Hugging Face Inference API 发送 POST 请求,在请求头中携带 Authorization: Bearer <API_TOKEN>,请求体中传入提示词,模型返回生成的图片二进制数据。核心调用代码如下:
import requests
API_URL = "https://api-inference.huggingface.co/models/XLabs-AI/flux-RealismLora"
headers = {"Authorization": "Bearer 你的API_TOKEN"}
def query(prompt):
response = requests.post(API_URL, headers=headers, json={"inputs": prompt})
return response.content
image_bytes = query("一只坐在窗台上的橘猫,午后阳光透过百叶窗洒在木地板上,真实摄影风格")
with open("output.png", "wb") as f:
f.write(image_bytes)
调用成功后 API 返回 HTTP 200 状态码,响应体为生成的 PNG 图片数据。
1.3 前端交互页面
使用 HTML + CSS + JavaScript 搭建交互页面:用户在输入框中填写提示词,点击"生成图片"按钮后,前端通过 fetch 调用后端接口,后端再转发请求到 Hugging Face API,生成完成后将图片展示在页面右侧。

1.4 提示词设计思路
初始提示词较为简单(如"一只猫"),生成的图片偏插画风格、真实感不足。经过迭代逐步加入以下要素:
- 主体细节:明确物种、姿态(如"坐在窗台上的橘猫")
- 环境与光线:加入场景和光照描述(如"午后阳光透过百叶窗")
- 风格限定:明确"真实摄影风格""高细节""8k"等关键词
最终提示词:一只坐在窗台上的橘猫,午后阳光透过百叶窗洒在木地板上,真实摄影风格,高细节,8k分辨率
1.5 心得体会
通过本次实践,我体会到大模型 API 集成的便捷性——只需几行代码就能调用强大的图像生成能力。同时也认识到提示词工程的重要性:同样的模型,不同提示词会产生差异巨大的结果。在前后端联调中复习了 HTTP 请求、异步处理和图片数据流转的知识。不足之处是免费 API 调用次数有限、响应较慢,后续可考虑本地部署模型提升体验。
二、GitHub 个人主页搭建(任务3)
2.1 方案选择
我选择了方案一:创建个人资料自述文件(Profile README)。
原因:Profile README 是 GitHub 官方支持的个人主页展示方式,只需创建一个与自己 ID 同名的仓库并在根目录放置 README.md,GitHub 便会自动将其渲染在个人主页顶部,无需额外配置 GitHub Pages,简洁高效且维护成本低。
2.2 仓库创建
- 仓库名:
Lin-fzu(与 GitHub ID 一致) - 仓库地址:https://github.com/Lin-fzu/Lin-fzu
- 个人主页:https://github.com/Lin-fzu
2.3 主页内容结构
README 包含以下板块:
- 个人简介:姓名、学校、专业、年级,以及兴趣爱好(游戏开发)
- 技能与技术栈:编程语言(C#/Python/C++)、Unity 开发能力、编程高级特性(设计模式、反射、泛型)
- 项目展示:Unity 游戏项目介绍
- 自我评估:已掌握能力、感兴趣的技术方向、最希望学习的知识
- 三年发展规划:大三→大四→毕业后一年的分阶段目标,含就业与考研双路径
- 联系方式
2.4 个人主页截图

三、技能树梳理与自我评估
3.1 已具备的专业知识与能力
能力 A:C# 与 Unity 游戏开发
- 熟练使用 C# 进行面向对象编程,掌握 Unity 2022 引擎的基本操作
- 具备完整的 Unity 项目开发经验,包括资源包导入、物体控制、UI 适配(Canvas Scaler)、数据持久化(PlayerPrefs)
- 能够独立解决开发中的实际问题,如资源格式异常(Invalid Texture)、代码逻辑漏洞等
能力 B:C# 高级特性应用
- 理解并能实战应用单例模式、委托(Invoke)、事件机制等设计模式
- 掌握反射(FieldInfo)、泛型(Type)等高级语言特性
- 具备通过错误日志精准定位问题根源的调试能力
能力 C:编程基础与算法
- 掌握数据结构与算法基础知识
- 了解 Python 脚本编写与数据处理
- 具备 C/C++ 基础语法能力
能力 D:自主学习与实践能力
- 能够通过官方文档、技术社区自主学习新技术
- 有网文创作经验,具备较好的文字表达和逻辑组织能力
- 喜欢动手实践,正在用 Unity 制作魔改版游戏项目
3.2 感兴趣的技术方向
- 游戏客户端开发:Unity / Unreal Engine 方向,希望深入游戏引擎底层
- 游戏架构与性能优化:关注大型游戏项目的代码架构设计和运行效率优化
- 计算机图形学:对 Shader 编程、渲染管线有浓厚兴趣
- 网络游戏同步技术:对多人联机的状态同步/帧同步机制感到好奇
3.3 还欠缺的能力
能力缺口 A:软件工程规范与团队协作
- 缺乏大型团队项目的开发经验,对代码规范、Code Review、分支管理等工程实践了解不足
- Git 使用仅停留在基础层面,对复杂的分支策略和协作流程不熟悉
能力缺口 B:计算机系统底层知识
- 操作系统、计算机网络、数据库等核心课程知识不够扎实
- 对程序的内存管理、性能瓶颈分析缺乏系统认知
能力缺口 C:Web 与全栈开发
- 几乎没有 Web 前端/后端开发经验
- 不熟悉 HTTP 协议、RESTful API 设计、数据库操作等常见后端技能
能力缺口 D:测试与质量保障
- 没有编写单元测试、集成测试的习惯
- 对软件测试方法论、持续集成/持续部署(CI/CD)缺乏了解
能力缺口 E:算法与数据结构深度
- 算法刷题量不足,面对中等及以上难度的算法题时思路不够清晰
- 对常见算法范式(动态规划、图论、贪心等)的掌握不够系统
四、代码量统计与目标
4.1 当前代码量
截至目前,我的累计代码量约为 20000 行。
主要来源:
- Unity 游戏项目:约 C# 3000-5000代码
- 课程作业与实验:约1000-2000行
- 日常练习与小项目:约500行
说明:代码量统计包含 C#、Python、C/C++ 等所有语言的有效代码行,不含自动生成的配置文件和空行。
4.2 本学期目标代码量
完成本学期软件工程课程后,希望累计代码量达到 【待补充:例如 20000 行】。
增量目标分解:
- 课程项目(团队项目 + 个人作业):约 8000-10000 行
- Unity 个人项目持续迭代:约 3000-5000 行
- 算法刷题练习:约 1000-2000 行
- 其他技术学习与实践:约 1000-2000 行
理由:代码量不是唯一目标,但足够的编码实践是提升编程熟练度的基础。本学期有软件工程课程的团队项目作为驱动,加上个人 Unity 项目的持续开发,有望实现代码量的显著增长,同时注重代码质量而非单纯追求行数。
五、本课程最期待学习的知识与收获
5.1 最期待学习的知识
- 软件需求分析与系统设计:学习如何从模糊的需求中提取明确的功能规格,如何进行系统架构设计、模块划分和接口定义
- 团队协作与项目管理:学习 Git 分支策略、敏捷开发流程、任务分配与进度管理,体验真实的团队软件开发流程
- 软件测试与质量保障:学习单元测试、集成测试的编写方法,了解测试驱动开发(TDD)的理念
- 软件架构与设计模式:深入理解常见设计模式在实际项目中的应用场景,学习如何设计可扩展、可维护的软件架构
5.2 希望获得的收获
- 工程能力提升:从"能写出能跑的代码"进化到"能写出可维护、可扩展、符合工程规范的代码"
- 团队协作经验:通过团队项目学会与他人协作开发,掌握代码合并、冲突解决、Code Review 等实战技能
- 项目管理意识:学会合理规划项目进度、控制风险、保证交付质量
- 职业素养养成:培养文档编写、技术分享、问题沟通等软件工程师必备的软技能
- 为就业做准备:将课程项目转化为作品集的一部分,为明年的秋招积累实战经验
六、AI 工具生成的软件工程课程学习指南及分析
6.1 AI 生成的学习指南
以下内容由 AI 工具(DeepSeek)生成,提示词为:"请为一名计算机科学与技术专业大三学生生成一份简要的软件工程课程学习指南,包括学习重点、实践建议、推荐资源和能力培养方向。"
《软件工程课程学习指南》
一、学习重点
- 软件生命周期:理解需求分析、系统设计、编码实现、测试验证、部署维护各阶段的核心任务与交付物
- 需求工程:掌握用例图、用户故事、需求规格说明书的编写方法
- 系统设计:学习 UML 建模(类图、时序图、活动图)、架构设计原则(SOLID)、常见设计模式
- 软件测试:理解黑盒/白盒测试、单元测试/集成测试/系统测试的区别,掌握测试用例设计方法
- 项目管理:了解敏捷开发(Scrum)、瀑布模型、甘特图、燃尽图等项目管理工具与方法
二、实践建议
- 积极参与团队项目:将课程中学到的理论立即应用到团队项目中,在实践中理解软件工程的价值
- 坚持写技术文档:每次作业和项目都编写规范的 README、设计文档和测试报告
- 使用版本控制:全程使用 Git 管理代码,练习分支管理、提交规范和 Pull Request 流程
- 编写测试代码:养成编写单元测试的习惯,尝试测试驱动开发(TDD)
- 参与 Code Review:主动阅读队友代码,提出改进建议,也虚心接受他人的 review
三、推荐资源
- 书籍:《代码大全》《设计模式:可复用面向对象软件的基础》《重构:改善既有代码的设计》
- 在线课程:Coursera《Software Engineering》、中国大学MOOC《软件工程》
- 工具:Git、GitHub、Jira/Trello、JUnit/Pytest、Draw.io/UMLet
- 社区:Stack Overflow、GitHub、掘金、博客园
四、能力培养方向
- 抽象建模能力:能够将复杂的现实问题抽象为软件模型
- 团队协作能力:能够在团队中有效沟通、分工协作、解决冲突
- 质量意识:始终关注代码质量、可维护性和可扩展性
- 工程思维:从工程角度思考问题,权衡时间、成本、质量之间的关系
- 持续学习能力:关注行业最新技术和方法论,保持技术敏感度
6.2 对 AI 生成指南的分析
合理之处:
- 学习重点覆盖全面:指南涵盖了软件生命周期、需求、设计、测试、项目管理五大核心模块,与高校软件工程课程的教学大纲基本吻合,没有遗漏关键知识点
- 实践建议具体可操作:"坚持写技术文档""使用版本控制""编写测试代码"等建议都是软件工程课程中老师反复强调的重点,具有很强的可执行性
- 推荐资源经典实用:《代码大全》《设计模式》《重构》三本书是软件工程领域的经典著作,推荐的工具(Git、JUnit、UML工具)也是行业标准
- 能力培养方向准确:抽象建模、团队协作、质量意识、工程思维、持续学习这五项能力确实是软件工程师的核心素养
不足之处:
- 缺乏针对性:指南是通用版本,没有结合我个人"游戏开发方向"的特点。对于游戏开发者来说,软件工程实践有其特殊性(如游戏循环架构、性能优先的设计权衡、快速迭代的开发模式),指南未能涉及
- 深度不足:对每个知识点都只是点到为止,没有给出具体的学习路径和进阶方向。例如"设计模式"只列了书名,没有说明哪些模式最常用、应该按什么顺序学习
- 忽视了个人项目的重要性:指南强调团队项目,但对于我这种以个人 Unity 项目为主要实践载体的学生来说,如何在个人项目中应用软件工程实践(如个人代码规范、个人版本管理、个人文档习惯)缺乏指导
- 缺少评估与反馈机制:指南没有说明如何检验学习效果,如何判断自己是否真正掌握了某个知识点
对我的帮助:
- 框架价值:指南提供了一个清晰的学习框架,让我对软件工程课程的全貌有了整体认知,可以据此制定自己的学习计划
- 提醒作用:"编写测试代码""参与 Code Review"等建议是我之前容易忽视的,指南起到了很好的提醒作用
- 资源参考:推荐的书籍和工具可以作为后续深入学习的参考清单
总结:这份 AI 生成的指南作为入门级的学习框架是合格的,覆盖面广、建议实用。但它无法替代老师的课堂教学和个人的针对性学习计划。我会以这份指南为基础框架,结合自己游戏开发的方向和实际情况,制定更具针对性的学习路径。
七、总结
通过这次作业,我完成了 GitHub 个人主页的搭建,对自己的技能树进行了系统梳理,也更加清晰地认识到了自己的优势与不足。软件工程不仅是写代码,更是一套关于如何高效、高质量地构建软件系统的方法论。我期待在本学期的课程中,通过团队项目和持续实践,真正将软件工程的理念内化到自己的开发习惯中。
"知道自己会什么,也知道自己不会什么,是成长的第一步。"

浙公网安备 33010602011771号