软件工程第一周作业

我的软件工程学习之路:从 “化合态” 到真正开始改变

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class78-Grade2024-CS
这个作业要求在哪里
https://edu.cnblogs.com/campus/gdgy/Class78-Grade2024-CS/homework/15710
这个作业的目标 通过 GitHub、博客园和软件工程课程的学习,认识自身专业现状,明确能力差距,制定可执行的学习计划,同时培养持续写作、提问、总结、工程实践和自我反思的习惯

1. 介绍自己与建博客

我叫翁佳华,是广东工业大学 24 计科 8 班的一名大三学生,我的网名叫 “化合态”。

很多人第一次听到这个名字会以为我是学化学的,但其实它的由来很有意思。高中住校时宿舍里关系好,有一段时间开始叫对方的网名,我就想到我小时候喜欢玩滑滑梯,就给自己起过“华华踢”的戏称,符合我名字的”华“;后来用拼音打“hht”时,输入法跳出了“化合态”三个字。我觉得这个名字有意思,又不容易暴露真实身份,就一直用到了现在。

现在回头看,这个名字反而有了一层额外的意义:化合态是不同元素的组合与变化,而我的成长也是如此。高中的朋友、大学的经历、学过的知识、遇到的人,都在不断塑造现在的自己。我还不知道自己最终会 “化合” 成什么样子,但至少,我正在发生变化。

如果用几个关键词形容自己,我会选:社交、运动、唱歌、摄影、游戏、朋友,以及一点点焦虑。 我认为自己最大的优势不是某项突出的技术,而是性格。我喜欢和人交流,共情能力比较强,在陌生环境里也不会胆怯。我喜欢听别人表达,也乐于输出自己的观点,喜欢辩论和演讲,曾经拿过辩论赛的最佳辩手。大学期间我还担任过广东某地区同乡会的会长,组织策划过几百人规模的活动。这段经历让我学到了很多课堂上学不到的东西:如何和不同性格的人沟通、如何组织一群人完成目标、如何处理突发状况、如何承担责任。这些能力很难用分数体现,但我认为它们同样重要。

兴趣方面,我喜欢羽毛球,水平属于 “能打起来但谈不上厉害”;喜欢用手机摄影,喜欢唱歌,校园活动和KTV都少不了我;游戏方面偏爱《明日方舟》这类塔防作品。这些爱好看起来和计算机没什么直接关系,但它们构成了完整的我。

我一直是个容易知足的人。从初中到大学,我身边总有一群关系很好、也很优秀的朋友,一起学习、打球、玩闹,我一直觉得自己过得很幸福。但到了大三我慢慢意识到:知足有时候会让人失去向前的动力。我过去花了太多时间在“即时快乐”上,没有太强的危机感,并不是没有能力,只是没把足够多的时间放在真正重要的事情上。

所以我希望这门课成为一个新的开始。我开通了博客园账号,昵称就叫 “化合态”,后续会在这里记录自己的学习、思考与成长。博客不只是交作业的地方,更是我技术成长的轨迹本。

2. 现状、经验和计划

(1)专业选择与能力差距

为什么选择计算机,如果让我包装一下,我当然可以说:

“我从小就对计算机充满兴趣,所以坚定地选择了计算机科学与技术。”

但事实没有这么浪漫。

当初选择计算机,首先是因为高考分数刚好比较匹配。其次,我的家庭条件比较普通,所以我比较看重专业未来的就业和收入情况。当时我觉得工科整体就业会比较好,而在我当时的认知中,相比一些传统工科,计算机行业对于女生来说可能存在相对较低的进入壁垒。

当然,我也确实觉得计算机挺有意思。

但进入大学以后我才发现,计算机科学与技术远比高中想象的复杂,尤其是自学能力的重要性远远超出预期。课堂只能给一个基础框架,真正和就业、项目相关的知识,需要自己主动去寻找、学习、实践。更让人焦虑的是,这个行业变化太快了:我大一还觉得 HTML、CSS 是需要认真学的技能,现在很多基础页面 AI 几秒钟就能生成。我常常有一种 “学了很多,但又好像永远学不完” 的无力感。

如果重新选一次,我可能会考虑自动化 —— 我其实更喜欢 “软硬结合” 的东西。但既然已经选择了计算机,纠结过去没有意义,把现在的路走好更重要。

