软件工程实践总结-Learning By Doing

这个作业属于哪个课程软件工程-23年春季学期
这个作业要求在哪里软件工程实践总结&个人技术总结
这个作业的目标课程回顾与总结、个人技术总结
其他参考文献CSDN GitHub 菜鸟教程

第一部分:课程回顾与总结

问题思考的博客链接

寒假作业链接

曾经的问题

Q1:学生该如何做到像健身学员一样找到自身定位点,把握老师身上的那套健身资源,朝自己的目标前进呢?

旧回答
我们师生之间的学习与健身会员与教练之间的学习是一样的,只是对于健身教练来说他更能清晰的看清的做的不规范的地方,以及身上肌肉的薄弱。所以最主要的是能认清自己的水平,知道自己想要什么就如同跟教练说我想要强化一下我的肩一样,向老师提出自己的问题,咨询解决问题的方法。这样才能把握老师身上的那套健身资源,朝自己的目标前进。

新回答
在这次软件工程实践中担任推荐算法设计的职位,我再次思考如何像健身学员一样找到自身定位点,将老师身上的健身资源应用到自己的学习中,并朝着自己的目标前进。我通过以下方式解答了这个问题:

  1. 自我评估:我首先进行了自我评估,明确了自己的技能、兴趣和目标。我思考了自己在软件工程领域的优势和弱点,并确定了自己想要发展的方向和目标。这样我就能更好地了解自己在做推荐算法设计时的定位和需求。
  2. 寻求导师或学长的指导:类似于健身学员寻找教练指导一样,我也寻求了上一届也做推荐算法的学长的帮助。我积极与他人进行沟通,分享我的兴趣和目标,并请教他们在推荐算法设计方面的经验和建议。他们的指导帮助我更好地理解领域知识和实践技巧,使我能够更好地应用可以触及的资源。
  3. 借鉴优秀的实践案例:像健身学员学习他人的成功经验一样,我也研究了一些优秀的推荐算法设计案例。我阅读了相关的文章、网络上的教学视频以及实际应用案例,从中学习他人的设计思路和方法。这些案例为我提供了启发和借鉴,让我能够更好地应用可触及的资源并朝着目标前进。
  4. 综上,通过自我评估、寻求他人指导和借鉴优秀实践案例,我能够更好地找到自身定位点,并将可以触及的资源应用到推荐算法设计中,以实现自己的学习目标。

Q2:花费时间越多,代表工作量越高吗?

旧回答
我认为花费事件多,工作量确实是会显得多。但是还需要考虑工作效率或者说强度的关系,工作量应该是工作时间以及工作效率二者的乘积。

新回答
在我的软件工程实践中,通过学习和实践,我发现花费时间多并不一定代表工作量一定更高。尽管在一些情况下,花费更多的时间可能确实与更大的工作量相关,但这并不是绝对的。

  1. 在软件开发中,工作量的衡量不仅取决于时间,还取决于工作的复杂性、难度和涉及的任务数量。有时候,一个看似简单的任务可能需要花费较长的时间来完成,而一个复杂的任务可能在较短的时间内就能完成。
  2. 此外,我的工作效率也是一个关键因素。即使在相同的时间范围内,高效率的工作方式可能会产生更多的成果,相比于低效率的工作方式。
  3. 在我的情况中,当我在软件工程实践中担任推荐算法设计的角色时,我遇到了一些困难,如算法的生涩难懂、开发过程中的bug、测试阶段的前端对接以及云端部署。我通过阅读相关书籍、实践和讨论来解决这些困难。
  4. 通过阅读相关书籍,我增加了对推荐算法的理论知识的了解,从而提高了自己的算法设计能力。通过实践和编码,我解决了开发过程中遇到的各种bug和问题,不断提升了自己的技术水平。与团队成员讨论和对接前端,我改善了工作成果,并加深了对整个开发流程的理解。在云端部署方面,我通过阅读文档和教程,以及花费时间进行尝试,最终成功完成了任务。
  5. 因此,我的经历表明,在解决问题和完成任务时,时间投入是重要的,但并不是唯一的衡量标准。工作量的衡量应该考虑到任务的复杂性、难度、数量,以及个人的工作效率和解决问题的能力。

