310
社区成员




这个作业属于哪个课程 | 软件工程实践-2023学年-W班 |
---|---|
这个作业要求在哪里 | 软件工程实践寒假作业 |
这个作业的目标 | 加入班级社区,详细阅读作业要求,提前学习markdown语法,阅读《构建之法》撰写博客 |
其他参考文献 | 《构建之法》 [项目管理] 如何评估工作量 |
https://gitcode.net/2401_82778565/222100133
答:在高中时已经参与了一些小项目的代码设计,发现自己对编程有浓厚的兴趣。报考时,对比了计算机有关的所有专业,最后选择了以软件为主的软件工程。
答:相比于计算机科学专业,软件工程给我带来的遐想是:参与更多的代码设计和项目实践,不会像其他计算机专业强调科研和竞赛,而是将工程思维的培养作为专业的核心。
答:当初希望自己在投入一定时间学习计算机原理的同时,开辟一些项目的道路,增加一些项目的经验,准备好工作的敲门砖。至于立下的计划,本人因为在开学时是以就业为导向的(大二下时学业重心转为留学),所以立下的flag都是以项目经验为主,例如参与大型企业的实习,尝试涉猎多种编程语言,找到感兴趣的方向。
个人简历 | ||
---|---|---|
昵称 | Sometimes, Forever | ![]() |
兴趣爱好 | 游戏设计,音乐 | |
特长 | 语言学习 | |
成果和获奖经历 | ||
GRE 332,2023福州大学英语竞赛二等奖 | ||
专业水平 | ||
编程语言 | C/C++,C#/Java,(x)html/CSS/js/ts,SQL,MATLAB,lua | |
技术框架 | Yii,ArkUI | |
累计代码量 | >5w | |
开发软件 | Eclipse, VS Code, Visual Studio, Deveco Studio, Dev C++, Sublime Text, Sql Server, MATLAB | |
项目经历 | ||
A*和Q-Learning的比较 | 算法由MatLab坐标轴上的动画演示,综合对比二者的时间,在一定条件下给出一个时间复杂度较低的方案 | |
基于Yii框架的个人博客系统 | 整合了文章树型分类,异步多文件上传等自行编写的功能 同时使用了Simditor富文本编辑器,Bootstrap等插件 个人博客系统分为前台和后台,前台负责实现游客账户的文章查看和评论,后台负责文章的管理和分类,还有用户的权限管理。 | |
基于C#的高中学生管理和成绩统计系统 | 在sql server中保存学生的基础信息和各科成绩,分为教师端和学生端两个部分 学生端可以接收教师的寄语,查看各科和全科的分数和排名 教师可以对学生的信息进行增删查改,发表寄语,录入成绩,查看各科的平均分、及格率等关键信息 | |
基于Java和SQL的教学管理、宿舍管理系统 | 运用sql server进行学生毕业季+入学模拟:学生毕业后,随机生成大量的新生信息,自动安排新生宿舍 分为三个端:管理员端、教师端、学生端 学生端实现了查看信息、选课、意见反馈等大量功能;教师端能录入成绩,查看分数统计;管理员端实现毕业季模拟,修改学生基础信息,管理宿舍等必要操作 |
问题1:学生该如何做到像健身学员一样找到自身定位点,把握老师身上的那套健身资源,朝自己的目标前进呢?
答:首先是找到自己感兴趣的方向,广泛而言,目标软件的操作系统,狭义上看,则是某种具体的框架或者语言。从操作系统的角度来说,若是便携性强的软件(拍摄修图软件),或是依赖触摸屏的软件(笔记软件),则移动端(IOS、Android、Harmony)会是更好的选择,如果是专业的办公工具软件,或是操作较复杂的软件,则选择PC端(Windows、Linux、Mac)会更好。
在选择自身的定位点后,学生应当充分利用课堂资源。大学的课堂一般是以老师现场口授为主,那么课堂的精华基本上在老师的每一步推理和指导中,通用的方法则可以类比费曼学习法,对老师的讲述进行一定的回溯推理或举一反三。
例如,老师在课堂上提到,一个良好的软件架构可以为软件项目提供稳定性、可维护性和可扩展性,学生可以开始思考其所熟悉的软件,例如图像编辑软件,稳定性意味着用户可以在进行大型图像编辑时,不会因为软件崩溃而丢失工作,这可能涉及到内存管理、错误处理和异常情况的处理等方面;可维护性意味着开发团队可以轻松地修复错误或者改进现有功能,而不会导致软件的其他部分出现问题。这可能涉及到代码的模块化、清晰的代码结构和易于理解的文档等方面;可扩展性意味着软件可以轻松地支持新的图像格式、新的滤镜或者新的工具。这可能涉及到软件的插件系统、良好的API设计和灵活的架构等方面。
老师是一个承载着知识的灵魂,在课堂上为我们指点迷津,课堂上的每一个推理和解释都是至关重要的学习资源。若要将大学课程利用到极致,我们学生应当融会贯通这些处理口述知识点的方法。
问题2:程序员在哪些地方是必须依赖一个额外的用户体验设计师的?
答:抛去资源分配等运营问题,个人认为软件前端的每一个设计角度,都需要专业的用户体验设计师参与,因为用户体验的完善需要用户心理学、人机交互技术等原理。术业有专攻,作为开发人员,程序员更应该在代码设计上深度拓展,应当做到专精,而非在其他领域花费大量的时间。在软件市场中,团队开发分工已经非常成熟,且产生了具体的职位范式(项目经理、产品经理、测试人员、开发人员、专业设计师等),要做出具备竞争力的软件,在每一个方面,特别是与用户直接交互的User Experience Design,应当具备基本的工业水准。这意味着在团队中应当有符合该标准的专业设计师,他们能够确保产品能够满足用户的需求,并提供优秀的用户体验。
问题3:在一个被认定为“足够好”的软件发布后,得到的用户反馈中,哪些是有用的?什么时候才能将这个软件优化到相对稳定的版本?
答:在用户反馈中,最重要的是bug的反馈,紧急的安全漏洞或崩溃性错误应该立即处理,而小型错误可以在下一个版本中修复。若未能及时修复恶性bug,面临的就是大量退订和差评如潮,这无疑是对软件公司的一个致命打击。
其次,关于软件性能问题的反馈也十分重要,优化问题的重要程度不逊于bug的修复。在软件中,速度慢、卡顿等性能问题是十分生死攸关的,当多个用户报告性能问题,且这些问题显著影响用户体验时,开发团队务必在下一个版本中进行性能优化。此外,用户的功能请求也是有用的反馈。当多个用户提出相似的功能请求,且这些请求对于产品的发展方向有积极影响时,可以考虑在未来版本中添加这些功能,客服团队应当不吝征求用户的意见,并将结果反馈给开发团队。还有,用户在特定环境或设备上遇到的兼容性问题也是需要关注的,例如,一个仍在运营的软件,在win10上可以正常运行,而在win11上频繁出现闪退,这样的问题应在下一个版本中修复。
关于版本相对稳定的时机问题,私以为,这里的稳定应该不是指软件能在某个系统上稳定运行,而是当前版本释出后,近期不需要大规模的更新。个人认为当软件能够在流畅运行的基础上,满足用户的需求时,软件就已经达到相对稳定的版本了。
对于问题中的20%用户的需求的讨论,个人认为,软件复杂性和用户满意度之间的关联是软件开发团队不可避免的问题。如果一个特定的功能只会满足少数用户的需求,而增加了开发工作量,那么团队有必要进行折中,考虑寻找更普适的解决方案。本人思考得出的适用性广的解决方案是:根据用户需求定制不同类型的服务,例如,在一个图片编辑软件中,抠图或者AI扩图可能只是少部分用户的刚需,那么可以根据这些服务施行额外的收费制度。
问题4:花费时间越多,代表工作量越高吗?
答:在马克思主义经济学中,一个商品的价值等于其社会必要劳动时间,工作量在词典中的注释也类似,在软件开发中,工作量等于开发软件产品所需的人力和时间的估算。因此,如同提问者所言,从个人角度衡量工作量时,一定是时间越多,工作量越高,但在团队开发中,还要考虑人力资源的投入,时间就不是唯一的衡量标准了。
此外,对于提问者中的工作质量和工作有效度对工作量的影响,个人的拙见是,工作量这个概念一定是为了预估工作人力和时间投入而产生的,在事后诸葛亮中,计算工作量也是为了预判下一次类似工作的耗费时间。因此衡量工作量可以采用PERT中的乐观悲观思想,以个人能力为评判基准,像计算时间复杂度一样,将所有可能的工作量看成一个光谱,然后预估出大体的工作量,不应轻易地用最乐观的(也就是不会产生bug)的情况来随意估计。
问题5:“技能”比“解决问题”更重要吗?
答:在《构建之法》中,作者认为技能的学习是循序渐进的,当我们将低层次的问题转化为条件反射时,我们便有更多的精力学习高阶知识,解决高级的问题,这点类似于语言学习中的i+1原则。但提问者认为“技能”在词义上不具备时代适应性,而“解决问题”蕴含着时代需求的隐性含义。盲目追求技能可能使学生浪费大量时间到脱离生产的技能,这对于工科来说无疑是致命的。
诚然,部分学习者可能会在技能和问题的解决上陷入逆潮流的误区,但个人认为,在学习不过时的技术中,技能和解决问题的主次取决于个人的目标,技能不一定优先于问题的解决。对于工程类学科,我们所有技能几乎都是为了工业生产服务的。计算机这门技术的诞生的诞生就是为了解决通信和资源共享等问题,从本源上说,技能和解决问题就属于鸡和蛋的问题了。对于鸡和蛋的探讨,当我们抛开生物学亦或是哲学的思维,在软件工程的角度上看时,哪个更重要取决于我们的需求。
当我处于容错性较低的,或是教学型的项目时,我们可以抱着学习技能的心态来点点滴滴地积累经验,本人曾在学习C#时,以掌握GUI和线程的基本用法为目的,写了一个我喜欢的节目的模拟器。然而,我们一旦进入严肃的软件开发阶段时,则应当把“解决问题”,也就是完成整个软件放在最高级,一些影响软件性能的bug不能因为没有学习需求便置之不理。
答:首要的考虑方向是游戏工程师,因为自身对游戏设计有着强烈的兴趣,能深入分析游戏的架构与设计、不同角度的用户交互(休闲玩家、Speedrun玩家、Mod作者)、平衡游戏数值。本人具备长期深入的游戏开发经历,为自己感兴趣的游戏——三国杀,设计了超过200个武将并在QSanguosha中提供了具体的代码和AI实现(代码共计3w+)。此外,本人近期还尝试过Unity,目前能捣鼓出一些demo,计划是先准备留学,然后在课余时间内不断拓展视野,鉴赏佳作,同时不遗余力在自己感兴趣的方向中创造作品,积累创作经验。
当然,本人不论是在学业选择,还是在职业规划中,都有两手准备,以留学为主线的学业生涯中,我预留了考研的plan b。在准备游戏设计的同时,也会开始思考我的备用职业规划——后端开发,至于是Java还是Go,目前还是选择传统的Java。今后课余时间,本人会去了解这些职业的要求和发展方向,并未雨绸缪,制定一份备用的职业规划。
答:我认为,相比于理论课,软件工程实践,是在亲手搭建软件的过程中,掌握某个或某些操作系统上,一个软件的整体的架构和运营原理。我希望通过这门课程学习到Web中架构软件的必要技能,同时积累团队开发的经验,从技能学习的角度而言,我希望通过本门课程的学习,在专业技能上,提高代码能力,加强工程思维,在通用技能上,提高团队协作能力,掌握必要的沟通技巧, 保持自主学习的习惯。
本人不论是在学业选择,还是在职业规划中,都有两手准备,以留学为主线的学业生涯中,我预留了考研的plan b。在准备游戏设计的同时,也会开始思考我的备用职业规划——后端开发,至于是Java还是Go,目前还是选择传统的Java。
很赞的一种规划习惯!请继续保持动力,加油!
作业完成的非常棒!对于自己的未来规划也非常明确,希望你可以为着自己的目标不断努力,加油!