对比一个合格的 IT 专业毕业生,我认为自己的差距主要在:

  • 专业基础不够扎实,知识零散不成体系;
  • 对软件工程缺少系统理解,开发全凭感觉,没有方法论;
  • 完整项目经验不足,没有能拿出手的作品集;
  • 数据库、Linux 基础比较薄弱;
  • 数据结构与算法掌握不深,调试能力有待提升;
  • Git/GitHub 只会基础命令,没有用在完整的协作项目里;
  • 最重要的:职业方向还不够明确,什么都接触过一点,但没有一个领域足够深入。

技能自评与提升计划

技能项 ① 目前水平 (0-9) ② 目标水平 (0-9) ③ 提高手段
C/C++ 5 8 完成课程项目、刷算法题、阅读优秀开源代码、加强调试训练、做数据结构配套练习
Python 5 8 完成实际数据分析项目、练习数据处理脚本、使用 Python 解决实际问题、仿写优秀工具代码、参与小型爬虫项目
JavaScript 5 8 完成前后端完整项目、系统学习 JS 核心 API、结合 AI 工具高效开发、阅读主流框架源码、做交互组件练习
数据结构与算法 4 7 坚持刷题、总结错题与解题思路、理解经典算法原理、参加算法练习社群、拆解算法题应用场景
Git/GitHub 4 8 完成课程所有项目、熟练使用分支协作、掌握 Pull Request / Issue 流程、规范提交日志、参与开源项目协作
Linux 1 8 搭建本地开发环境、学习常用命令与脚本、部署个人项目、实践服务器操作、学习 Shell 编程
数据库 2 7 系统学习 SQL 语法、完成数据库课程设计、理解索引与事务原理、做数据建模练习、学习基础优化方法

其中 Git/GitHub 是我最有信心快速提升的一项。我已经练过基础的增删改查和分支操作,但我很清楚 “会几个命令” 和 “用 Git 做规范的项目开发” 完全是两回事,这门课正好可以帮我完成这个跨越。

(2)阅读心得

a) 专注本身就是一种能力

Scalers 这篇关于注意力的文章,刚好戳中了我现在的问题。 我以前总觉得 “上课认真听” 是理所当然的事,但慢慢发现自己越来越难长时间专注:上课听十分钟就想摸手机,看书看几行就走神。我曾经还会安慰自己 “反正回去看书也能懂”,但事实是,回去也不会认真看,最后知识学得似是而非。

看完文章我很认同一个观点:认真上课不只是为了学知识点,更是在训练 “专注” 这一核心肌肉。课堂就是现成的训练场,如果因为觉得课程 “水” 就放任自己走神,损失的不是那点知识,而是自己深度思考、长时间专注的能力。短视频刷多了,连读一篇长文的耐心都会退化,这才是最可怕的。

所以我来上这门课、认真参与,不只是为了学分,更是想借这门课重新锻炼自己的专注力 —— 能沉下心把一件事做完做好的能力,比任何具体知识点都重要。

b) 我理想的师生关系

我理想中的师生关系,是亦师亦友的“教练 - 学员”模式:老师掌握专业经验与方法,把握方向、给出反馈;学生对自己的学习负责,主动推进、主动提问。遇到问题可以放心请教,不会因为怕 “问出蠢问题” 就闭口不言。

如果老师布置的作业对我来说有些困难,我选择 C:向老师和同学请教,花更多时间,把作业全部完成。 我一直觉得,如果一个任务让我觉得难,大概率不止我一个人觉得难。与其提前给自己找 “不做的理由”,不如先试着解决。而且有点矛盾的是,有难度的任务反而更能激发我的兴趣 —— 完全没挑战的事我很快就会厌倦,但只要还在能力范围内,解决之后的成就感会特别强。我希望自己面对学习中的困难,能一直保持这种心态。

c) 引用与抄袭的边界

我认为软件开发本质上就是站在前人肩膀上的过程:查文档、用开源库、参考框架、看 Stack Overflow,都是在复用已有成果。但引用和抄袭有本质的区别:

  • 引用 / 借鉴是理解原理后,结合自身场景做改造与创造,并且明确标注来源、尊重原作者的成果;
  • 抄袭 / 剽窃是把他人的成果直接照搬,伪装成自己的产出,没有自己的思考与理解,也不标注来源。

对我自己来说,一个简单的判断标准是:我能不能讲清楚这段代码为什么这么写?我有没有加入自己的设计与思考?有没有按要求标注引用来源? 当然,“我理解了”不等于“可以直接抄作业”。如果课程明确要求独立完成,哪怕我完全看懂了网上的代码,也不会复制后当作自己的作业提交。我会仔细确认课程对引用、合作、AI 使用的具体规则,也主动了解学校关于学术诚信的规定,守住底线。

(3)未来规划与优劣势

