软件工程第一周作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS/homework/15692 |
| 这个作业的目标 | <准备GitHub和博客园账号,并在博客园按要求发一篇随笔> |
一、自我介绍
大家好,我是陈憬乐,目前就读于广东工业大学,专业是计算机科学与技术。我活泼开朗,乐观向上,独立性强,能自主完成各项任务。我有责任心,主动承担起自己的责任,并且会主动帮助他人,遇到问题也会虚心请教他人。
目前我已修过数据结构、计算机组成原理、操作系统和计算机网络等课程。编程语言方面接触过C语言、Java、python和VHDL。在空闲时间学习了Web前端的HTML、CSS和JS,后面计划学习后端的相关技术和AI智能体。
我的兴趣爱好是打羽毛球、听歌、看电视剧和打游戏。我在体育方面并不好,身体素质也一般,在这么多体育项目里也就羽毛球比较喜欢一点,虽然我是业余水平,但是我会在场上分析对手比较弱的地方,尽可能通过一些手段得分。平时有时间我也会看一些羽毛球比赛,可能也是比赛看多了所以能看出对手的弱点。我对音乐比较敏感,当听到好听的旋律时,我一般都会去搜歌名然后加入歌单,平时写作业、写实验报告或者无聊的时候都会听歌。我听的歌的类型也比较多,中英韩文歌我都听,流行、电子、乡村和rap等各种类型的歌都听。不同于只听大热歌曲,当一个歌手有两三首歌是我比较喜欢的,我一般会把这个歌手的专辑都听一遍,然后把喜欢的歌加入歌单。
二、现状、经验和计划
(1)我是怎么选择了这个专业的
我从小就对计算机非常感兴趣,还记得小时候父亲买了一台电脑,在电脑面前我一坐就是一个下午。到了初中的时候,我非常幸运地加入了学校C++编程队,在里面学习了一些编程的知识,从那以后我对计算机的喜爱越来越深。在高考结束后,在这么多专业中比较收悉计算机专业,而且分数也过了广工的计算机类专业分数线,最后就选择了这个专业。
技能调查表:
| 技能 | 目前水平 | 课程结束目标 | 计划提高手段 | |
|---|---|---|---|---|
| 1 | 需求对齐与代码健康度 | 3 | 7 | 每天动手写代码,把学过的东西写成完整程序,每周固定刷算法题 |
| 2 | 验证深度与测试覆盖 | 2 | 6 | 课程作业不以"能跑"为终点,加单元测试、处理边界情况 |
| 3 | 云原生部署与资源优化 | 2 | 6 | 对课程设计/项目做性能分析(profiling),学用性能工具 |
| 4 | 智能体编排与工具使用 | 3 | 7 | 用 Git 管理自己的所有项目,坚持每周写 1 篇技术博客 |
| 5 | 手动掌控力与底层原理 | 3 | 7 | 主动读开源项目代码并在其上改进,用 Git 管理版本,把理论课知识"用到实际里",在项目中有意识地解释底层原理 |
(2)三篇阅读心得
a) 《大学生上课为什么一定要认真听讲》读后感
我完全认同"认真听讲是一种能力,需要刻意训练",也认同"平时放的水,最后会流进脑子里"。这与我前两年"上课走神、考前突击"的经验吻合:突击考完就忘,等于没学。认真听讲练的是专注力,这种能力会迁移到工作、读书、做任何复杂的事上。
所以我的立场是:上课时带着问题去听,边听边和已有知识建立联系,听不懂当场记下、课后追问。老师讲得不好时,不是用"这课很烂"给自己放水,而是先自己预习补足功课,把课堂当作"查漏补缺 + 梳理"而非"第一次学习",然后把具体的改进点反馈给老师。
b) 师生关系
我在大学体验过的师生关系有:餐馆/食客、路人/路人和保姆/幼儿。我希望这门课是健身教练/健身学员的关系:教练定目标、给方法、严格要求、不留情面地指出问题;学员主动练、主动问、为自己的成长负责。
如果老师布置的作业对我来说有些困难,我选E,我会比较喜欢先自己找办法独立解决问题,通过搜索、借助AI工具等方法努力去完成作业,我不太喜欢一上来就问别人,一般会在我实在找不到办法解决的时候我才会向老师和同学请教,花更多时间,尽量把作业全部完成。
c) 引用文献、参考别人资料 vs 抄袭剽窃
我觉得两者的区别在于三点:是否如实标注来源、是否投入自己的理解与加工、是否诚实说明自己的贡献。
写文档/论文:引用别人的文献要明确标注出处,符合规范;写博客至少注明原文地址。学术研究就是建立在前人成果之上,如实引用是"做学问、做项目的基础",完全没有问题。
写代码:使用开源库、在别人代码基础上改进是行业常态,但要遵守开源协议、注明出处;把别人的代码直接当自己的作业交上去,就是抄袭。
(3)为将来准备:今天的选择
我的选择是先成为一名合格的软件工程师,同时保持读研深造的可能(我对 AI/算法方向有兴趣)。在这种选择下,相比其他同学,我的优势是有一定的实践经验,动手能力强;学过组成原理、OS、网络、AI 等课程,理论面比较广;结构化学习能力,愿意把知识讲清楚。劣势是代码量偏少、完整项目经验不足,工程化意识弱;虽然能在规定时间内完成任务,但是有拖延症,一般在最后才能完成。
针对我的选择,本学期的规划是:
- 每周固定时间写代码+写博客,持续累积代码量和记录;
- 认真组建/加入课程项目团队,体验真实的协作、复审、测试流程;
- 每天坚持做算法题,保持基本功手感;
(4)这门课的计划
我的计划是能够做到“做中学”,不是只听概念,而是完整地做一个项目,体验从需求、设计、编码、测试到发布的全过程。上课认真听、课后主动练;每个阶段的作业都当作真实项目来做;坚持写博客记录过程与心得。我期待真实的工程实践,团队协作、代码复审、单元测试,都能在项目里真正用一遍。我不想当助教,因为我的绩点一般,这学期也比较多专业课,我想花更多时间稍微提高一下绩点。
我目前的代码量是4000行,要入职一流软件/互联网/人工智能公司需要多少代码量,一般需要本科阶段积累2-5万行有效代码,并且有2-3个拿得出手的完整项目,配合扎实的算法、数据结构、操作系统、网络基本功。如果从事高校教学科研工作,更看重理论深度、研究能力和论文成果,代码量不是主要衡量标准,但至少要能独立实现算法、复现实验,具备把想法转成可运行系统的能力。
我打算每周在这门课上投入至少10个小时,前因为两年我确实浪费了不少时间,这门课是我补课和赶超的关键机会,我愿意把大量时间投进来。
课程结束时的代码量目标:期末总有效代码量达到约10000行,每周应完成500行代码量
三、提有质量的问题,给认真的反馈
五个问题:
问题一:对个人小项目、生命周期很短的课程作业,单元测试的投入到底值不值得?
书中第2章强调单元测试是保证代码质量的基本手段,提倡“测试先行、及时测试”。但我的实际经验是:课程作业大多是一次性的,写完交掉就不再维护,"写测试"的时间成本显得很高,所以我几乎从不写测试。我的困惑是:对个人小项目、生命周期很短的课程作业,单元测试的投入到底值不值得?这是因为我还没体会到测试的好处(书中的描述和我的直接经验矛盾),还是书中建议主要面向“会被长期维护的软件”?如果能给出“什么规模/什么场景的代码值得配测试”的量化标准,对我这种初学者会更有指导性。
问题二:代码量和工程能力之间是线性关系吗?对在校学生,没有真实用户和大型项目,如何用这些指标给自己一个诚实的定位?
第3章软件工程师的成长中用用“项目的数量、规模、质量”来衡量个人能力,鼓励通过博客、开源贡献来展示自己。但我在《IT小小鸟》里读到刘帅的经历:他“知其然不知其所以然”,面试时被问到lucene文件索引实现就崩了,这提醒我基本功比刷量重要。我的困惑是:书中衡量能力的指标,和“真正解决问题的能力”之间,到底怎么统一?会不会出现“代码量很多、但都是复制粘贴”的虚假繁荣?
问题三:课程项目的团队(4-8 人、8 周、成员水平参差、有人摸鱼)真的能落地敏捷流程吗?
第5章团队和流程、第6章敏捷流程中介绍了一窝蜂、明星、主治医师等多种团队模式,以及Scrum敏捷流程。我困惑:课程项目的团队(4-8 人、8 周、成员水平参差、有人摸鱼)真的能落地敏捷流程吗?每日站会、迭代回顾会不会沦为形式?书中描述的团队似乎默认“大家都想把事做好”,但现实中成员投入差异很大。对“如何管理不投入的成员”这一实践中最常遇到的难题,书中着墨较少,这部分难道不是更应该展开的吗?或者说,对初学者团队,应该先练什么、后练什么?
问题四:很多课程项目的 "用户" 就是老师或自己,需求是给定的,没有真实用户可访谈,需求分析的方法论还有意义吗?
第8章需求分析、第10章典型用户和场景中强调要挖掘用户的真实需求,用典型用户和场景分析来指导设计。我困惑:很多课程项目的"用户"就是老师或自己,需求是给定的,没有真实用户可访谈,也没有真实的市场反馈。在没有真实用户的情况下,需求分析的方法论还有意义吗?如何"制造"接近真实的用户反馈?还是说,在校项目阶段,需求分析主要练习的是把模糊问题变清楚的思维方式,方法论本身是次要的?
问题五:对学生或小团队而言,资源有限,我们多数创新是用新技术做旧事(组合创新/微创新),这算不算书中所说的创新?
书中第16章创新分析了"山寨式创新"、创新的时机和创新者的窘境,认为真正有价值的创新往往来自对用户/市场深刻理解后的组合或时机把握。我困惑:对学生或小团队而言,资源有限,我们能做的创新大多是用新技术做旧事(组合创新/微创新),书中对这些“小创新”的态度似乎偏冷。那么,在校期间我们到底应该培养什么样的“创新”?是训练“发现问题的眼光”,还是必须做出“从0到1”的东西才算创新?
四、前车之鉴
读了博客列表中的三篇文章,我的感想如下:
感想一:读《IT小小鸟·辜新星:时刻调整方向 找到人生的蓝海》
链接:
https://book.douban.com/subject/4006425/discussion/22803733/
这篇文章最打动我的有两点,第一是 ABCD 时间管理法:把每天要做的事分成"紧迫且重要、重要不紧迫、紧迫不重要、不重要不紧迫"四类,在专属时间内专心致志地做。我反思自己过去恰恰是"重要不紧迫"的事(平时积累代码、写博客、刷算法题)一直被"紧迫不重要"的事(各种临时任务)挤掉,到了期末才手忙脚乱。作者靠这个方法和"课前预习、课后自习到图书馆关门"拿到了奖学金,说明"时间管理 + 专注"是拉开差距的关键。这学期我决定把"重要不紧迫"的事固定排进日程,而不是等它们变紧急。
第二是 求职目标极其明确:他只投了十家公司,但提前半年准备、针对目标岗位做针对性练习。反观我,过去的"目标"常常是模糊的"学好计算机"——模糊的目标等于没有目标。我打算这学期把目标定具体,再拆成每周可执行的动作。
感想二:读《IT小小鸟·刘帅:在失望中寻找希望》
链接:
https://book.douban.com/subject/4006425/discussion/22803961/
他有两个经历给我的冲击最大:
(1)在清华旁听朱仲涛老师的数据结构课,"当场写程序、从0实现算法、穿插离散数学/内存管理/汇编",让他震撼地发现"原来所有知识是连贯的"。这提醒我:不能只满足于听懂,要自己动手把东西做出来。
(2)在"完美时空"面试中,被问lucene文件索引怎么实现、Java的const怎么实现、自动化测试框架怎么设计,"知其然不知其所以然"全挂。这个教训太真实了:基本功(算法、测试、底层原理)比表面学分重要得多,面试专治"虚"。
感想三:读周阳《学习感想》
链接:
https://www.cnblogs.com/160809232zy/p/5991504.html
这篇让我反思两点:
(1)起步晚不可怕,可怕的是不敢动手、不敢开口问。我有时会因为"基础不如别人"而畏手畏脚,其实多练就是了。她说的"最大的优点就是遇到困难敢向老师求助",也正是我本学期想养成的习惯:把"不懂"摆到台面上,而不是藏着。
(2)她坦诚地承认自己的拖延症和马虎,敢于暴露弱点,恰恰是进步的开始。这也提醒我,学编程不看出身、不看性别,只看热情和坚持。
后台博文编辑界面截图:


GitHub仓库截图:

GitHub地址:https://github.com/LAYG13

浙公网安备 33010602011771号