第一周作业
软件工程第一次作业
| 这个作业属于哪个课程 | 广东工业大学计算机科学与技术56班 |
|---|---|
| 这个作业要求在哪里 | 第一周作业 |
| 这个作业的目标 | 熟悉博客园、GitHub平台;学会Markdown写技术随笔;梳理我作为计科大三学生的学习现状,制定本课程学习计划;阅读《构建之法》提出自己的思考问题;阅读前辈程序员博文吸取经验教训;养成写博客复盘、输出学习内容的习惯。 |
说明:我已经在博客园后台把默认编辑器切换成Markdown模式,后台设置截图放在文章末尾;GitHub仓库地址见附录部分,仓库根目录的README.md已经写好了简单个人介绍。
一、介绍自己,建博客
我是计算机科学与技术专业的大三学生,平时主要在学Java后端相关内容。这次开通博客园随笔,打算把这里当作我日常的学习记录本。
写博客确实挺耗时间的,整理知识点、粘贴代码片段、调整排版都要花不少功夫。但我自己深有体会:很多内容看书的时候感觉看懂了,真正动手把它写出来,才会发现好多地方理解得模模糊糊。长期写博客也可以留存自己的学习痕迹。欢迎同学们看我的随笔,如果我的观点有问题,欢迎反驳交流。
个人隐私信息就不在博客公开了,说说我的一点小优势:我坚持刷Java算法题有8个月。刚开始刷题的时候很吃力,不少中等题完全没有思路。我每周挤6‑8小时来刷题,慢慢从简单题做到中等难度,现在大部分中等算法题我可以独立写出来。刷题锻炼出来的逻辑,对我学Java后端帮助挺大。很多能力不是靠天赋,就是靠一点点练习堆出来的,这份耐心也可以用到做项目上面。
对待课程作业要有底线:作业不是应付老师的任务,是锻炼工程实践能力的手段,坚决不抄袭,尽自己的能力认真完成每一部分。
二、现状、经验和计划
(1)专业现状与技能目标
当初选择计科专业,是我对后端开发比较感兴趣,希望写代码去解决真实业务上的问题。
但距离成为合格的IT毕业生,我还有不少短板。完整的后端项目实战经历很少;软件工程相关内容接触不多,需求分析、单元测试、项目迭代这些能力比较薄弱;Git团队协作实操不多;SpringBoot只会写简单Demo,工程化开发、部署运维几乎没有实际经验。
评分说明:0代表几乎不会,5代表可以通过企业面试,9代表世界一流水平
| 技能项 | 当前水平 | 课程结束目标水平 | 提升手段 |
|---|---|---|---|
| Java后端代码编写实现 | 4 | 6 | 1.完成课程全部编程作业;2.自己写小型Java后端练手项目;3.阅读开源Java项目源码;4.学习内容整理成博客;5.和同学结对互相Review代码;6.遇到问题查官方文档,多向老师同学请教 |
| 程序调试与排错能力 | 3 | 6 | 1.做项目多看报错日志;2.把踩过的bug记录到博客;3.熟悉调试工具的用法;4.帮同学排查项目问题;5.看开源项目bug修复记录;6.每次排错之后复盘思路 |
| Git / GitHub版本控制 | 2 | 7 | 1.课程作业全部用Git管理;2.练习分支、合并、解决冲突;3.尝试给开源项目提简单issue;4.阅读Git官方文档;5.和同学模拟团队协作提交代码;6.把自己的项目上传GitHub保存 |
| 软件需求分析能力 | 2 | 5 | 1.小组作业主动参与梳理需求;2.学习怎么写需求文档;3.看真实项目的需求案例;4.把模糊需求拆分成可实现的小功能;5.看开源issue理解用户需求;6.小组之间互相评审需求 |
| 软件单元测试能力 | 2 | 5 | 1.学习JUnit单元测试;2.给自己写的Java代码补单元测试;3.阅读开源项目的测试代码;4.学习设计测试用例;5.课程作业主动加上测试环节;6.总结踩坑点写进博客 |
| 技术文档撰写能力 | 3 | 6 | 1.给自己的项目写README;2.坚持写技术博客;3.参考优秀开源项目文档;4.小组作业写接口文档;5.写完文档请同学帮忙看;6.学习Markdown排版规范 |
| 软件团队协作开发 | 2 | 6 | 1.积极参加课程小组项目;2.学习团队分工方式;3.练习代码评审;4.用好各类协作工具;5.小组里面主动沟通;6.做完团队项目复盘得失 |
(2)阅读心得
a) 为什么要来上课并且认真参与
大学阶段是我精力最充足,可以全身心学习的时期,等以后工作了很难再有这么完整的整块时间。软件工程这门课不是靠背书本就可以学好,非常看重动手实践。我本身工程实践这块比较弱,课程要求写博客、小组协作做项目,刚好可以弥补我的短板,所以我打算认真跟着课程节奏学。
b) 大学师生关系
上大学我遇到过两种师生模式:一种就是老师上课讲,下课基本没有交流;另一种偏向教练式,老师给任务和方向,学生要主动思考、主动提问。我更希望这门课是教练式的模式。
如果老师布置的作业难度对我来说偏大,我的选择:C:向老师和同学请教,花更多时间,把作业全部完成。
作业难,恰恰代表这部分训练价值高,不能直接摆烂放弃。我会把大任务拆成一个个小模块,多花时间钻研,找同学讨论,主动找老师、助教提问,一点点啃下来。
课程反馈我的选择:D:经常提问题,平时就经常给老师和助教提反馈。
遇到不懂的地方就及时提问,上课、做作业有什么想法也主动反馈,方便课程优化。
c) 参考引用与抄袭剽窃的区别
- 合理引用:借鉴别人的代码、博客思路,明确写好资料来源,在别人成果基础上继续拓展创作。这是学习和软件开发里很正常的行为,尊重别人的劳动。
- 抄袭:直接复制粘贴别人的文字或者代码,不标注来源,直接当成自己写的,没有加入自己独立思考。
- 剽窃:性质更严重,直接把别人的成果冒充成自己的,拿来交作业、评奖,以此获取利益。
学校规定抄袭的作业直接判零分,情节严重还会记处分。本课程写作业,如果参考网上代码或者资料,必须标明来源,不能直接复制粘贴就当作自己的内容。
(3) 未来方向与本学期规划
我之后求职目标是做Java后端开发。
对比身边同学,我的优势:有Java基础;刷题练过逻辑;遇到问题愿意自己查资料;做完东西习惯复盘总结,能够沉下心持续练习。
劣势:缺少完整后端项目实战;工程化知识储备不足;对大型软件架构了解很浅。
本学期个人规划:
- 保质保量做完课程全部作业,坚持写博客输出学习内容;
- 动手写一个小型SpringBoot练手项目,熟悉后端完整开发流程;
- 吃透Git/GitHub常用操作,把自己代码托管到GitHub;
- 积极参与小组项目,练习需求拆解、团队沟通协作;
- 定期复盘,发现薄弱知识点及时补上来。
(4) 课程计划、代码量、时间投入
我对这门课的期待:不只是记住课本概念,能够理解企业真实的软件开发流程,掌握版本控制、软件测试、写技术文档这些工程能力。
课上认真思考,课后花足够时间完成实践任务,积极参加小组讨论。这学期暂时不打算当助教。
目前代码量:Java约3100行;C语言约1200行;Python约400行,合计约4700行。
行业大概情况:想进不错的互联网公司,学生阶段有上万行有效实践代码会比较加分;走科研路线不会硬性看行数,更看重代码质量和实验复现能力。
每周投入这门课总时间(包含上课):12小时。
如果之前浪费不少时间,现在想奋起追赶,我的选择:D:比以前课要多很多,直到达到目标为止。
课程结束计划新增代码量:4500行;分摊每周大概要写375行实践代码。
WOOP计划
- Wish(愿望):课程结束,掌握软件工程基础流程,熟练用Git做团队协作,做完课程小组项目,积累一批技术博客,个人有效代码累计达到9200行。
- Outcome(最好结果):可以独立完成小型Java后端项目,看得懂简单的开源Java项目,能参与团队协同开发;博客可以当作个人学习作品集,为之后找实习做准备;跳出只会写小Demo的阶段,建立工程化开发思维。
- Obstacles(障碍)
- 内部障碍:调试bug久了容易心态烦躁;刷短视频容易分心;有拖延习惯,爱把任务堆到截止日期;部分工程知识点理解门槛高。
- 外部障碍:别的专业课会占用不少时间;遇到难题网上不一定有现成答案。
- 最可能失败因素:拖延,任务一直往后堆,截止日前匆忙赶工,作业质量大打折扣。
- 克服思路:把大任务拆成小份,分配到每一天,不要全部堆到截止时间。
- Plan(If‑then预案)
- 如果写代码忍不住刷手机,就把手机放到别的房间,开25分钟专注计时,计时结束再休息。
- 如果调试bug很久找不到头绪,心态烦躁,就停下编码,记录已经排查过的线索,找同学或者助教讨论,不要死磕代码。
- 如果发现任务已经堆积,立刻列出子任务清单,优先完成核心部分,每天搞定一小部分,绝不拖到最后一刻。
- 如果本周时间被别的课挤占,周末留出整块时间补课程任务,保证每周代码量目标。
三、提有质量的问题
快速通读《构建之法》,提出5个问题,标注对应章节,附上我自己的思考。
问题1:第2章 个人能力和流程
引用原文:“软件工程师的绩效不能单纯看代码行数。”
我的问题:既然代码行数不能评判工程师水平,为什么网上还经常建议学生多写代码积累行数?这两点会不会互相矛盾?
我看很多技术帖子建议学生多敲代码攒行数,但书中明确反对拿行数衡量工程师。拿我自己举例,我写过不少Java练习代码,行数很多,但业务价值很低;也有部分功能,代码很短,但是思考设计花了很久。
我的困惑:对于计科学生,代码行数到底应该是什么指标?仅仅当作参考,还是尽量不要去关注?
问题2:第6章 敏捷流程
引用原文:敏捷开发强调小步快跑,频繁迭代,拥抱需求变化。
我的问题:敏捷开发适合人手紧张的小型后端团队吗?
现实里不少小团队人员少,没有专职产品、测试。敏捷的每日站会、迭代回顾会都会消耗人力。我看到有些开发者说,小团队硬完整套敏捷,反而加重开发负担。
我的困惑:人手不足的小团队,是完整落地敏捷,还是裁剪部分流程?裁剪的边界该怎么把握?
问题3:第9章 项目的管理,工作量估算
引用原文:程序员普遍会低估完成任务需要的时间。
我的问题:书里面给出不少工作量估算方法,为什么实际做项目,工期还是经常估不准?
我做课程小项目的时候,就算按照书里方法拆分任务,最后实际花的时间还是远超预估。
我的困惑:除了开发经验不足,还有哪些根本原因会让工作量估算失效?
问题4:第13章 软件测试
引用原文:自动化测试能够节省后期大量人力。
我的问题:对于需求经常改动的Java后端原型项目,过早写大量自动化单元测试,会不会拖慢开发迭代速度?
我自己写SpringBoot小Demo的时候,只要接口、业务逻辑改动,大量单元测试就要同步修改,维护测试代码开销不小。
我的困惑:什么样的项目适合投入大量自动化测试?学生课程项目需要花很多精力写单元测试吗?
问题5:第16章 创新
引用原文:创新不一定是全新发明,可以在现有基础之上改进。
我的问题:学生课程项目时间、资源有限,怎么做出真正有价值的创新,而不是简单复刻网上现成系统?
很多课程后端项目,基本就是照搬网上系统,改一改界面和简单业务逻辑,很难做出新意。
我的困惑:学生小组项目,可以从哪些实际可行的角度实现创新?
四、前车之鉴
阅读三篇博文,写下自己的感想:
文章A
链接:https://book.douban.com/subject/4006425/discussion/22803733/
主题:时间四象限:A紧迫重要,B重要不紧迫,C紧迫不重要,D不重要不紧迫。
感想:我之前没有刻意用四象限管理时间,总是优先处理紧急的A类事情,经常忽略B类重要但不紧急的任务,比如写博客、练后端项目、读技术书。B类任务当下不会带来压力,但长期会拉开同学之间的差距。很多同学期末临时抱佛脚,就是平时忽视B类任务。之后我打算每周做任务划分,把写博客、做项目这类事情固定安排时间,不要等火烧眉毛才动手。
文章B
链接:https://book.douban.com/subject/4006425/discussion/22803961/
主题:明明是计算机科班,但感觉自己并没有真正学懂计算机。
感想:这点我深有体会。作为大三计科学生,考试分数不算差,但一上手做完整后端项目就到处碰壁。课本理论和真实工程实践中间有一道鸿沟。科班身份不等于自带工程能力,上课听课只是输入,必须动手写代码踩坑,知识才算真正消化。不能拿自己是科班自我安慰,也不用自我否定,正视差距,多做实践补齐短板。
文章E
链接:https://www.cnblogs.com/geniusalex/p/4928713.html
主题:速成培训班对比大学基础课程,底层基础课的意义。
感想:培训班偏向快速实现业务功能;大学学操作系统、计算机网络这类底层内容,见效很慢。短期看培训班出来好像上手更快,但是碰到复杂Bug、底层相关问题,基础好坏的差距就会显现。作为计科学生,不能觉得基础课没用就摆烂,同时也不能只啃书本不动手。大学学习要两头兼顾:吃透底层基础知识,同时多写代码做项目。
附录:GitHub相关说明
我的GitHub仓库地址:https://github.com/K-D-R-T/forever
仓库已经创建完成,仓库根目录README.md写好了个人简单介绍。
博客园Markdown编辑器后台截图、GitHub仓库页面截图,已经上传到本篇随笔末尾。



浙公网安备 33010602011771号