Q3:结对编程在双方差距较大时的意义是什么?

旧回答
我认为结对编程在双方差距较大时,能力强一方在向另一人解释一些问题时是能更好的使自己的编程思路清晰,以及在修复bug的时候能更为快速,对于能力较为弱的那人则是一次有人手把手指导的编程练习,对于双方都是有一定的好处。

新回答
对于我而言,结对编程在双方差距较大时的意义主要体现在以下几个方面:

  1. 首先,结对编程促进了知识的共享和互相学习。在推荐算法设计方面,我和我的结对队友都是缺乏经验的,我们都面临着算法生涩难懂的问题。然而,通过合作编程,我们能够共同探索和学习相关的知识。我们一起阅读相关的书籍和资料,互相讨论、解释和理解其中的概念。通过这个过程,我们共同克服了学习阶段的困难,并且相互补充知识,提升了我们的算法设计能力。
  2. 其次,结对编程增强了问题解决能力和思维的多样性。在开发阶段遇到的众多bug让我深思,但是与我的结对队友一起,我们能够共同分析和调试代码,找出问题的根源并提出解决方案。他的不同视角和思考方式为问题的解决提供了新的思路和创新的想法。我们通过相互讨论和合作,共同攻克了开发阶段的困难,并且提高了我们的问题解决能力。
  3. 此外,结对编程还帮助我们更好地应对变化和挑战。在测试阶段与前端的对接中,我们发现之前的一些工作成果需要进行调整和改进。虽然这可能导致一些挫折和困惑,但通过共同努力,我们重新审视和修改了之前的工作,使其与前端部分更好地配合。这个过程中,我们学会了适应变化和灵活调整,提高了我们的适应能力和灵活性。
  4. 最后,在发布阶段的云端部署中,我花费了许多时间才成功尝试。然而,在这个过程中,我的结对队友一直陪伴着我,鼓励和支持我。我们一起查阅文档,研究云端部署的技术,并进行实践。尽管遇到了挑战,但通过我们的合作努力,最终成功地完成了任务。这个过程不仅增强了我们的毅力和耐心,还加深了我们之间的信任和团队合作意识。
  5. 综上,结对编程在双方差距较大时具有重要意义。通过结对编程,我得以与我的结对队友共同面对困难和挑战,共同学习和成长。我们通过看书、实践和讨论的方式相互支持,解决了学习、开发、测试和发布过程中的问题。这种合作经验不仅提升了我的技术能力和问题解决能力,也增强了团队合作意识和适应能力,为我们的个人发展和职业成长奠定了坚实的基础。

Q4:结对编程中,应选择与自己能力互补的搭档比较好还是与自己能力相近的搭档比较好?

旧回答
我认为应该选择与自己能力互补的搭档比较好,这样双方可以分别完成自己擅长的部分,这样子节省开发时间,并且可以提高开发的程序的质量水平。

新回答
在软件工程实践中,选择与自己能力互补的搭档进行结对编程是有意义的。与能力互补的搭档合作,可以在多个方面帮助我克服遇到的困难和挑战。

  1. 首先,与能力互补的搭档合作可以提供更全面的技术覆盖范围。如果与我有相似技能和知识的搭档合作,我们可能会面临相同的难题和限制,可能会在相似的领域出现盲点。然而,与能力互补的搭档合作,我们可以互相补充技能和知识,充分利用彼此的优势。这次实践中,在推荐算法设计方面,我在学习阶段遇到了困难,搭档可以分享他们的学习资源和经验,帮助我理解和掌握算法的概念和方法。
  2. 其次,与能力互补的搭档合作可以促进学习和成长。当我与搭档共同面对困难和问题时,我们可以通过讨论和相互协作的方式共同解决。在这个过程中,我可以从搭档的思考方式、解决问题的方法和实践经验中学习到新的知识和见解。通过与搭档的合作,我可以提高自己的技术水平,并且加深对推荐算法设计的理解。在我遇到的问题中,我通过与搭档的合作和讨论,共同寻找解决方案,并通过实践来验证和应用这些解决方案。
  3. 最后,与能力互补的搭档合作可以增强团队的协作能力。在开发过程中,我们可以相互支持和帮助,共同努力克服各种挑战。我们可以互相分享进展和发现的问题,一起进行代码审查和测试,确保项目的质量和稳定性。通过与搭档的密切合作,我可以提高自己在团队合作、协调和沟通方面的能力。
  4. 综上,选择与自己能力互补的搭档进行结对编程是比较好的选择。这样的合作可以充分利用彼此的优势,促进学习和成长,并增强团队的协作能力。通过看书、实践和讨论,我逐渐明白了与能力互补的搭档合作的重要性,并通过与我搭档的经验共享和合作中不断加深了对这个问题的理解。