未来方向选择

目前我的第一倾向是软件开发 + 产品方向。我希望做和专业对口的工作,能真正用到大学学到的知识,同时发挥自己沟通和理解用户需求的优势,成为既懂技术、又懂产品的技术型人才。当然我也希望能进入优秀的互联网公司,我觉得没必要假装自己没有这个目标。

但我也必须承认,现在我仍然很迷茫。所以我也保留另一个选项:先通过学习、项目和实习进一步探索,不想在缺乏实践的时候强行给自己贴标签。方向不是想出来的,是做出来的。

优势与劣势

  • 优势:沟通表达能力较强,不怯场;有基本的逻辑思维能力;有组织大型活动与团队协作的经验;性格乐观,对新事物有好奇心;愿意请教他人,不会死要面子硬扛。
  • 劣势:执行力不足,拖延症比较明显;技术深度不够,没有突出的核心技能;完整项目经验偏少,工程实践不足;容易被手机、短视频等即时娱乐分散注意力。

本学期整体规划

本学期我希望至少达成这些目标:

  1. 熟练掌握 Git/GitHub 的团队协作流程;
  2. 提升 C/C++、Python、JavaScript 的实战编码能力;
  3. 系统补完数据库与 Linux 基础;
  4. 补强数据结构与算法;
  5. 完成至少一个可以放进作品集的完整项目;
  6. 搭建并完善个人 GitHub 主页;
  7. 优化简历,为寒假实习做准备;
  8. 初步明确自己是偏开发还是偏技术产品方向。

(4)课程学习计划

对课程的期待

我以前觉得软件工程是一门很 “虚” 的课,讲的都是“一个软件应该怎么设计、怎么开发、怎么测试”这种宏大抽象的概念。我希望这门课能把这些概念落地,变成我能真正理解、能动手实践的方法论。 我希望通过这门课获得:系统的软件工程思维、规范的编码与工程实践能力、团队协作经验、AI 辅助开发的能力,以及提问、写作与表达的能力。

时间投入与投入程度

我计划平均每周投入 10小时(包含上课时间)在这门课上。 在投入程度上,我选择 D:比以前的课投入多很多,直到达到目标为止。 过去我容易满足于 “作业写完了就行”,但这次我希望追求 “真正学会”。大三已经到了要为就业做准备的阶段,我不想再用 “以后再学” 来安慰自己。

代码量规划

目前我还没有对过往的代码量做精确统计,后续会把 GitHub、本地项目和课程作业的代码统一梳理。预计C5000行,python1500,JavaScript2500行吧。
本课程我的代码量目标是:课程结束累计完成 8000 行有效代码。按一学期约 16 周计算,平均每周约 500 行。 我不会为了凑数字写重复、低质量的代码。如果项目本身需要的代码量更少,我会把时间花在提升代码质量、补充测试和文档上。

我也清楚,代码量不是能力的直接指标。优秀的软件往往能用更少的代码解决更复杂的问题,比起 “写过多少行代码”,“解决过什么问题” 更重要。但对现阶段的我来说,代码量依然是一个很好的过程指标 —— 它至少能证明我有没有真正动手实践。

WOOP 计划

  • Wish(愿望):熟练掌握 Git/GitHub 与软件工程方法,提升实战代码能力,完成可展示的项目作品集,初步明确职业方向,到寒假时具备找到有价值实习的能力。
  • Outcome(结果):学期结束时,GitHub 上有完整的项目、规范的提交记录、清晰的 README 与技术文章;面试时能自信地展示自己做过的项目、解决过的问题,而不是只会说“我学过某某语言”。
  • Obstacles(障碍):
    1. 拖延症、自制力差:知道该学习,但总被手机、短视频、游戏吸引,迟迟不开始;
    2. 完美主义倾向:没想清楚就不动手,导致进度拖延;
    3. 遇到难题容易逃避:卡壳一段时间就想 “明天再说”;
    4. 多任务冲突:其他课程作业挤占本课程时间。
  • Plan(if-then 计划)
    1. 如果写代码时开始刷手机,就立刻把手机放到房间另一端,开启 50 分钟专注计时;
    2. 如果看网课时开始刷无关视频,就立刻退出推荐页,额外完成一个小代码练习作为惩罚;
    3. 如果连续两天没完成学习计划,第三天优先补完欠下的任务,再推进新内容;
    4. 如果知识点卡壳超过 30 分钟,就主动查资料、问同学或老师,不一个人死磕;
    5. 如果因为“方向不明确”而不想学习,就提醒自己:方向是做出来的,不是想出来的,先行动再总结。

