这个作业属于哪个课程 | 2302软件工程 |
---|---|
这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
这个作业的目标 | 完成对软件工程实践课程的总结、个人技术的总结 |
其他参考文献 | 《构建之法》、CSDN |
目录
一、课程回顾与总结
1、回顾自己思考过的5个问题
1.1 以前思考问题的博客
1.2 再解答
A1:
在经过了个人项目、结对编程项目和团队开发项目以后
我简略形成了自己的对于一个优秀程序员的简单要求
通常能达到这些要求的程序员,就是好的:
- 个人项目:
- 遇到不会的问题,懂得自主学习,查阅资料;
- 能够有内发的动力催促自己不断推进进度;
- 团队项目:
- 肯沟通,肯学习,能和项目组员和产品经理沟通报备,达到信息一致,当对产品有不明确时,不闭门造车,而是仔细确定需求;
- 不拖延自己的进度,在有限的时间里能够发挥自己的才能和高效率;
- 做好自己那部分工作,不要太插手别人的工作;
- 通用标准:
- 懂得去运用代码规范(无论是个人的还是团队的),形成高内聚低耦合的开发习惯 (减少返工);
- 肯不断学习新知识,强化自己解决问题的能力;
- 懂得什么时间该休息,什么时间该工作;
- 懂得给自己按照任务的重要性和紧迫性来把大任务分解成小任务;
在有了一系列项目开发经验以后,我认为能够做到以上要求的程序员,即是优秀的程序员。(仅限程序员)
Q2.|3.1 对于一名工程师而言,究竟应该是更”专“一点好,还是更”广“一点好呢?
A2:
对于以前的思考,现在的我更加明确了我的想法:
- 工程师在团队里项目的方向不同,有的人负责精细的工作,比如算法岗,有的人负责统筹的岗位,比如产品经理;
- 所以回答也是很明显了,你在的职位,需要你广,那你就广吧,职位需要你专,那你就专吧。
Q3.|1.1 程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?
A3:
回答与之前的不同。
- 是否要满足小部分的需求,取决于该项目在市场上的定位。
- 像是公众使用的软件项目,总有一些需求是小部分的人的需求,因为其项目的特殊性,而要去满足,去添加功能,例如医疗服务软件,银行软件等,需要针对老年人或者视障人士的大字号或者黑色调版本;
- 像是追求盈利的软件项目,对于不能获得很多利润的需求,就没必要花费太多成本去实现。
A4:
回答与之前不同。
- 顾客其实是知道他们想要什么的。
- 其实顾客们总是知道他们想要什么,只不过需要产品经理负责循循善诱,将其导出。
- 经验丰富的产品经理会使用各种模型方法(诸如原型需求模型等),诱导顾客们表达出他们的真实需求。
A5:
回答与之前的大致相当
- 知识传递: 更有经验的程序员可以向初学者传授知识和最佳实践,帮助他们快速成长
- 错误减少: 观察员可以实时审查代码,这有助于及早发现错误和问题,从而减少后期调试的时间。
- 代码质量提升: 两个头脑总比一个头脑强。即使一方经验较少,不同视角也可能帮助发现问题,从而提高代码质量。
- 学习与指导: 对于经验较少的一方来说,结对编程是学习的好机会,可以从更有经验的搭档那里获得即时的指导和反馈。
- 团队协作: 结对编程增强了团队成员之间的沟通和协作,有助于建立团队精神和信任。
- 压力分担: 当一个人感到压力或困惑时,另一个人可以提供帮助,分担工作负担。
- 创新思维: 不同的经验和知识背景可以激发新的思考方式和创新解决方案。
1.3 新问题
- Q1. 在团队项目中,项目经理如何公平地分配相应的分工给到各个部分的组员呢?
- Q2. 在团队项目中,项目结束后,项目经理如何公平地去评价各部分组员的贡献度呢?
- Q3. 在团队项目中,评价贡献度的时候引起了争论,项目经理要如何去和各个组员沟通呢?
- Q4. 在团队项目中,当项目进度与预期出现严重不符的时候,项目经理该如何督促各部分的组员及时完成任务呢?如果实在无法完成,该如何压缩或者舍弃功能模块呢?
- Q5. 在结对编程中,当伙伴的进度和自己不大匹配(超前或者落后)的时候,自己要如何与伙伴沟通,来使得项目整体的进度不会出现太大的差别呢?
2、5个阶段,每个阶段收获最大的知识或能力
2.1 需求阶段
- 在个人项目和团队项目中,我能够很好根据NABCD分析工具分析用户的需求;
- 团队项目中,我在和项目经理一起使用原型模型需求分析方法,以及从用户的角度思考的方式,和UI开发人员以及项目开发人员沟通交流,市场用户调查等方式,成功完成了需求分析文档的编写;
- 我收获到了使用NABCD法和原型模型需求分析等方法来分析用户需求的能力。
2.2 设计阶段
- 在结对编程和团队项目中,我学到了如何将整个项目的功能分成清晰的功能模块;
- 我还收获到了设计前后端接口文档的能力,并成功将前后端接口运用到实际的项目中。
2.3 实现阶段
- 在结对编程和团队项目中,我都负责比较多的部分;
- 在结对编程中,我学习了Vue3框架的前端编写和java的SpringBoot框架,学了如何使用Gson和fastjson来快速处理解析json格式的数据,并学会使用axios协议网络请求和部署服务器方面的知识;
- 在团队项目中,我主要学习了使用微信小程序原生开发封装的,基于微信云平台的Node.js云开发,编写了非常多的云函数,并利用这些云函数成功实现了团队项目中各色功能,诸如:互助社区帖子,评论点赞,收获评论收获点赞等功能。
- 在实现阶段,我还学到了和团队队友沟通的知识。懂得勤于沟通是我最大的收获,在团队项目中克服拖延的恐惧,和队友们一起协作,是我收获到最宝贵的宝藏。
2.4 测试阶段
- 在个人项目、结对编程中,我收获到了使用java的SquareTest的单元测试插件来进行java程序测试的能力。
- 在团队项目中,我收获到了一个教训。软件项目的测试,一定要有一个规范的过程,而不能像无头苍蝇一样。
2.5 发布阶段
- 在个人项目中,我学会了打包java程序为jar包的方式
- 在结对编程中,我学会了部署服务器的方法(包括前端Vue打包,后端SpringBoot的maven打包)
- 在团队项目中,由于发布小程序要经过的审核阶段比较严苛,所以没有发布,但是我学习到了发布一个软件大致的流程,诸如审核、发布、推广等。
3、结合经历,谈谈理解或心得
3.1 个人项目
- 其实在个人项目中,主要还是因为没有类似的数据操作经验,比如说对于json数据的解析和输出,不是很熟悉的话,一开始学习处理就比较困难,容易造成压力以及退缩感,但是当熟练掌握了如何处理json后,就轻而易举了。
3.2 结对编程
- 结对编程,顾名思义,和伙伴的沟通交流十分重要。结对双方都要非常清楚这次的软件开发项目的分工,并且不可互相拖延,进度上才不会有较大的风险。在结对过程中,双方都能互相帮助才是最好的结对,这样才能有效开发出好的项目。
- 除此之外,在结对的过程中,能更高效地学习新的知识,来自于开发项目中的疑难杂症所激发出的自学的技能,以及结对队友为你提供的帮助,这些难点通常只需要有人指点一下即可解决。
- 结对队友有的时候能很好地帮助你分担压力,相比于个人开发一个项目,肯定是非常舒服的。
3.3 团队项目
- 团队项目中,我认为沟通是最重要的。有不清楚的环节、不明晰的设计方面,一定要询问,询问项目经理,询问队友,问清楚以后再设计才不会造成误会,造成返工。
- 对于团队开发的时候,可以由项目经理来制定一个总的开发方案,以及开发时的代码提交规范等;
- 项目经理要做的工作挺多的,如果能够做到给每个组员都分配适应的工作就更好了,队员们才不会像无头苍蝇一样不知道要做什么,从而提高开发效率,减少争执和误会。
- 在团队中,不要去拖延自己的进度,非常重要!
4、对各个课程目标的掌握程度
目标 | 掌握程度(百分制) | 解释 |
---|---|---|
目标1:理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。 | 96分 | 我在开发软件的时候,比较理解软件工程师的职业道德规范和实践要求,会按照符合当代社会价值观的方式,去开发传递积极向上正能量的软件。 |
目标2:掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。 | 90分 | 我在团队项目中,很好地做到与项目经理合作一起调查使用NABCD方法讨论分析用户需求,通过和UI开发人员以及项目开发人员的沟通,达到表达用户需求,建立需求分析模型的成果。 |
目标3:掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。 | 85分 | 在团队项目中,我主要还是遵循团队中协商规定的代码编写规范,基本能遵循着用况图、数据库设计文档、前后端接口文档,面向流程体系结构来进行设计。 |
目标4:能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。 | 80分 | 在团队项目中,我能做到基本的设计模型评判,选取较好的设计方案,或者去改正队友的设计方案,基本具有创新设计意识。 |
目标5:遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。 | 90分 | 在团队项目的开发过程中,我都是采用需求规格说明书、系统设计说明书、数据库设计说明书等文档来攥写方法,能够有效与同行交流。 |
目标6:具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。 | 95分 | 在团队中,我不仅负责开发后端云函数,还负责一小部分的前端样式,除此之外我可以充当团队内项目经理的副手,帮助经理组织协调好整个团队的节奏和工作。 |
目标7:能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。 | 70分 | 在这一目标上,我只能做到比较基础的估算,由于没有经验,因此基本上只能做比较宽泛的时间安排。在学习的过程中,我初步学会使用Git管理项目。我还在逐步体会管理复杂软件项目的流程。 |
二、个人技术博客
概述:
- 在编写微信小程序后端云函数的时候,基本上是要调用数据库的;
- 但是对于高范式的数据库设计,有的时候需要用到二到三个表连接查询,这时候就要仔细思考如何运用微信云函数的多表连接查询技术;
- 除此之外,该篇技术博客还将介绍几个云函数使用技巧;
非常感谢林老师、三位助教、还有结对编程开发的伙伴、团队项目开发的七位伙伴们,本门课程的学习,使我受益匪浅。这些收获,必将活用于我今后的工作学习生活中。
Sun Jun 02 2024 22:16:33 GMT+0800.(at FZU)