Q5:结对编程总能做到1 + 1 > 2 吗?

旧回答
我认为结对编程可以做到1 + 1 > 2 ,当双方能力互补时,双方可以分别完成自己擅长的部分,最后完成的代码就能保证1+1=2,再在开发的过程中双方能互相帮助最终完成1+1>2的效果。

新回答
在软件工程实践中,我与一个与我相似,对推荐算法没有过多接触的队友进行了结对编程。我们共同承担了推荐算法设计的任务,并在开发过程中面对了许多困难和挑战。尽管我们都遇到了学习阶段算法的复杂性、开发阶段的bug、测试阶段与前端的对接问题以及发布阶段的云端部署挑战,但我们一起努力面对,并相互支持和帮助。结对编程的优势在于合作双方的相互补充和协作。通过结对编程,我们能够共同解决问题,互相学习和分享知识、经验。我们通过阅读相关的书籍和资料,进行讨论和探讨,加深了对算法的理解。

  1. 在开发阶段,结对编程让我们能够更快地发现和解决问题。我们一起审查代码,互相提供反馈和建议,减少了bug的数量,并提高了代码质量。通过相互协作,我们能够共同克服困难,节省了调试和修复错误的时间。
  2. 此外,结对编程还有助于在测试阶段与前端的对接中提高效率。我们共同进行系统测试,发现了一些之前未考虑到的问题,并及时进行修改和改进。通过结对编程,我们能够更全面地测试和验证我们的工作成果,确保其与前端的协作顺利进行。
  3. 最后,在发布阶段的云端部署中,我花了很多时间尝试成功地进行部署。通过与队友的结对编程,我们共同研究和实践了云端部署的相关技术,并相互支持和帮助。这种合作方式使我们能够克服困难,最终成功地完成了部署过程。
  4. 然而,要做到1 + 1大于2,还需要注重沟通和团队合作,以最大程度地发挥结对编程的优势。通过良好的沟通和紧密的合作,我与我的队友能够共同解决问题,提高效率和质量,并取得更好的结果。在结对编程中,我们注重相互学习和分享知识,倾听彼此的意见和建议,并鼓励开放的思维和积极的反馈文化。
  5. 最后结论是:结对编程通常可以实现1 + 1大于2的效果。通过相互学习、协作和解决问题,我与我的队友能够更好地应对挑战,提高效率和质量。这种合作方式使我们能够共同成长,并为项目的成功做出更大的贡献。要做到1 + 1大于2,除了结对编程本身的优势,注重沟通和团队合作是至关重要的。通过良好的沟通和紧密的合作,我与我的队友能够最大程度地发挥结对编程的优势,共同解决问题,提高效率和质量,并取得更好的结果。

产生的新问题

Q1:当团队成员之间的角色和责任分配不明确或不平衡,工作负担不均或责任推诿的情况发生时,我作为这个团队的一个组员该怎么处理以保证团队的开发质量和效率,甚至团队的和谐氛围。

Q2:如果团队成员之间因为位置、性别、沟通习惯造成沟通矛盾、信息传递不准确或协调不一致的问题,导致工作进展受阻或产生误解的时候,如何进行调解或者改进。

Q3:要是团队成员之间存在合作冲突、意见分歧或个人利益冲突,如何进行妥善处理和解决,以确保团队的凝聚力和合作效果。

