第一周作业:随笔
第一周作业:系好软件开发的第一颗扣子
前备工作
作业要求
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 计科24级5班 |
| 这个作业的要求在哪 | 第一周作业 |
| 这个作业的目标 | 建立博客和 GitHub 仓库,练习 Markdown、Git 和软件工程的基本方法,并通过阅读和实践形成自己的学习计划。 |
账号准备
- 博客昵称:Coconut
- 博客园地址:https://www.cnblogs.com/coconutgogogo
- Github昵称:Charon0921
- GitHub仓库地址:https://github.com/Charon0921/Charon0921
博客园的默认编辑器已经改为 Markdown

GitHub 仓库根目录已经添加 README,仓库地址如下:

正文
一、介绍自己
大家好,我是 李蔓淇,目前就读于计算机科学与技术专业,是一名大三学生。
目前我的主要学习方向是前端开发,已经学习了 HTML、CSS、JavaScript 等前端基础知识,正在学习TypeScript 和 React框架。目前我希望以 Vue 3 生态为主要学习方向,在掌握基础知识的同时,通过实际项目提高自己的开发能力。
除了计算机,我平时比较喜欢芭蕾舞,并且取得过不少北舞和英皇的相关证书。对我而言,芭蕾不仅是一项兴趣,也让我体会到了一件事情:很多能力都需要经过长期、重复的练习才能真正形成。
平时周末我也喜欢和朋友去不同的地方探索,有时候也会一个人找一家安静的咖啡店,看书或者学习。我比较享受这种独处的时间,它能够让我暂时从比较快的生活节奏中抽离出来,专心做自己的事情。
二、现状、经验和计划
1. 专业选择和目前的差距
高考结束填报志愿的时候,我并没有一个特别明确的职业规划。当时觉得计算机是一个比较有吸引力的专业,同时也有一点“少年心气”——既然很多人都认为计算机很难,那么我也想亲自试一试,看看自己究竟能不能把它学好。
真正进入大学以后,我才逐渐认识到,计算机专业确实需要投入大量时间和精力。尤其是在学习编程的过程中,仅仅理解知识点远远不够,还需要不断实践、调试和总结。现在回头来看,我认为当初的选择虽然并没有经过非常充分的规划,但至少让我进入了一个自己愿意继续探索的领域。
到了大三,我也开始更加认真地思考自己的专业能力和未来发展。与其纠结当初是否应该更早开始,不如把接下来的时间利用好,尽可能弥补过去学习中的不足。
目前距离一个合格的 IT 专业毕业生,我认为自己还有以下几个方面需要提升:
第一,基础知识还不够扎实。
部分知识虽然已经学习和使用过,但是如果完全脱离搜索和工具独立完成,仍然存在一定困难。因此之后需要进一步巩固 JavaScript、TypeScript 以及计算机基础知识。
第二,算法与手写代码能力较弱。
目前我的学习重点偏向实际项目开发,因此算法方面投入相对不足。在面试过程中,算法和手写代码又是比较重要的一部分,因此这也是接下来需要重点补足的能力。
第三,容易拖延。
相比于知识上的不足,我认为拖延可能是更需要解决的问题。有时候并不是不知道应该做什么,而是容易把计划推迟到“之后再完成”。到了大三,我希望能够逐渐建立更加稳定的学习节奏,而不是依赖短时间的热情。
2. 技能水平与目标
评分采用 0 到 9 分,5 分表示基本能够通过相关面试,9 分表示世界一流水平。
| 技能 | 当前水平 | 课程结束目标 | 提升方式 |
|---|---|---|---|
| HTML/CSS | 6 | 8 | 项目实践、总结常见布局方案 |
| JavaScript | 5 | 7 | 系统复习并结合项目实践 |
| TypeScript | 3 | 6 | 在 Vue 项目中持续使用 |
| Vue 3 | 4 | 6 | 完成实际项目并学习框架原理 |
| Git/GitHub | 4 | 6 | 在项目中持续使用 Git 进行版本管理 |
| 算法与数据结构 | 3 | 5 | 每周进行固定的算法练习 |
| 项目开发能力 | 4 | 7 | 完成 AI 项目并进行总结和复盘 |
我希望课程结束后,自己的提升不仅体现在“学过哪些技术”,更体现在能够独立分析问题、解决问题,并完成一个相对完整的项目。
3.为什么我需要认真上课并且参与其中
看完你为何要来上课并且认真参与这篇文字和评论后,我对“认真上课”有了更深的理解。认真听课不仅是为了完成作业、取得成绩,更是在培养自己的专注力、理解能力和思考能力。作为计算机专业的学生,我以前容易只关注自己感兴趣的前端技术,而忽略基础课程的学习。但很多能力并不会立刻体现价值,却会在之后的学习和工作中发挥作用。
现在已经大三,我也意识到过去的时间无法重来,与其后悔没有早点努力,不如从现在开始认真起来。因此,我会尽量保证每周投入5小时学习这门课,认真听讲、完成作业,有问题先思考再主动请教,希望真正有所收获。
4.我希望的师生关系
我选择:
C:向老师和同学请教,花更多时间,把作业全部完成。
我比较认同这种师生关系。老师负责提供学习方向、要求和反馈,而学生也应该对自己的学习负责。
如果遇到困难,我会先自己查找资料并尝试解决。如果仍然无法解决,再向老师、助教或同学请教。我认为,真正重要的并不是“有没有遇到不会的问题”,而是遇到问题之后采取什么态度。
5. 关于抄袭和借鉴
我认为参考别人的代码和资料本身并不是问题,问题在于是否诚实地使用它们,以及自己是否真正理解。
实际的软件开发本来就不可能完全脱离别人。
我们会:
- 搜索官方文档;
- 阅读 GitHub 上的开源项目;
- 查看 Stack Overflow 等社区的讨论;
- 使用别人提供的库;
- 参考优秀项目的代码结构。
这些都是正常的学习和开发方式。
但“参考”和“抄袭”的区别在于:
我是否知道自己为什么这样做,以及是否把别人的成果伪装成自己的成果。
如果我参考了一个 Vue 项目的实现方式,然后理解了它的原理,并根据自己的需求重新实现,我认为这是学习。
如果我直接复制别人的完整作业,然后把它当成自己的成果提交,那么这就失去了作业本身的意义。
6.对未来几年的规划及自己的优劣分析
目前我比较倾向于从事前端开发,未来也会根据自己的学习和工作情况考虑向全栈方向发展。相比其他同学,我的优势是已经有一定的前端基础,学习过 HTML、CSS、JavaScript、TypeScript 和 Vue3,也比较喜欢通过项目实践来学习新技术。同时,我对 AI 编程工具也比较感兴趣。我的劣势是编程基础还不够扎实,算法和手写代码能力较弱,有时也容易拖延。
本学期我计划继续巩固前端基础,完成目前的 AI 项目,并开始准备实习和面试,希望通过项目和持续练习提升自己的实际开发能力,为之后寻找实习做好准备。
7.对这门课程的计划、时间分配和代码量
我希望通过这门课系统了解软件工程的基本思想和开发流程,不只是完成作业,也希望把课程中学到的方法运用到自己的项目中。作为前端方向的学生,我尤其希望能够提升自己的项目规范、代码质量、团队协作和工程实践能力。
(1)课程计划与期待
我计划认真完成每次作业和课程要求,在学习理论知识的同时尽可能结合实际项目进行理解。相比单纯记忆知识点,我更希望能够知道软件工程中的一些方法为什么这样做,以及它们在真实项目中有什么作用。
关于是否想当助教,目前我暂时没有明确的打算。现阶段我更希望先把自己的基础和能力提升起来,如果以后有机会并且自己的能力达到要求,我会考虑尝试。
(2)目前的代码量
目前我的代码主要集中在前端方向,大致如下:
| 编程语言/技术 | 代码量 |
|---|---|
| HTML | 1500行 |
| CSS | 700行 |
| JavaScript | 2600行 |
| TypeScript | 200行 |
| Vue | 600行 |
| 其他(python、C、C++、Java等) | 800行(平时作业等) |
我认为代码量并不能完全代表一个人的编程能力。想进入一流的软件公司、互联网或人工智能公司,除了积累一定的代码量,更重要的是编程基础、算法能力、项目经验、代码质量以及解决实际问题的能力。以后从事高校教学科研工作也是如此,需要更深入的专业知识、研究能力和持续学习的能力。
(3)时间分配
我计划平均每周投入 5小时 在这门课上,其中包括正常上课时间、阅读资料、完成作业以及项目实践。
如果按照题目中的选项进行选择,我选择:
D:比以前的课要多很多,直到达到目标为止。
因为现在已经大三,我希望改变以前容易拖延的学习习惯,在这门课上投入更多时间,真正学到一些对以后工作有帮助的东西。
(4)课程结束时的代码目标
我计划在课程结束时新增约 10000行代码,按照一个学期约16周计算,平均每周完成约 600行。
不过,我不会单纯为了完成代码量而追求数量,更希望保证代码是自己实际完成的,并且能够在项目中发挥作用。
(5)WOOP计划
- Wish(愿望): 认真学好软件工程课程,掌握基本的软件工程思想,并提升自己的项目实践能力。
- Outcome(结果): 希望课程结束后,不仅能够完成课程要求,还能真正形成一套比较规范的开发习惯,为以后做项目和寻找实习打下基础。
- Obstacle(障碍): 我最大的障碍是容易拖延。有时候知道任务应该完成,却会想着“晚一点再做”,最后导致任务集中到一起。
- Plan(计划): 如果发现自己开始拖延,就把当天的任务拆分成更小的目标,先完成最重要的一项;如果当天没有完成,就在第二天优先补上,避免任务不断积累。
(6)最可能的失败因素:
我认为自己最可能失败的原因是不能长期坚持。刚开始可能会有很强的动力,但过一段时间后容易松懈。
因此,如果连续几天没有按照计划学习,我就会重新制定下一周的学习计划,把目标拆小,从每天完成一个具体任务开始,先恢复学习节奏,再逐渐增加学习量。
三、提有质量的问题, 给认真的反馈
快速通读《构建之法》后,我发现书中很多内容并不是单纯讲“怎么写代码”,而是在讨论如何把一个程序真正变成一个可以长期维护、持续改进的软件。结合自己目前的学习和项目经历,我产生了以下五个问题。
问题一:软件开发中,什么时候应该追求代码质量,什么时候应该优先完成需求?
章节与上下文:
第1章《概论》第1.2节“软件工程是什么”。书中提到,软件工程需要考虑软件什么时候达到“足够好”的程度并可以发布,而不是无限追求完美。
我的问题:
如果项目时间有限,我们应该如何判断“做到什么程度就够了”?对于刚开始做项目的学生来说,这个标准似乎很难掌握。
我自己做前端项目时经常会遇到类似情况:一个功能明明已经能够正常运行,但我又觉得代码结构不够漂亮、页面不够完善,于是继续修改,最后反而影响了其他任务的进度。可是如果一直抱着“能跑就行”的想法,又可能留下很多问题。
因此我想知道,实际的软件开发中有没有比较具体的判断方法?例如,是否应该优先保证核心功能和严重 Bug,再考虑代码重构、界面优化等问题?我目前认为“足够好”并不是降低质量要求,而是在时间、成本和质量之间找到一个合理的平衡点,但这个平衡点应该如何判断,我仍然比较困惑。
问题二:单元测试真的值得在小型项目中投入时间吗?
章节与上下文:
第2章《个人技术和流程》第2.1节“单元测试”。书中介绍了单元测试的作用,强调通过测试可以及时发现程序中的问题,并提高代码质量。
我的问题:
如果是一个只有一个人开发、功能也不复杂的小项目,编写大量单元测试是否真的划算?
以前做课程作业时,我通常更关注“功能能不能实现”,很少主动写测试,因为感觉写测试本身也需要花时间。尤其是一些简单的页面功能,我会觉得手动运行一下就可以了。
但随着项目变大,如果修改一个功能就可能影响其他功能,那么测试确实可以减少反复检查的成本。这让我产生了一个疑问:单元测试的价值是不是会随着项目规模的扩大而越来越明显?
我现在的理解是,小项目不一定需要追求很高的测试覆盖率,但核心业务逻辑、容易出错的功能还是值得测试。相比“所有代码都测试”,我更想知道应该如何判断哪些代码最值得测试,以及测试投入和项目规模之间应该如何平衡。
问题三:程序员应该花多少时间学习新技术?
章节与上下文:
第3章《软件工程师的成长》,书中讨论了软件工程师的成长以及如何不断提高自己的能力。
我的问题:
现在前端技术更新很快,Vue、React、TypeScript以及各种 AI 编程工具不断发展。对于学生来说,应该把更多时间放在打基础上,还是应该不断学习新的技术?
我目前主要学习前端,平时会接触 Vue3、TypeScript,也会使用一些 AI 编程工具。有时候看到新的框架或工具,会觉得如果不马上学习就会落后,但真正开始学习后又发现时间有限,最后可能每一种技术都只了解一点。
我认为基础能力仍然是最重要的,例如 JavaScript、数据结构、算法和代码阅读能力;但如果完全不接触新技术,也很难适应行业变化。
因此我的困惑是:对于还没有进入行业的学生来说,基础学习和新技术学习应该怎样分配时间? 是应该先把一项技术学深,再扩展其他技术,还是应该保持一定的技术广度?我目前更倾向于“基础为主、新技术为辅”,但还不知道怎样确定具体比例。
问题四:敏捷开发中的“快速迭代”,会不会导致代码越来越乱?
章节与上下文:
第6章《敏捷流程》。书中介绍了敏捷开发强调快速迭代、根据反馈不断调整需求,而不是一开始就把所有事情完全确定下来。
我的问题:
如果一直强调快速实现和快速迭代,会不会导致开发人员为了赶进度不断写临时方案,最后形成大量技术债?
我自己做项目时有过类似经历:为了尽快实现一个功能,会先采用比较简单的写法,想着以后再优化。但项目进行到后期,之前留下的问题越来越多,最后反而需要花更多时间修改。
另一方面,如果一开始就花大量时间设计一个非常完善的架构,又可能出现需求改变后大量返工的问题。
所以我比较困惑的是:敏捷开发中的“快速迭代”和“提前设计”到底应该如何平衡? 我的理解是,不应该为了敏捷而完全放弃设计,而应该只设计当前真正需要的部分,同时给未来修改留下空间。对于学生项目来说,我认为这种方式可能比一开始追求“大而全”的架构更加实际。
问题五:AI 可以帮程序员写代码后,程序员最重要的能力是什么?
章节与上下文:
第16章《IT行业的创新》 以及全书关于软件工程师能力成长的相关内容。书中讨论了技术发展、创新以及软件工程师需要不断适应变化。
我的问题:
随着 AI 编程工具的发展,如果 AI 可以帮助程序员生成大量代码,那么未来程序员最重要的能力还只是“写代码”吗?
我自己在学习前端的过程中已经开始使用 AI 辅助写代码。以前一个功能可能需要自己查资料、思考很久,现在 AI 可以快速给出一个实现方案。但是我也发现,如果自己没有基础,有时候即使 AI 写出了代码,也不一定能够判断它是否合理,更不知道出现问题时应该怎样修改。
这让我想到,AI 可能并不会让编程能力变得不重要,而是改变了程序员需要具备的能力。未来可能更加需要需求分析、架构设计、代码阅读、问题定位以及判断 AI 生成代码是否可靠的能力。
但我的困惑是:如果学生过早依赖 AI,会不会影响自己的基础编程能力? 应该怎样使用 AI 才能提高效率,而不是变成“只会让 AI 写代码”的人?我目前认为,学习阶段应该先自己思考和尝试,再使用 AI 辅助,而不是直接把所有问题交给 AI,但具体应该把握到什么程度,我还在探索。
认真反馈
对于课程反馈,我选择 D:经常提问题,平时就经常给老师和助教提反馈。
我认为反馈不应该只是课程结束时简单评价“好不好”,而应该在学习过程中遇到具体问题时及时提出。例如作业要求不明确、某个知识点难以理解、课程安排不合理等,都可以及时反馈。
同时,我也会尽量先自己思考,再提出具体的问题,而不是遇到困难就直接说“不会”。这样既能帮助自己解决问题,也能让老师和助教更准确地了解学生真正的困难。
四、前车之鉴
1. 不要把“看起来很努力”当成真正的努力
以前我对“学习效率”的理解比较简单,觉得只要每天做了很多事情,就是在进步。但实际学习中,我经常先处理一些简单、轻松的任务,真正需要花时间思考的事情反而一直往后拖。最后虽然一天也很忙,却没有解决最重要的问题。
这篇文章让我意识到,时间管理的重点并不是把每天安排得满满当当,而是知道什么事情值得优先投入时间。对我来说,现在比较重要的是课程学习、前端基础、项目实践和实习准备。以后我会减少无意义的忙碌,每天优先完成最重要的一件事情,再处理其他任务。
2. 学计算机不能只追着“新东西”跑
这篇文章让我重新思考了“学会一门技术”到底是什么意思。以前我比较容易被新的框架、工具和教程吸引,看到别人用了什么技术,就会觉得自己是不是也应该马上学。但真正写项目时,我又会发现,一些基础问题仍然需要花很长时间解决。
我现在主要学习前端,接触过 HTML、CSS、JavaScript、TypeScript 和 Vue3,也开始使用 AI 编程工具。技术更新得很快,如果只追着工具学习,很容易一直处于“还没学完”的状态。因此,我认为大学阶段更重要的是建立能够迁移的基础能力,同时通过项目把基础知识真正用起来。以后我会减少盲目追新技术,把更多时间放在 JavaScript、网络、数据结构等基础内容上。
3. 女生学计算机,不应该先给自己设限
参考: 关于女生能不能学好计算机的讨论
我觉得性别和专业选择是一个比较值得思考的问题。刚开始学计算机时,我也会看到一些“计算机更适合理科男生”“女生学编程比较吃力”之类的说法。如果经常接触这些观点,很容易在遇到困难的时候把原因归结到性别上。
但实际学习以后,我发现编程难不难,更多取决于基础、练习时间、思考方式和是否愿意坚持。前端开发也不是只需要“会写代码”,还需要审美、沟通、需求理解和解决问题的能力,这些并不是某一种性别专属的优势。
因此,我更认同“能力比性别标签重要”。如果以后遇到困难,我希望首先分析自己到底缺少什么,而不是因为自己是女生就降低对自己的要求。相比证明“女生也能学计算机”,我更希望最后能够直接用自己的能力证明这一点。
4. 软件工程不是把代码写出来就结束
参考: 世界一流大学怎么教软件工程
以前做课程作业时,我比较关注“功能能不能运行”。只要页面能显示、功能能实现,我通常就认为任务完成了,很少考虑代码结构、文档、测试或者后续修改是否方便。
阅读这篇文章后,我发现软件工程真正关注的是如何让软件能够被持续开发和维护。一个项目即使只有自己一个人完成,也可以提前培养这些习惯。
结合我现在做前端项目的经历,我觉得以后不能只追求“能跑”,还应该关注代码是否容易理解、功能是否方便修改,以及出现问题后能不能快速定位。因此,我准备在之后的项目中逐渐增加 README、规范提交记录、功能测试和项目复盘,让自己提前适应真正的软件开发过程。

浙公网安备 33010602011771号