assignment 1
第一周作业:认识自己,规划未来的软件工程学习之路
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS/ |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS/homework/15692 |
| 这个作业的目标 | 认识自己的专业学习现状,明确软件工程课程的学习目标,建立 GitHub 与技术博客,并通过阅读、思考和实践制定本学期的学习计划 |
博客昵称:wenqian1
博客地址:https://www.cnblogs.com/wenqianlog
Github昵称:w7885
GitHub仓库地址:https://github.com/w7885/w7885

Markdown 编辑器截图

一、自我介绍
大家好,我是广东工业大学计算机科学与技术专业的温美如。
闪光点嘛,其实我并不太喜欢直接列出几个标签。我一直觉得,每个人都有自己的闪光点,这并不是一句空话。就像每个人都有自己的性格,而且独一无二。内向并不一定比外向不好,内向的人或许更加沉稳,能够从自身获取能量,拥有强大自我疗愈能力;外向的人则更加活泼开朗,他们的乐观和从容也往往能够影响身边的人,甚至主导社交氛围。
我喜欢运动,也喜欢阅读一些感兴趣的书籍。平时喜欢打羽毛球、骑行、爬山、旅游和城市漫步,很喜欢接触自然。我喜欢天边的晚霞,喜欢傍晚热闹的小巷,喜欢下雨天的宿舍,也喜欢市井的早春晴朗。这些事情看起来都很普通,但我觉得它们本身就是生活中值得享受的部分。
惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭。是造物者之无尽藏也,而吾与子之所共适。
人生归根结底只是一场旅途,我要做到的只是遵循自己的本心。
尽情享受过程,冒险愉快!
二、现状、经验和计划
1. 为什么选择计算机专业,距离一个合格的IT专业毕业生还有多远
我当初选择计算机科学与技术专业,基本完全基于兴趣。不过这里的“兴趣”,更多是一种好奇心。在进入大学之前,我其实从来没有系统接触过计算机相关知识,也没有太多计算机方面的动手实践,高中阶段也没有真正系统地学习过信息技术课程。但在所有工科专业里面,我只对计算机感兴趣,对其他专业并没有特别强烈的兴趣,广东工业大学计算机是我的第一志愿。虽然当时一共填报了 6 个志愿,但实际上我从来没有认真考虑过进入其他专业,因为对我而言,计算机是我真正想尝试的方向。
进入大学以后,我才慢慢发现,选择计算机专业只是第一步,真正困难的是如何成为一个合格的计算机专业学生。从专业知识、技能和能力三个方面来看,我认为自己目前还有比较明显的差距。我的课内基础并不算扎实,过去的学习过程中没有把大量精力放在课内知识体系的建立上,因此很多知识属于听过、知道基本概念,但还没有真正形成系统性的理解。专业技能方面的问题更加明显,很多东西处于知道应该怎么做,但是自己真正做过的次数不够多的状态,例如编程、Debug、项目部署、软件测试、Git、工程化开发等,我都有一定接触,但是距离熟练使用还有比较大的差距。
相比专业知识和技能,我认为自己在项目管理、整体规划、发现问题等方面具有一定优势。我比较喜欢从整体角度思考问题,也比较容易发现项目中的一些细节问题,但这也带来了另一个问题:有时候想得很多,真正动手却不够多。我会比较容易追求做得足够好,结果反而容易在真正开始行动之前思考太久。所以我目前最需要解决的问题,是:把想法真正转化成代码,把知道转化成做到。
2. 我的技能调查与提升计划
| 技能 | 目前水平 | 课程结束目标 | 提升方式 |
|---|---|---|---|
| 手动掌控力与底层原理 | 3 | 7 | 系统学习一门主要编程语言;每天进行基础代码练习;尝试脱离 AI 独立完成小功能;学习 SQL、HTTP、API、数据库等基础知识;遇到 AI 生成的代码时自己逐行理解;整理常见报错和解决方法 |
| AI 辅助开发能力 | 4 | 8 | 使用 Cursor、Claude Code 等 AI 编程工具;学习先拆解需求再向 AI 提问;练习 Spec → Code 的开发流程;完成 2~3 个 Vibe Coding 项目;记录优秀 Prompt 和开发流程;主动检查和修改 AI 生成的代码 |
| 需求分析与规格定义能力 | 5 | 8 | 每个项目开发前先写 PRD;学习用户故事和使用场景;将模糊需求拆成具体功能;为功能定义验收标准;学习 API 和数据结构设计;通过真实用户反馈不断修改需求 |
| 程序理解、Debug 与问题解决能力 | 3 | 7 | 主动阅读优秀开源项目;遇到 Bug 时先自己定位原因;学习使用浏览器开发者工具;学习日志分析;建立自己的 Debug 流程;每解决一个 Bug 都记录原因和解决方法 |
| 软件架构与模块化设计能力 | 2 | 6 | 学习前后端基本架构;学习模块化和接口设计;拆解优秀开源项目的目录结构;每次开发前画简单架构图;让 AI 解释不同架构方案的优缺点;对以前的项目进行一次重构 |
| 测试与代码质量能力 | 2 | 6 | 学习单元测试基本概念;为自己的项目编写测试;学习边界条件测试;使用 ESLint 等工具进行代码检查;建立提交前检查清单;让 AI 帮助生成测试用例,然后自己验证 |
| 工程交付与项目复现能力 | 3 | 7 | 使用 Git/GitHub 管理项目;规范 Commit;为项目编写 README;学习环境变量和依赖管理;尝试把项目部署到云端;让其他人按照 README 从零运行自己的项目 |
3. 为什么要来上课并且认真参与?
阅读 Scalers 的文章之后,我比较认同其中一个观点:认真听讲本身确实是一种能力。 但我认为这个观点应该存在一个前提,那就是我需要认真学习这门课程。因为如果一个人根本不需要某门课程的知识,也没有兴趣或者实际需求,那么他没有认真听课,并不能简单证明他不具备认真听讲的能力。例如,一个学生正在学习自己的专业课程,同时已经明确了未来的发展方向,那么他当然会根据自己的发展需要判断哪些课程需要投入更多精力。因此,我并不完全认同“大学生没有能力判断一门课有没有用”这种绝对化的说法。
在我看来,判断一门课程对自己有没有价值本身并没有那么重要,真正重要的是自己是否清楚为什么学习它。如果我需要这门课程的知识,那么我应该认真学习;如果这门课程能够帮助我建立长期能力,那么我也应该认真学习;甚至有时候,一门课当前看起来没有直接用途,但它培养的思维方式、基础能力和知识结构可能会在未来产生价值。因此,对于这门软件工程课,我现在的态度很明确:我希望认真参与。 因为软件工程并不仅仅是学习某一种编程语言,而是学习如何把一个软件真正做出来。
4. 我体验过的师生关系,以及我希望的师生关系
我在大学中体会过的师生关系,有时候比较像“餐馆和食客”,或者“路人甲和路人乙”。老师完成教学任务,学生完成学习任务,双方之间存在一种相对明确的边界。而我比较希望这门课能够建立一种健身教练和健身学员的关系。
我觉得这个比喻非常贴切。健身学员首先应该拥有自己的目标,例如想减脂、增肌或者提高身体素质,然后主动去训练。老师则更像教练,会根据学生目前的能力、训练情况和实际表现不断调整训练方式,而学生真正的成长,需要依靠自己的主动训练。这种关系并不是老师单方面教,而是老师提供方法和反馈,学生主动训练,双方共同推动成长。
如果老师布置的作业对我来说有困难,我会选择 E :首先请教周围的同学,看看他们是否能够提供经验;再使用 AI 工具帮助我理解问题;然后通过搜索引擎和互联网资料寻找解决方法;自己尝试解决并验证;如果仍然无法解决,再向老师或者助教请教。我希望自己不是遇到困难就直接放弃,而是先想办法解决,再寻求帮助。
5. 关于引用、抄袭和剽窃
之前我对“抄袭”和“剽窃”的理解并不准确。现在我认为,判断一个行为是否属于抄袭或剽窃,关键并不只是看有没有产生金钱、名利等新的价值,而是要看是否未经合理说明和授权,把他人的成果当成自己的成果使用或表达。
例如,在写博客、论文或者开发软件时,可以参考别人的资料、开源项目和代码,但合理的参考应该做到明确资料来源、尊重原作者、遵守许可证要求、对自己真正完成的部分负责,并且不能把他人的成果冒充成自己的原创成果。我认为真正的学习并不是完全不看别人,而是站在别人的成果上继续学习和创造,同时清楚地知道哪些是别人的成果,哪些是自己的工作。 这也是软件工程和科研都非常重要的一种基本素养。
三、我未来的选择
我个人并不想走学术研究方向,而是更倾向于就业。当然,不同的发展道路并不存在绝对意义上的高低之分。有人适合学术研究,有人适合软件开发,有人适合产品工作,也有人会选择其他完全不同的人生道路。对我而言,我更希望遵循自己的本心,做出自己真正想做的选择。
目前我比较感兴趣的是软件开发、项目实践以及新技术应用等方向。这也意味着,我不能只停留在知道概念的层面,而应该真正理解技术并具备一定的动手能力。我希望自己能够同时培养产品思维、技术能力、编程能力、软件工程能力和项目落地能力,在学习理论知识的同时,通过实际项目不断验证自己的能力。
我认为自己的优势主要有三个方面。第一,能够保证完成质量和效率,在完成和管理项目的时候,通常会比较关注整体规划和最终结果。第二,擅长发现细节问题,会比较容易注意到一些微小的问题。使成果更加细致。第三,我喜欢从整体角度思考问题,面对一个项目时,我比较习惯先思考整体结构,再考虑具体执行。
我的问题也非常明显:想法很多,但是行动力还不够。 有时候会因为追求完美,导致真正开始行动的时间被不断推迟。另外,我目前的编程能力也比较弱。在现在的技术环境下,AI 确实降低了很多编程工作的门槛,但是这并不意味着计算机专业学生可以完全不会代码。相反,我认为越是能够借助 AI 写代码,越需要知道 AI 写出来的代码到底在做什么。
如果一个人只会让 AI 生成代码,却不知道如何 Debug、测试、修改和维护,那么他的能力仍然是有限的。因此,我希望通过这门软件工程课,真正提高自己的工程实践能力。
四、我对这门软件工程课的期待
第一节课上,我印象比较深的是一个问题:怎么才能证明自己真正学会了软件工程? 我认为是能够真正研发出一个符合用户需求的软件。
我理解的软件工程能力至少应该包括:能够分析用户需求,能够进行项目规划,能够完成软件设计,能够进行编码,能够进行测试和 Debug,能够按照计划推进项目,能够通过 Git 等工具进行版本管理,能够公开发布,能够获得真实用户,能够通过数据判断产品是否有效,并且能够持续维护和迭代。而不是临时熬夜、胡乱拼凑、依赖某一个“大牛”完成项目,最后勉强交付。
我希望这门课结束之后,我能够真正完成一个从 0 到 1 的项目,不仅仅是把产品做出来,而是能够经历需求分析 → 产品设计 → 技术设计 → 编码 → 测试 → Debug → 发布 → 用户反馈 → 迭代 → 维护这一完整的软件生命周期。
我不打算申请成为助教,主要原因是个人时间安排方面的考虑。我目前还需要投入时间补充自己的编程和技术能力,因此担心自己的时间分配不合理,反而影响班级和老师的工作进度。
五、我的代码量现状
目前我的代码量还比较少,主要来自课程学习、编程练习以及小型项目。
| 编程语言 | 当前累计代码量 |
|---|---|
| Python | 2000 行 |
| Java | 1500 行 |
| HTML / CSS / JavaScript | 2000 行 |
| SQL 及其他 | 500 行 |
| 合计 | 6000 行 |
我目前的代码经验主要集中在学习和小型项目阶段,距离能够独立完成较大型软件系统还有比较大的差距。我认为,代码量本身不能完全代表编程能力。一个人写了十万行重复、低质量的代码,并不意味着他的能力一定比写了两万行高质量代码的人强。但是,足够数量的有效代码实践,确实是建立编程和工程能力的重要基础。 因此,我不会单纯追求代码行数,而希望以后写出的代码能够包含需求分析、设计、编码、调试、测试、发布和维护。如果以就业为目标,我希望大学期间能够逐渐积累 5 万~10 万行左右的有效代码实践。如果未来从事高校教学科研工作,我认为至少也应该拥有 3 万~5 万行左右的有效代码实践作为基础。如果研究方向本身偏人工智能系统、软件工程、计算机视觉、自然语言处理等,那么代码实践量还应该更高。不过,对于科研人员而言,比单纯的代码量更加重要的能力是快速阅读代码、理解算法、复现实验、修改开源项目、分析实验结果和独立解决问题。因此,我未来更希望追求的是有效代码量和工程经验,而不是单纯追求数字。
六、我的课程时间与代码计划
过去的学习过程中,我确实有一段时间没有充分利用大学阶段的时间。现在我希望重新调整自己的状态。如果按照选项选择,我的答案是:D:比以前的课要多很多,直到达到目标为止。
我计划平均每周投入 10~12小时用于软件工程课程,包括课堂学习、阅读教材和资料、完成课程作业、编写代码、Debug、Git/GitHub 实践、项目开发和博客总结。相比过去,我希望自己真正把这门课当成一次工程实践,而不仅仅是一门需要完成作业的课程。
目前代码量约为 6000行,我计划在课程结束时达到 15000行,也就是说课程期间计划新增 9500行。按照整个课程周期进行平均,我计划每周完成约 600 行有效代码。当然,这里的600行不是为了凑数字。如果某一周代码量只有400行,但完成了一个完整功能,我不会为了达到600行而故意增加无意义代码。我的核心目标仍然是:通过代码量积累,形成真正的软件开发能力。
七、WOOP:我的软件工程课程计划
Wish:我的愿望
我希望在这门软件工程课程结束之后,真正具备独立完成一个小型软件项目的能力。具体来说,我希望能够完成需求分析 → 产品设计 → 技术设计 → 编码 → 测试 → Debug → Git 管理 → 部署发布 → 用户反馈 → 迭代维护这一整套流程。最终不只是交上一个作业,而是真正拥有一个可以运行、可以展示、甚至能够被真实用户使用的项目。
Outcome:如果愿望实现,最好的结果是什么?
如果这个目标能够实现,我希望自己能够真正完成一次从 0 到 1 的项目落地。到那个时候,我不再只是想做一个产品,而是可以说,这是我自己从需求分析开始,一步一步设计、开发、测试、部署并发布出来的产品。我希望自己能够真正理解一个软件是如何从一个想法变成实际产品的。如果能够进一步获得真实用户使用,并根据用户反馈继续迭代,那么这对我而言会是非常有意义的一次经历,因为这意味着我不仅学习了软件工程知识,也真正完成了一次工程实践。
Obstacles:可能遇到的障碍
我认为最可能导致我失败的因素,其实不是外部环境,而是我自己。更准确地说,是决心不够,以及想得太多、做得太少。我有时候会对项目有比较高的期待,希望界面足够漂亮,希望功能足够完整,希望架构足够合理,希望最终结果足够好,但问题在于项目还没有开始,就已经开始考虑如何做到最好,这很容易导致行动被拖延。
除此之外,我还可能遇到编程基础不足、遇到 Bug 后容易产生挫败感、AI 生成的代码看起来可以运行但自己并没有真正理解、同时有其他课程和事情导致时间被分散,以及对项目要求过高导致迟迟无法完成第一版等问题。
Plan:If-Then 风险防范计划
我不太喜欢把自己的学习计划规定成每天必须完成多少,因为这种方式对我来说比较容易产生压力。相比每天固定任务,我更喜欢以周、月或者整个学期作为周期。因此,我会采用比较灵活的 If-Then 计划:如果我因为追求完美而迟迟不开始,那么就先完成一个最低可用版本,不要求第一次就做到最好;如果我遇到 Bug,不知道怎么解决,那么就先自己分析错误信息和可能原因,再使用 AI 或搜索工具辅助,最后记录解决过程;如果我发现自己越来越依赖 AI 写代码,那么就主动关闭 AI,尝试独立完成一部分功能,并对 AI 生成的代码逐行理解;如果某一周因为其他课程导致时间不足,那么不要求每天补齐任务,而是在下一周重新调整整体计划,保证月度和学期目标不被打乱;如果我因为项目太难而产生放弃的想法,那么就先把目标拆小,完成一个最简单的可运行版本,而不是直接放弃整个项目。
八、提有质量的问题,给认真的反馈
1. 《构建之法》第 1 章:个人能力和团队能力哪个更加重要?
阅读软件工程相关内容后,我产生了一个问题:如果一个人的个人技术能力非常强,但团队协作能力比较弱,他是否能够成为一个优秀的软件工程师? 我过去比较容易把编程能力理解为一个人的核心竞争力。例如,一个人能够写出复杂的程序、解决困难的算法问题,那么我会自然认为他的技术能力很强。但是软件工程和个人编程练习并不完全一样,一个真正的软件项目往往需要多人共同参与,涉及产品、开发、测试、设计、运维等多个角色。因此,一个人即使能够独立写出大量代码,如果无法和其他成员沟通,也无法理解需求,更无法让自己的代码被其他人维护,那么这种强可能也存在局限。我的困惑是:在软件工程中,个人技术能力和团队协作能力究竟应该如何平衡? 如果必须进行选择,我认为随着项目规模扩大,团队协作能力的重要性会不断提高。
2. 《构建之法》第 2 章:代码质量应该如何衡量?
我比较关注一个问题:什么样的代码才算好代码? 很多时候我们会使用代码是否简洁、运行速度是否快、结构是否清晰等标准进行判断。但如果一个程序运行速度很快,却非常难以维护,它是否仍然是一份优秀的代码?反过来,如果一个程序性能不是最优,但是结构清晰、容易理解、容易测试和修改,它是否更符合软件工程的要求,这让我想到我自己的学习经历。过去我写代码时,更多关注的是能不能运行,而现在我开始意识到,软件工程关注的其实还有以后还能不能改。所以我认为代码质量不能只看当前能不能运行,还应该考虑可读性、可维护性、可测试性、可扩展性和团队协作效率。
3. 《构建之法》第 3 章:编程经验是否能够完全代表能力?
我目前的代码量并不算多,因此我比较关注一个问题:代码量究竟应该如何衡量一个程序员的能力? 如果一个人写过 10 万行代码,但大部分代码都是重复性的,那么这 10 万行是否真的有意义?反过来,一个人可能只写过 2 万行代码,但是这些代码来自真实项目,并且经历过需求分析、Debug、测试、部署和维护,那么他的工程能力是否可能更强?我认为答案应该是肯定的。因此,我虽然给自己制定了课程结束 15000 行代码的目标,但我并不希望为了完成数字而写代码,我更希望这些代码来自真实项目和真实问题。所以对我而言:代码量是衡量实践程度的一个指标,但不是衡量编程能力的最终标准。
4. 《构建之法》第 16 章:AI 降低编程门槛之后,程序员的价值在哪里?
这一点是我非常感兴趣的问题。现在 AI 编程工具已经可以帮助开发者生成大量代码,那么未来如果一个人不会写很多代码,只需要通过自然语言描述需求,就可以让 AI 完成大部分编程工作,那么传统程序员的价值是否会下降?我目前的观点是:会发生变化,但不会简单地消失。 因为 AI 可以生成代码,却不一定知道用户真正需要什么、需求之间是否存在冲突、一个系统应该采用什么架构、代码是否安全、出现 Bug 后真正的问题是什么,以及生成的代码是否值得长期维护。因此,我反而认为 AI 时代的软件工程能力会变得更加重要,只是能力结构会发生变化:从单纯写代码,逐渐转向理解问题、定义问题、设计系统、验证结果和管理复杂度。
5. 《构建之法》第 16 章:创新到底应该从哪里开始?
我过去比较容易把创新理解为想出一个别人从来没有做过的东西,但是阅读相关内容之后,我开始觉得这个理解可能过于简单。一个真正有价值的创新,不一定意味着从零创造一个完全不存在的东西,它可能来自对已有产品的重新组合、对用户需求的重新理解、对已有流程的优化,以及新技术带来的新解决方案。例如现在很多人都在使用 AI,但真正的问题可能不是还能不能再做一个 AI 聊天机器人,而是:“哪些真实的问题,因为 AI 的出现,现在第一次变得值得被解决” 我希望自己以后做项目的时候,也能够从真实需求出发,而不是单纯为了使用某一个热门技术而做项目。
为了改进教学,收集资料,老师在教学过程中会要求学生填写对课程的反馈, 我会D:经常提问题, 平时就经常给老师和助教提反馈
九、前车之鉴
1. 关于时间管理:把重要的事情真正做起来
在阅读相关经历后,我比较认同将事情按照重要程度和紧迫程度进行划分的思路。我过去的问题并不是完全没有时间,而是容易把时间分散到很多事情上。有时候会做很多看起来很忙的事情,但真正对长期目标重要的事情反而没有推进多少。这让我意识到忙不等于有效率。对于我而言,真正重要的事情应该包括提升编程能力、完成软件工程课程项目、积累真实项目经验,以及建立 GitHub 和技术博客。以后我希望能够更加主动地判断:这件事情是真的重要,还是只是让我感觉自己很忙?
2. 关于“大学学了很多,但好像什么都没学会”
我对这类经历比较有共鸣。计算机专业的知识很多,而且知识之间具有很强的关联性。如果只在考试前学习某一个知识点,那么很容易出现考试的时候会做,过一段时间就忘了的情况,这也是我目前比较明显的问题。我认为真正的解决方式不是继续无止境地看资料,而是把知识真正放进项目里。例如学习数据库,就实际设计数据库;学习 API,就实际调用 API;学习 Git,就真正用 Git 管理项目;学习软件测试,就给自己的项目写测试。
3. 关于“不要轻易说自己热爱编程”
我比较认同一个观点:不要轻易用“热爱”来描述自己。 因为真正的热爱并不是一句简历上的自我评价,而应该体现在长期行动中。如果一个人说自己热爱编程,但是遇到 Bug 就放弃、遇到困难就逃避,那么“热爱”本身并不能证明什么。反过来,如果一个人能够长期坚持学习、不断写代码、解决问题,那么即使他没有说自己热爱编程,别人也能够从他的行动中看到这一点。
这也让我重新思考自己的状态。我可以说自己对计算机和技术感兴趣,但最终到底是不是真的适合这个方向,不能靠现在的一句话决定。真正的答案应该由未来持续的行动来证明。
十、我的本学期规划
综合前面的思考,我希望自己这学期完成三个层面的成长。
第一层:基础能力
重点补齐编程基础、Git/GitHub、SQL、HTTP、API、数据库、Debug 和软件测试等方面的能力。我希望这些知识不再只是停留在知道,而是能够真正通过代码和项目使用起来。
第二层:工程能力
尝试真正完成至少一个完整项目,经历需求 → 设计 → 开发 → 测试 → 部署 → 发布 → 维护这一完整过程,而不是只完成一个能够运行的 Demo。
第三层:实践能力
尝试使用新的开发工具和技术完成项目,在实践过程中不断提高自己的学习能力和解决问题的能力。但我不会把工具当成替我完成一切的东西,而是希望把它们作为提高效率、辅助思考和学习的工具。
我希望最终做到:我知道自己要做什么 → 我能够把需求讲清楚 → 我能够判断技术方案是否合理 → 我能够修改代码 → 我能够 Debug → 我能够测试 → 我能够把软件真正发布出去。
十一、我希望如何度过这门课
如果用一句话总结我对这门课的期待,那就是:不要只是“学过软件工程”,而是真正做过一次软件工程。
我希望课程结束的时候,我能够回头看到现在的自己,然后发现我已经不再只是一个“有很多想法但编程实践比较少”的计算机专业学生,而是至少能够独立完成一个小型项目,知道一个软件应该如何从需求开始,一步一步走到真正交付。

浙公网安备 33010602011771号