Q4:团队成员在时间和进度管理上存在差异,导致任务延迟、交付延误或无法按时完成工作,这时作为leader该怎么改变这一状况。

Q5:当团队成员具有不同的技术背景和能力水平,导致在选择技术方案、解决问题或进行代码审查时出现困难时,该如何更好地应对这个问题,并推动项目向前发展。

每个阶段收获最大的知识或能力

需求阶段

在需求阶段,我学会了有效沟通和理解项目需求。与我的队友一起,我学会了询问明确的问题,分析用户需求,并将其转化为可行的功能要求。我学会了倾听和理解他人的观点,并将其纳入需求定义的过程中。这种需求分析和沟通的能力对于项目的成功至关重要。

设计阶段

在设计阶段,我获得了系统设计和架构的知识。与我的队友一起,我学会了将需求转化为具体的设计方案,定义系统的组件和模块,并考虑系统的可扩展性和可维护性。我通过与队友的合作,互相审查和讨论设计方案,提高了设计质量和思考问题的深度。

实现阶段

在实现阶段,我获得了编码和算法实现的知识。通过与队友一起面对学习阶段的困难,我克服了算法的生涩难懂,逐渐掌握了推荐算法的实现方法。我学会了将设计方案转化为具体的代码实现,并解决了在开发过程中遇到的各种bug。这个阶段增强了我的编程能力和问题解决能力。

测试阶段

在测试阶段,我获得了软件测试和质量控制的知识。与队友一起,我学会了编写测试用例,进行功能测试和集成测试,以确保系统的正确性和稳定性。测试阶段与前端对接时,我推翻了之前的一些工作成果,这让我认识到测试的重要性和与其他团队成员密切协作的必要性。

发布阶段

在发布阶段,我获得了云端部署和发布管理的知识。我花了很多时间尝试云端部署,并最终取得了成功。通过这个过程,我学会了如何将应用程序部署到云端环境,并管理发布过程中的配置和版本控制。这个经验增强了我在云计算和部署管理方面的技能。


总结起来,通过与队友结对编程,在需求、设计、实现、测试和发布阶段中,我分别获得了以下主要知识或能力:需求分析和沟通能力、系统设计和架构能力、编码和算法实现能力、软件测试和质量控制能力以及云端部署和发布管理能力。这些知识和能力的积累将对我的未来软件工程实践和职业发展产生积极影响。

个人项目/结对编程/团队项目的经历的理解或心得

个人项目

在个人项目中,我收集了澳大利亚网球公开赛的相关数据,并实现了一个能够对赛事数据进行统计的控制台程序。这个项目让我有机会深入了解澳大利亚网球公开赛的背景和相关数据,同时提升了我的数据收集和处理能力。通过编写统计功能,我学会了如何从大量数据中提取有用的信息,并将其以适当的方式呈现出来。

结对编程

在结对项目中,我与我的搭档一起设计了一个平台,通过图表等形式直观显示澳大利亚网球公开赛的选手信息和赛事结果。我们共同努力实现了选手排名、每日赛程、详细赛况和晋级图等功能。这个项目让我体验到了与队友密切合作的乐趣,我们互相讨论和分享想法,共同解决问题。通过这个项目,我学会了如何将想法转化为交互友好的原型,并通过图表和数据展示提供更好的用户体验以及学到了如何与搭档合作并解决问题,还深入理解了软件开发过程中的需求分析、设计、编码、测试和优化等方面。我学会了更好地理解用户需求,并将其转化为实际的功能和界面设计。此外,我也增加了对赛事数据处理和展示的经验,以及对历史和背景介绍页面的设计能力。

团队项目