最可能的失败因素与应对

如果最后没达到目标,最可能的原因不会是课程太难,也不会是我能力不够,而是我又拖延了,没有坚持下来。这点我有清醒的自我认知。 我的应对办法是建立外部监督机制:主动让身边自律的朋友监督我的进度,定期和男朋友同步学习计划与完成情况,把外部鼓励转化为动力。我也会每周日做一次复盘,检查本周任务完成情况,没完成就找出原因,调整下周计划。

3. 提有质量的问题,给认真的反馈

《构建之法》阅读问题

以下是我阅读《构建之法》过程中,结合自己的经历思考的 5 个问题:

问题一:用户需求究竟该由谁定义?

  • 对应章节:第 8 章 需求分析
  • 背景与思考:书中讲了用户需求的获取与分析方法,但现实中用户往往只能说出表层需求。比如用户说“我要一个导出 Excel 的功能”,但他真正的问题可能是 “我没有方便的方式整理这些数据”。如果开发人员只机械地实现功能,最后可能只是把一个错误需求做得很精致;但如果开发人员过度自信,又会陷入 “我比用户更懂用户” 的误区。 我目前倾向于:用户负责提供真实场景和问题,产品和开发团队负责通过沟通、数据、原型去共同发现真正的需求。
  • 我的困惑:究竟怎样判断一个需求是“用户真正需要的”,还是开发者自以为是的需求?这个边界在工程实践中一般怎么把握?
  • 提问原因:我未来对产品方向感兴趣,需求判断是产品经理的核心能力,想知道工业界的实际做法。

问题二:测试的边界在哪里?

  • 对应章节:第 13 章 软件测试
  • 背景与思考:书中讲了各类测试方法与流程,但我以前做课程作业的测试都非常简单 —— 输入几组正常数据,能跑通就觉得没问题。但真正的软件需要考虑异常输入、边界值、空值、超长字符串、并发等无数情况。理论上输入的可能性是无限的,我们不可能测试所有情况。 我越来越觉得,测试本质上是主动寻找程序的失败点,而不是证明程序永远正确。
  • 我的困惑:我们到底需要测试到什么程度,才能认为一个软件 “足够可靠”?尤其是现在 AI 生成代码越来越普遍,这个问题似乎更重要了 ——AI 写的代码,我们要测到什么程度才能放心?
  • 提问原因:我对软件测试方向也有兴趣,想了解工业界对测试覆盖率、测试深度的实际判断标准。

问题三:AI 时代,程序员的核心能力会变成什么?

  • 对应章节:第 16 章 创新的迷思
  • 背景与思考:书中讨论了技术创新与工程师的能力,但成书时 AI 编程工具还未普及。我大一学 HTML/CSS 时还要一个个记语法,现在 AI 几秒钟就能生成一个基础页面。这让我开始思考:如果 AI 能完成越来越多的基础编码工作,程序员真正需要掌握的到底是什么? 我认为未来程序员不会 “不需要写代码”,但编程能力的内涵会变化:以前是 “能不能写出这段代码”,以后更重要的是 “能不能判断 AI 写的对不对”“能不能把模糊的需求拆解成可实现的系统”。AI 降低了写代码的门槛,却提高了理解软件的要求。
  • 我的困惑:作为在校学生,我们还应该把多少时间花在手写代码、刷题上?代码能力和系统设计、需求理解能力之间,应该怎么平衡?
  • 提问原因:身处技术快速变化的节点,很担心自己学的东西毕业时就过时了,想知道该把精力重点放在哪里。

问题四:代码质量有没有相对客观的评判标准?

  • 对应章节:第 4 章 代码质量与代码评审
  • 背景与思考:软件工程一直强调代码质量,但实际写代码时我经常觉得,“能运行” 和 “写得好” 完全是两回事。一个程序能跑、没明显bug、能完成需求,算不算好代码?如果它变量命名混乱、一个函数几百行、没注释没测试、后续修改非常困难,它又算不算差代码? 代码质量不像考试分数有明确的数字,好像很主观。
  • 我的困惑:软件工程里有没有一套相对客观的指标体系来判断代码质量?对于学生阶段,我们应该重点训练哪些维度的代码质量?怎么自我检查?
  • 提问原因:我现在写代码经常只追求 “能跑就行”,想知道该从哪些方面入手提升代码质量。

