软件工程第一周作业
| 这个作业属于哪个课程 | 软件工程 |
|---|---|
| 这个作业要求在哪里 | 第一周作业 |
| 这个作业的目标 | 建立个人博客和Github;梳理自身专业现状、差距与学期学习计划 |
一、介绍自己,建博客
我是一名广工计科专业的学生,目前的学习方向是前端开发。
写博客对我来说是个新尝试,老师说“写博客花时间,但是很有意义,请坚持一段时间看效果。”我很赞同,写下文字的过程本身就是思考和总结的过程。书写是一种很好的输出方式,把自己学习的、思考的东西整理成文,加深理解的同时也留下学习痕迹。希望我能在写博客中获得更多思考和成长。
我的兴趣爱好较多,但都较杂且不太精通。比较突出的是运动能力吧。初二在学校自己天天往体育馆跑,从一开始完全零基础没什么人一起打,到高一竟然也能和高手们一起打球一起练习。可惜到了高三,几个固定搭子毕业的毕业,还有的去打排球了。于是又跑去打羽毛球,打到大一。因为大一下选了羽毛球课,所以每周的打球次数达到了三次以上,在技术、步伐和体能上有了很大进步,于是在大二顺利进入院队。也参加了计算机学院每年的女子单打比赛,虽然大一大二两年都是亚军。运动给我带来了很大的变化,最大的变化是从以前十分内向的性格变得可以大方地和其他人沟通,沟通能力显著提高。同时,运动也很注重基本功,每一次的突破都让我更相信“量变能引起质变”,让我对很多事都能更加专注、坚持。
二、现状、经验和计划
(1)技能调查
为什么选择计算机
我选择计算机专业一是身边人的影响,自己也比较好奇,感兴趣。二是比较热门,分数刚好够,就来了。
离合格 IT 毕业生的差距:
- 专业知识:数据结构、算法有基础,但复杂算法实战练习偏少;后端、数据库、系统知识掌握比较薄弱;对软件工程规范、测试、项目架构理解停留在理论,缺少项目实战。
- 专业技能:前端 React 等工具可以做开发;Python、FastAPI 刚入门;调试排错、Git 高级用法、Linux 命令只掌握基础;项目大多是个人小 Demo,很少多人协作项目经验。
- 综合能力:需求分析、bug 根源定位、文档撰写、项目复盘能力不足;遇到复杂报错容易依赖 AI,独立排查问题能力不强。
| 技能项 | ①目前水平 (0‑9) | ②课程结束目标水平 (0‑9) | ③提升手段 |
|---|---|---|---|
| 1. Programming:Comprehension 程序理解 | 4 | 6 | 1. 多阅读开源项目、实验室项目源码;2.遇到报错优先自己分析堆栈日志,不全靠AI直接给答案;3.练习复现 bug,定位问题根因;4.写调试笔记,记录踩坑点; |
| 2. Programming:Design 架构、模块化、接口设计 | 3 | 5 | 1.参考优秀开源项目的目录结构;2.写简单接口设计文档; |
| 3. Programming:Implementation 模块实现,逐步细化 | 3 | 5 | 1.把大任务拆解成小函数、小模块实现;2.实验室分配的小任务上手练习; |
| 4. Programming:UnitTest 单元测试、测试思维 | 2 | 4 | 1.学习测试相关基础概念;2.手动测试时记录测试用例;3.看别人的开源项目测试代码 |
| 5. Personal Software Process 个人源码管理 Git | 4 | 6 | 1. 所有练习项目都使用 Git 管理;2.练习规范 commit提交信息;3.学习分支简单操作;4.用GitHub 维护个人仓库; |
(2)阅读心得
a) 你为何要来上课并且认真参与
来上课认真思考,不光是学课本知识。 第一,可以练专注,上课就是锻炼集中注意力的机会,如果总是走神,以后工作很难沉下心干活。 第二,跟着老师的思路,能搭建起完整的专业思维,光自己碎片化看书,思考容易很零散。 第三,不能简单觉得课没用、老师讲得一般就摆烂,现在学会从一般的课堂里汲取有用内容,以后上班遇到不完美的环境也能成长。当然也不是只听,脑子要动起来,不能白白浪费课堂时间。
b) 师生关系与面对困难的态度
我希望这门课是教练和学员的关系。老师就像健身教练:有实战经验,给出训练项目,指出我的代码、项目里的问题,及时给反馈,设置合理的难度标准;而学习、写代码、解决问题这些主要靠我自己主动完成。老师不会放水,也不会什么都帮我做好;我也要主动提问、接受批评,不能指望混一混就拿高分。
如果老师布置的作业对我来说有些困难,我会:向老师和同学请教,花更多时间,把作业全部完成。
c)参考和抄袭、剽窃的区别
做项目写作业可以参考别人资料,也可以拿开源代码二次开发,但一定要写清楚来源,自己要有新增的思考和功能,这是正常的学习开发。
抄袭剽窃就是直接照搬别人文字或者代码,不标注出处,假装是自己写出来的。课程学习中引用资料需要标注来源,使用开源项目要遵守协议,独立完成作业,不把作业借给他人抄袭。
(3)未来规划
未来,我想做软件开发工作,本科毕业后直接就业,从事 Web方向的开发工作。
相比其他同学,我的优势:
- 有前端基础,已经掌握 HTML、CSS、JavaScript,学习过 React 框架;
- 已经进入课题组参与实际项目,能够接触真实项目开发流程,提前熟悉 Git、项目协作、文档编写这些工程实践,不是只学习课本理论;
- 愿意主动补齐后端、AI 端相关知识,不局限只做前端,朝着全栈方向学习,能够理解完整项目前后端交互逻辑;
- 可以踏实完成任务,遇到问题愿意查阅资料、调试代码,动手实践意愿较强。
我的劣势:
- 后端开发、数据库、Linux 相关的实战经验不足;
- 算法刷题量偏少,面试算法题训练不足;
- 大型项目的架构思维欠缺,对于项目整体设计、性能优化接触较少;
- 目前项目经历还比较单薄,缺少可以写进简历的完整落地项目。
(4)课程计划与期待
我对本课程的期待:不只是背诵课本概念,而是真正体验完整软件项目流程,学习团队合作、需求分析、版本管理、文档撰写,把理论落实到真实项目开发。
我打算怎样度过这门课:认真上课并且认真思考,认真完成老师布置的实践作业,有问题提问。
| 编程语言 | 代码量(行) |
|---|---|
| HTML/CSS/JavaScript | 3200 |
| Python | 1300 |
| C 语言 | 1800 |
每周投入时间
每周计划投入10小时在这门课(包含上课时间)。
我选择C:比以前的课稍多一些。既要完成课内学习,也要兼顾实验室项目,适度增加投入。
我计划在本课程结束时,完成5000行代码量,每周应完成400行代码量。
WOOP 计划
- Wish:完成课程项目,熟悉软件工程流程,有可以写进简历的项目。
- Outcome:熟悉团队开发,项目上传 GitHub,为实习增加项目经验。
- Obstacles:急于编码忽略文档、拖延赶工、调试容易心态浮躁。
Plan
- 如果我拿到项目任务想直接上手写代码,那就强制自己先写完文档,经过小组讨论确认后,再动手编码。
- 如果出现拖延,不想干,那就先坐下打开电脑,再把任务细分成小任务。
- 如果调试 bug 心态烦躁,不想继续排查,那先暂停,休息 15 分钟,站起来走两圈,整理问题日志,再重新定位错误。
3. 提有质量的问题, 给认真的反馈
阅读《构建之法》后的5个问题:
问题1:第2章个人技术和流程
原文观点:单元测试必须由最熟悉代码的人(程序的作者)来写。
我的问题:在课程小组开发场景下,有时候我写的模块,我主观上知道逻辑,但是写单元测试会占用不少时间。那如果时间紧张,可不可以交给小组里其他同学来帮我写我的代码的单元测试?别人编写单元测试,有哪些优势和隐患?
我的现实经验:小组做课程项目,赶截止日期,自己优先实现业务功能,不想花时间写单元测试,就想着让组员帮忙补单元测试。但是组员并不熟悉我代码内部逻辑,写出来的测试用例大多只覆盖正常流程,很难命中隐藏边界 bug。
我的困惑:既然别人也可以写测试,那为什么原书强调单元测试最好由代码作者本人完成?什么特殊情况下可以交给他人来写单元测试?
问题2:第3章 软件工程师的成长
书中提到软件工程师要做自我评估,通过分数衡量自己能力。
引用片段:“软件工程师需要不断衡量自己的能力,看到自己的成长。”
我的问题:自我评估很容易高估或者低估自己水平,如何避免自我评估出现较大偏差?
现实中,有时候自我感觉学得不错,但实际动手写代码却漏洞百出。除了考试、面试之外,还有哪些客观手段评估工程师能力?
问题3:第4章 两人合作 4.5结对编程
书中内容:结对编程,两个人共用一台电脑,一人编码,一人审查,定期互换角色,可以减少bug,互相启发。同时书中也提到结对编程会消耗双倍人力时间。
我的问题:课程小组作业时间紧张,每个人都有自己的任务要完成。结对编程是否适合我们学生课程作业?什么场景适合结对,什么场景反而不如分开各自开发?
我的经验:之前和同学尝试结对写一小段代码,两个人思路不一样,经常争论,进度反而比分开写更慢。
我的困惑:我们学生水平参差不齐,结对编程如何避免低效争吵,真正发挥它的优势?
问题4:第11章 软件设计与实现
引用片段:“不要过度设计,避免为不存在的需求做设计。”
我的问题:怎么区分“合理预留扩展”和“过度设计”?边界在哪里?前期完全不预留扩展,后期需求改动又要大规模重构。开发时如何把握这个平衡点?
问题5:第8章 需求分析
书中内容:做软件不能只听用户口头描述,需要做用户调研、场景分析,区分用户想要什么和用户真正需要什么。学生项目经常把自己的想法直接当成用户需求。
我的问题:课程大作业中,我们小组基本都是给自己做项目,很难找到真实外部用户做调研。这种情况下,学生要如何辨别“我以为用户需要”和“真实的用户需求”?
我的经验:做课程项目的时候,经常按照我们小组几个人的喜好设计功能,做完才发现,如果换成别的同学使用,很多功能并不实用。
我的困惑:缺少真实用户,学生课程项目怎么做靠谱的需求分析?
反馈选择:D:经常提问题,平时就经常给老师和助教提反馈。
遇到不懂的地方及时提问,课程反馈认真填写,客观真实表达想法,帮助改进教学,相互帮助,相互进步。
4. 前车之鉴
文章1:https://www.cnblogs.com/xiaozhi_5638/p/4485805.html
标题:一直在路上——记我从初中到本科近十年的学习成长历程
感想:读完这篇文章我感触很深。作者来自农村,高中严重偏科,高考只考上普通二本,上大学前几乎没有接触过电脑,稀里糊涂选择了软件工程专业,却在大学找对学习路径,最后成长为技术人员还参与创业。
大一阶段是他学习道路的转折点,从杂志文章明白了学习计算机要注重实践。不再埋头啃书本理论,而是去机房上机,把书上的示例全部亲手敲出来调试。这是很多计算机学生容易踩的坑:看书看得懂,就误以为自己掌握知识,很少动手实操,真正写代码就处处碰壁。我自己也经常会有这种情况,看完教程感觉理解透彻,动手编码就暴露出很多问题。
文中有个观点刷新了我的认知:不要盲目迷信实习经历。作者大四一心外出实习,认为实习项目是求职资本,后来才意识到,企业招聘应届生,更看重学生的基本功与自学潜力,而不是有限的实习履历。告诫我现阶段不能一味追求实习,要优先夯实专业基础。
作者给学弟学妹的四条建议让我收获很多:程序员大部分知识依靠自学,课本内容有限;学好英语,很多疑难问题需要查阅外文资料;重视基础,不要盲目追逐花哨项目;拓展眼界,多关注行业动态,不能闭门造车。
作者起点普通,高中还严重偏科,但依靠正确学习方法、大量动手实践、坚持自学,在IT行业站稳脚跟。这让我意识到,高考成绩、入学前是否接触过计算机,并不是决定性条件。找对方法,踏实实践,普通学生同样可以学好计算机。
文章2:https://www.cnblogs.com/unruledboy/p/DevCareer.html
标题:我的软件开发生涯(10年开发经验总结和爆栈人生)
感想:读完《我的软件开发生涯(爆栈人生)》,作者并不是计算机科班出身,大学本科是英语专业,却靠着极强自学能力走上软件开发道路,这一点对我触动很大。他从 DOS 时代就痴迷编程,课余熬夜钻研技术,高中就和一群志同道合的同学互相切磋,早期很多知识并不是从课堂得来,印证了 “师傅领进门,修为在个人”。
有两点给我很深启发:
第一,比起掌握一大堆编程语言,学习能力才是程序员的核心底色。作者经历过多家公司,接触 ASP、.NET、Java、数据库、前端、GIS 等五花八门的技术,很多技术上岗之后才现学现用。技术框架会不断过时淘汰,但快速学习、举一反三的能力可以长期受用。反观我自己,有时候会贪多求全,想把很多技术都过一遍,但基础没有打牢。提醒我应该先把一套技术栈吃透,再向外拓展,而不是一味追求会的工具数量。
第二,软件开发不是单打独斗的英雄主义。文中提到早期高中同学虽然个人技术很强,但走向职场之后,单枪匹马很难完成大型项目。同时他也强调代码规范、团队协作、沟通能力的重要性。程序员不只是写代码,还要会写简历面试、和同事协作、理解客户真实需求。这和《构建之法》软件工程思想是相通的,软件工程看重团队、流程、文档,而不是只看个人编码水平。
另外他的职场经历也很现实,遇到过不公、混乱的公司环境,也提到简历要诚实,不要夸大 “精通 XX 技术”。很多学生写简历习惯堆砌一堆技术名词,实际只是简单 demo 水平。告诉我在校做项目要脚踏实地,简历如实描述自己做过的内容,不要过度包装。
GitHub相关
我的仓库地址:https://github.com/jingmo2005/jingmo2005

博客编辑界面截图


浙公网安备 33010602011771号