122
社区成员




这个作业属于哪个课程 | 2302软件工程社区 |
---|---|
这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
这个作业的目标 | 课程回顾与总结,个人技术总结 |
其他参考文献 | 《构建之法》 |
Q1:如何让自己能够跟上软件工程发展,做一个永不落伍的开发者呢?
A:在我最初的想法中,要让自己能跟上软件工程的发展,当然是不断了解前沿的新技术,学习新语言、新技术。
但是要知道,计算机科学的发展变革是非常迅猛的,有些新的技术发现是具有变革性的,甚至是能够引领下一个时代的发展的,但是其他大部分的科学发现不过尔尔,
要是耗费大量的时间在寻找和学习这些科学发现,无疑是非常痛苦的。因此我觉得,我们最先要做到的是提高自己本领,扎实自己的基础,大多数的科技发现的底层原理是相通的,
我们要做到是了解它们的底层原理。其次,我们要保持终身学习的习惯,主动的去了解这些前沿的新技术、热门的新方法。
A:现在时间来到了2024年,人工智能大语言模型仍然火热,各种大语言模型产品不断推出,新技术不断产生。面对计算机科学的迅猛发展,为了跟上软件工程的发展,
我仍然认为我们要不断地学习前沿的新技术,学习新语言。但是这么多的新技术我们都能全部学习,这么多的大语言模型我们都要一个一个研究吗?
我认为我们应该专注于学习新技术的底层原理,掌握了底层实现原理,我们就能很好地掌握这项技术了。并且我们也要保持终身学习的习惯,主动去学习。
Q2:程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?
A:我认为我们应当视情况而定,首先来说,程序员的精力、软件的寿命是有限的,一个软件不可能能够满足所有人的需求。软件产品最先是要满足大多数人的需求,
对于小部分人的需求,我们应该考虑的是满足这部分需求所需要的成本和能够带来的收益。如果这部分需求确实有着实用价值,能够提高用户的使用体验,提高软件质量,
那么是可以满足这部分的需求的。但是如果这部分的需求太过小众,或者难以实现,实现的成本大于带来的收益,那么其实不必要满足该需求。
A:我原本的回答认为软件开发公司的目标就是开发软件、获取用户量、获得利润,因此是否有必要为满足小部分人的需求去做软件,需要视情况而定,
比如说考虑小众需求的实用价值,能否带来利润等。但我那时还忽略了一个重要因素就是软件公司的社会责任感,有时候为了帮助部分有困难的人群,使用软件技术开发软件,
我觉得是有必要的,这时候是不需要考虑什么利润的。在最近,我了解到了这样的一则故事:“脑瘫女孩与软件输入法”
看过之后,我觉得有时候出于我们的社会责任感,而非利润,为满足小部分人的需求去做软件,或者为软件添加某些功能是非常有必要的。
A:对于大部分使用GPT-4来写作业的学生来说,其实GPT的最大作用给学生提供思路、回答问题和解决一些重复的文字性工作(水水论文)。
所以对于老师来说,单纯地从作业的内容来判断是否使用GPT是很困难的。我觉得要甄别学生是否使用GPT-4做作业,可以从作业的排版方式、当面提问、甚至是使用抄袭检测软件来检测。
A:即使到了今天,GPT-4的能力其实还不够强,并不能完全替代我们进行思考,解决问题。我认为还是跟之前一样,GPT-4的作用其实是为我们提供思路和解决一些简单的文字工作。
所以老师是很难甄别的,思路是GPT-4的,但作业是我写的啊!只要不是很明显的AI痕迹,老师是很难甄别的。如果真要甄别,只能从排版格式、文字表达(AI的文字表达会有一种很浓重的AI味),
或者使用抄袭检测软件来检测,甚至用AI来检测AI,现在许多高校的毕业论文评审都开始用AI进行检测了,效果还是不错的。
A:我觉得变量命名需要有描述性,对于一个开发团队来说,良好的变量命名可以提高代码的可读性和可维护性,方便其他人员对代码、变量的理解,促进团队成员之间的有效沟通,提高开发效率。
A:当然,如果不使用有描述性的变量命名,在软件开发的前期还好,还能分辨这个变量是什么,到了后期,很难分辨变量的作用了。
带有描述性的变量命名能够很好地提高代码的可读性和可维护性,方便开发团队的其他人理解。
A:诚然,计算机科学的发展变革是很迅速的,大学中老师讲的内容可能已经老旧,甚至跟不上时代。
但是,大学的课程知识其实最重要的是讲解计算机科学的基础,认真听老师的讲课可以帮助我们更好地理解和掌握这些基础知识。
并且对于这些学科来说,在课上认真听老师讲课是最快掌握的方式,不然在课下可能要耗费更多的时间。
A:在如今,计算机科学的发展变革十分迅速,大学中老师讲的内容可能已经老旧,甚至跟不上时代。但实际上,大学中教授的内容都是计算机科学的基础,
基础打不牢,怎么能很好地了解学习新技术呢?再说了,不好好学,学分不要啦?因此,在上课时我们还是要认真听讲。
Q1:如何让自己能够跟上软件工程发展,做一个永不落伍的开发者呢?
在对于这个问题的回答中,我写到我们要树立终身学习的信念,了解学习新技术,学习它们的底层技术。但实际上,计算机科学的技术范围是非常广阔的,纯软件、
软硬件结合,各个方向都有。这么多的新技术、这么多的技术研究方向,我们都能了解、都能掌握吗?答案是否定的,我们只能确定某一个方向仔细研究学习。
问题在于我们怎么确定好自己的研究学习方向呢?仅凭兴趣还是跟随某几个热门的方向呢?
在需求阶段,我的最大收获就是要重视需求分析,在之前比如开发一个小项目,我们都是轻视需求分析,在需求阶段花费是时间不够,或者是看一眼要求就直接进行开发,
在开发的中期就会发现欸?我是实现的这个功能怎么和要求不一样?又要修改,一来一去就花费了大量的时间,如果在一开始就进行充分的需求分析,就能够减少出错。
我还学习到了需求分析的方法,使用NABCD模型可以很好地帮助我们进行需求分析。
设计阶段中,数据库的设计,接口设计都是在之前开发中使用过的,但还没有像在团队开发中,进行这样充分的数据库设计和接口设计。俗话说准备工作永远不嫌少,
在软件开发前,对数据库、接口进行充分的设计是非常有必要的。
在实现阶段,我学到的最重要的一点就是分配好开发任务、安排好开发进度。有时我们需要的并不是快速得到结果,我们需要的是在项目截止时间前,
得到完整的项目开发结果,需要保证的项目质量。这就需要我们使用项目管理工具Git等管理项目、学习使用燃尽图规划好项目开发进度。不要让项目开发出现空档期,
这样会影响项目开发的连续性,进而影响项目质量。
- 在测试阶段,我的最大收获就是了解到软件测试的重要性以及学习了多种测试的方法。软件测试分为:单元测试、集成测试、确认测试、系统测试、验收测试。
软件测试目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。在之前,我们进行测试往往是完成一个模块后进行一个简单的功能以及在开发完成后进行一个总体的测试。
没有将测试当作一个重要的软件开发阶段。在团队项目开发中,我学到要重视软件测试。我还学习了JUnit测试框架,通过测试框架编写测试函数来进行测试。
我还学习了软件效能测试方法(以前完全没有了解过),软件效能测试旨在验证软件在各种情况下的稳定性、可靠性、响应速度和资源利用率等指标。
我学习使用了一款Java程序效能分析工具---JMH,使用JMH可以方便快速地进行严格的代码基准测试。- 另外,一定要给测试阶段预留充足的时间,虽然有些人可能认为项目都能运行下来了,功能都测试通过了,还需要什么测试呢?但实际上,有些错误不经过充分的测试是很难发现的,
我们需要留有足够的测试时间。
在发布阶段,我们需要收集用户的体验报告,了解用户的使用体验情况以便在之后的开发中进行调整。
另外,云服务器的部署也是我学到的重要内容之一。Docker可以直接打包项目和环境依赖到一个轻量级、可移植的容器中,然后就可以发布到任何的Linux机器上。
Docker的使用十分简单,它能够帮助我们将应用程序与基础架构分开,这样能够快速地进行软件项目的部署。
在个人项目中,我学习了对JSON的处理,学会使用Gson来对JSON进行处理,还学习了Gson中的一下常用API。
我还学会使用maven来管理项目结构。我还学习了使用git来管理项目开发。
结对编程编写世界游泳竞标赛网站中,我学会了使用原型设计工具来设计项目原型,还学会了使用jsp来进行网站的开发,唯一的难点就是前后端的信息传输,需要改一些部分才能进行传输。
在团队项目中,我了解并学习了如何进行团队项目开发,懂得了要加强团队间的交流,懂得分工。
在项目开发前,我们要做好准备工作,做好需求分析和设计工作,这样能够减少在开发过程中遇到拍的问题,提高开发效率。
在开发过程中,我们要避免开发出现间隔,提高项目开发的连续性。学会性能测试,增加对软件项目的性能测试,提高软件项目的性能。
课程目标 | 掌握程度(百分制) | 解释 |
---|---|---|
目标1: 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。 | 90 | 我能够很好地符合职业道德规范和实践要求,了解软件项目的积极作用 |
目标2: 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。 | 80 | 在软件需求分析过程中,我们花费了充足的时间来进行需求分析,能够很好地了解用户需求 |
目标3: 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。 | 86 | 在团队项目开发中,我能较好地掌握软件项目开发的全过程,但是对于微信小程序的部署还是有一些问题 |
目标4: 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。 | 78 | 其实我的创新能力并不强 |
目标5: 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。 | 92 | 我能够很好地遵循软件开发各阶段文档标准,采用规范的表达,我懂得需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,作为项目经理,我有着很好的沟通能力。 |
目标6: 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。 | 87 | 作为项目经理,在博客编写、项目开发进程中,我都能很好地和团队成员进行很好的交流。 |
目标7: 能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。 | 80 | 我学会使用maven项目管理工具,git项目开发管理工具并且懂得使用燃尽图管理开发进度 |