问题五:学生团队的项目管理,该严格到什么程度?

  • 对应章节:第 6 章 敏捷流程
  • 背景与思考:书中讲了敏捷开发与项目管理流程,但我以前做课程设计基本都是 “老师布置→自己写→交作业”,几乎没有正式的项目管理。我好奇:对于学生团队的小型项目,项目管理到底该做到什么程度?太松会权责不清、进度混乱;太严又可能花太多时间在开会、写文档上,反而没时间写代码。 我认为项目管理的目的是 “让团队更容易把正确的软件做出来”,而不是 “让流程看起来很专业”。
  • 我的困惑:一个高效的软件团队,应该如何在 “规范” 和 “效率” 之间找到平衡?对于学生团队来说,哪些工程实践是真正必要的,哪些只是形式主义?
  • 提问原因:这学期会有团队项目,希望提前思考这个问题,让团队合作更高效。

课程反馈态度

我选择 D:经常提问题,平时就经常给老师和助教提反馈。 我认为课程是 “教练 - 学员” 的关系,及时、具体的反馈非常重要。如果哪里听不懂,与其课后抱怨 “老师讲得不好”,不如具体说明 “哪个知识点没听懂、我尝试了什么、问题在哪里”,这样老师才能真正调整教学。 而且提问本身也是一种能力。我未来想走技术 + 产品方向,不管是测试还是产品,核心工作都包含 “发现问题、提出问题、推动改进”。我希望把每一次提问都当成一次练习,训练自己清晰表达问题的能力。

4. 前车之鉴

我选了三篇文章阅读,结合自己的情况谈谈感想。

1. 时间管理:你缺的可能不是时间

这篇文章里 “把事情按重要和紧迫程度分成 ABCD 四类” 的思路,对我触动很大。 我以前总把 “我没时间学习” 挂在嘴边,但回头看其实不是没时间 —— 我的时间只是被刷视频、打游戏、出去玩这些 “即时快乐” 占满了。学习的收益不是即时的,所以总被往后拖。专业学习、做项目、准备实习,都属于 “重要但不紧迫” 的事,也恰恰是最容易被拖延的事。一天不做没感觉,半年之后差距就非常明显。

我以前也试过列待办清单,但总是执行不了。看完文章我意识到:问题不在于我不知道方法,而在于我管不住自己。知道和做到之间,隔着整个大学的距离。

所以这学期我打算这样做:每天早上花 5 分钟列当天的 ABCD 清单,强制自己至少完成 2 项 A 类、1 项 B 类任务,才能碰娱乐类 App;每周日复盘一次时间分布,如果 C 类 D 类占比太高,就说明我在逃避重要的事。我不想再用 “我很忙” 当借口,我想看看自己真正专注下来,能做到什么程度。

2. 大学教育与速成培训:基础到底有没有意义?

这篇文章讲的大学教育和培训班的区别,刚好是我最近一直在想的问题。 计算机行业变化太快,我经常会想 “这个东西以后工作会不会用到?” 如果不确定,就觉得学它没用。现在网上速成教程、AI 工具那么多,好像需要什么临时学就行。但慢慢我发现不是这样:培训班教的是 “怎么把一件事做出来”,而大学教的是 “为什么这么做?背后的原理是什么?还有没有别的方法?”

如果只学工具,工具一换代,我就要重新学;但如果打好了基础、建立了思维方式,哪怕工具变了,我也能快速适应。比如我大一学的 C 语言,现在虽然不天天写,但它帮我理解了指针、内存、编译这些底层概念,学其他语言的时候就快很多。

所以现在我虽然也会觉得有些大学课程很抽象、好像 “没用”,但我开始相信:基础知识的价值,恰恰在于它不会跟着某一个具体工具一起消失。这也是我想认真学好软件工程这门课的原因 —— 它教的不是某个工具,而是思维和方法。

3. 技术栈与成长:不能什么都只学一点

这篇文章里讲的 “技术栈”,简直就是我现在的状态:C 学过、Python 学过、JavaScript 学过、Java 碰过一点、Git 会一点、Web 做过一点…… 看起来什么都接触过,但没有一个方向能让我自信地说 “这是我的领域”。广度有一点,深度完全不够。

文章里说 “技术是相通的,一理通百理明,但起码有一样要研究得特别通透”。我非常认同。大学阶段不是要把所有语言都学会,而是要建立自己的核心能力,再不断向外扩展。

所以这学期我给自己的任务,不是 “再多学几门语言”,而是选一个方向深入下去,做出完整的项目,形成自己的技术栈。我不想再收集 “我学过什么”,而是想积累 “我做成过什么”。


附:GitHub 与博客信息

posted @ 2026-09-06 13:16  化合态  阅读(7)  评论(0)    收藏  举报