在校园二手交易平台微信小程序的团队项目中,我担任推荐算法设计的角色。这个项目是一个团队协作的大型项目,我与其他队员紧密合作。在开发过程中,我遇到了许多困难,包括算法的理解困难、bug的处理和与前端的对接等。然而,通过与团队成员的协作和讨论,我克服了这些困难,并不断提升自己的技术能力和解决问题的能力。这个项目让我体验到了团队合作的重要性,学会了如何在团队中发挥自己的专长,与他人合作实现共同目标。同时,我也学到了软件开发过程中的重要环节,如测试和部署,以及对用户体验的关注。
我在团队合作中不断成长,并将理论知识转化为实际的软件开发技能。我在这个项目中克服了许多挑战,取得了令我自豪的成果。

自我评分

目标评分分析
目标1: 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。95在本次实践中,我严格遵守了职业道德规范和实践要求,并将国情因素融入到软件设计中。我深入理解了人民的需求,并努力将其体现在软件开发中。
目标2: 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。90我熟练运用Axure和磨刀等原型开发工具,能够高效地完成原型设计任务。但是做出的模型不够美观.
目标3: 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。90通过对各种开发框架的学习和实践,我更深刻地理解了设计模式的强大作用,特别是MVC设计模式,在开发中我使用了flask框架一个轻量级的Python Web框架,它基于MVC设计模式。
目标4: 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。85通过片到面的技术测评,我能够大致评估系统的各个组件,并定位它们的功能和作用
目标5: 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。85在我的软件工程实践中,我曾经有过具备需求规格说明书、系统设计说明书和系统测试报告的经历。这些文档对于项目的成功非常重要,因为它们提供了清晰的指导和文档化的记录,使团队成员能够共同理解和遵循项目的要求。但是还不具备与业界同行交流的水准.
目标6: 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。90我能够充当一个问题提出者的角色。我具备敏锐的观察力和批判性思维,能够及时发现项目中的问题和潜在隐患。我明确地表达我的观点和疑虑,与团队成员友好沟通,促进问题的讨论和解决。
目标7: 能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。95通过对项目需求和功能的全面分析,我可以评估项目的规模,并确定所需的开发资源和时间。我会考虑到各种因素,如功能复杂度、技术难度、所需的测试工作和文档编写等,以全面而准确地估计工作量。

第二部分:个人技术总结

技术学习进展与开发角色

技术学习进展:

我为自己制定了一个学习路线,并且在开学后按照计划进行了学习。回顾了Java和Web的知识,并根据本学期的选课学习了Vue和Spring框架。在实际开发过程中对于学习的内容也算是有用到一些,最主要的是除了计划还额外学习了Python以及商品推荐的算法。

开发角色:

我们组决定做一个基于微信小程序的二手交易平台项目,我和另一位队友担任了开发中的推荐算法开发角色。

解决以及获得的技术进展:

  1. 在团队开发中,我负责开发推荐算法相关的功能。在了解了主流的推荐算法之后,我选择了基于内容推荐的商品推荐算法,考虑到我们二手商城项目的特点和可用数据。基于内容的推荐算法主要关注商品本身的特征,通过分析商品的描述和属性来进行推荐,相对较少考虑用户的社交关系和行为等因素。
  2. 在项目中,我与我的队友共同开发,我们首先利用爬取到的商品描述进行了jieba分词,使用了哈工大实验室的hit_stopwords文件进行数据噪音过滤和存储空间节省。然后,我们使用了Word2Vec模型和腾讯开源的embedding文件对提取的特征进行表示,将商品的关键词转换为可计算的向量表示。
  3. 在处理腾讯开源的embedding文件时,我们进行了适应我们商品关键词的处理,去除了无用的词语,减小了文件大小并提高了匹配速度,以满足我们的需求。最后,在相似度计算阶段,我们使用余弦相似度进行计算,并对计算结果进行排序,选出相似度最高的前十个商品。
  4. 我们使用了Flask框架尝试云端部署以及将计算结果以JSON数据的形式返回给前端,然后进行渲染,最终完成了商品推荐功能。
  5. 额外的,我们还尝试解决冷启动问题。具体地,我们通过分析用户注册信息中的性别和出生年月来推测用户的年龄,并结合用户使用小程序的日期来给特殊节日的相关物品赋予额外权重。这样可以在冷启动阶段为用户提供更加个性化和有针对性的推荐。

技术博客

基于内容的商品推荐

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VengaZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值