109
社区成员
这个作业属于哪个课程 | https://bbs.csdn.net/forums/2401_CS_SE_FZU |
---|---|
这个作业要求在哪里 | https://bbs.csdn.net/topics/619470310 |
这个作业的目标 | 软件工程实践总结 |
其他参考文献 | 无 |
原问题来源:暑假作业博客
要跟上软件工程的发展,成为一个永不落伍的开发者,需要培养持续学习的习惯,不断更新自己的技术栈,同时深化对系统思维和问题解决能力的理解。关键在于平衡技术深度和广度,专精于一个或几个技术领域,同时保持对新技术的敏感性和适应性。此外,强化团队协作和沟通能力,理解业务需求与技术实现的结合,以及关注行业趋势也是必不可少的。最终,拥有终身学习的态度,将使开发者能够在不断变化的技术环境中保持竞争力,实现个人职业发展的持续进步。
AI辅助编程并不是传统意义上的“银弹”,因为它并不适用于所有情况,也不能保证在所有软件开发工作中都能带来10倍以上的效率提升。然而,AI辅助编程工具在某些方面确实能够显著提高开发效率和代码质量,尤其是在辅助开发者进行代码补全、调试、审查和优化等方面。AI技术已经从简单的辅助开发人员发展到涵盖软件开发的整个生命周期,包括需求分析、设计、编码、测试和运维管理,每个阶段都得到了显著提升。
而且如果让大模型完全参与进入开发的过程,这样的ai辅助编程对于外行和新手程序员来说就是一个接近银弹的存在。让拆解问题进行系统分析模块设计,向ai提问需要哪些技术和技术选型,向ai提问具体功能的代码实现,让ai分析代码报错原因并进行修改,这样全流程的参与能大大降低开发难度,显著提升新手的开发效率。因此,AI辅助编程是一个有力的助手,而不是一个能够在所有方面完全替代传统编程方法的“银弹”。
我认为会的,GPT类的应用在实现传统的搜索引擎的所有功能的基础上,额外多了很多传统搜索引擎不具备的优势功能,这些优势功能使传统的搜索引擎被完全替代将成为大势所趋,并且已经在我日常的工作流中实现了完全替代。加入了联网搜索功能的ai应用如我日常使用的kimi,它能针对问题自行通过搜索引擎进行搜索阅读整理,最后给出总结的回答与原网页链接。这样的合作之下形成的“引擎”确实是能完全替代传统的搜索引擎的,进一步简化了搜索难度,可以用更加随便的表述进行搜索,可以给出总结性的概述,这些是优于传统引擎能实现上位替代的。
区分一个好的程序员和不好的程序员,需要从技术能力、工作态度、沟通能力、问题解决能力、持续学习意愿和适应能力等多个维度进行考量。好的程序员在技术深度与广度上表现出色,他们不仅掌握编程语言的语法,还理解其背后的设计原理,能够根据不同的问题选择合适的技术和工具,并且注重代码质量,编写的代码具有良好的结构和清晰的注释。他们面对问题时能够冷静分析,运用系统化的问题解决策略,并且对新技术充满好奇心,愿意不断学习,快速适应技术变化。此外,好的程序员在团队中能够有效沟通和协作,提供和接受建设性的反馈,促进团队合作和项目进展。他们对工作充满热情,愿意承担责任,并且具有预见性和规划能力,在编码前进行充分的规划和设计。
相反,不好的程序员在这些方面表现出欠缺,他们可能在技术与设计上不够深入,编写的代码效率低下、难以维护,对新技术的学习和应用不够积极,面对问题时缺乏有效的解决策略,团队合作能力差,对项目的贡献有限。因此,好的程序员不仅仅是技术能力强,更重要的是他们的态度、习惯和思维方式,这些因素共同决定了他们在工作中的表现和对项目的贡献。
对于工程师而言,选择更“专”还是更“广”的问题,实际上是关于如何在职业发展中平衡深度和广度的问题。理想的状态是成为“T型人才”,即在一个专业领域有深厚的专业知识和技能(T的垂直部分),同时在其他相关领域也有一定的知识和理解(T的水平部分)。这种结构不仅能够确保工程师在其专业领域内具有竞争力和不可替代性,还能够提供足够的灵活性,以适应技术变革和市场需求的波动。
无
无
在本学期的软工实践中我在需求分析、系统设计、开发实现、测试和发布五个阶段都收获了宝贵的经验和教训
在这个阶段,我学会了如何与用户或团队成员沟通,准确把握项目的需求,并将这些需求转化为具体的功能点。我学会了使用用例图、用户故事和需求规格说明书等工具来帮助理解和记录需求。
在这个阶段,同期学习的面向对象设计与分析课程的OOA与OOD给了我思想上的指导,而本门实践也给了我运用这些思想与方法的广阔天地。我深入学习与应用了如何设计软件的架构,包括选择合适的设计模式、数据结构和算法。我也学会了如何进行系统分解,将复杂的系统分解成可管理的模块和组件。
在开发实现阶段,我深刻体会到了将设计蓝图转化为实际代码的过程。除了实践编码规范、版本控制和持续集成/持续部署(CI/CD)等核心开发实践外,我还探索了AI辅助编程的潜力,并深入运用Git进行版本控制。
AI辅助编程:我尝试使用了一些AI辅助编程工具,这类工具在编写重复性代码或解决复杂算法问题时特别有用。AI辅助编程不仅提高了我的编码速度,还帮助我学习了新的编程模式和最佳实践。我学会了如何与这些工具协作,利用它们的建议来优化代码结构和逻辑,同时也保持了对生成代码的审查和控制,确保代码质量和项目安全。
使用Git进行版本控制:Git成为了我日常工作中不可或缺的一部分。我学会了如何初始化仓库、提交更改、创建分支、合并分支以及如何使用远程仓库。通过Git,我能够跟踪项目的历史更改,轻松回滚到之前的版本,以及在团队中高效地协作。我掌握了Git的工作流程,包括分支策略(如Git Flow)和代码审查流程,这些都是确保代码质量和团队协作成功的关键因素。
软件测试和质量保证。在这个阶段,我学习了不同类型的测试(单元测试、集成测试、系统测试等),以及如何编写测试用例和自动化测试脚本。通过JMeter,我学会了如何设计压力测试场景,包括创建线程组来模拟用户负载,配置HTTP请求来模拟用户操作,以及设置断言来验证响应的正确性。我了解到,压力测试不仅仅是测试系统的极限性能,更是为了发现性能瓶颈和潜在的系统问题。我也学会了如何使用测试框架和工具来确保软件质量。
在发布阶段,我不仅学会了部署和项目管理的关键技能,还掌握了使用Docker和Nginx在CentOS系统上进行软件部署的实用技术,以及如何利用群晖云服务部署个人网站。
Docker和Nginx配置:我通过Docker容器化技术,将应用程序及其依赖打包在一个轻量级、可移植的容器中,这大大简化了部署流程。在CentOS服务器上,我学会了如何安装和配置Nginx作为反向代理服务器,以及如何设置Docker容器与Nginx之间的连接。这个过程让我深刻理解了微服务架构的优势,以及如何在生产环境中实现高效的负载均衡和流量分配。
群晖云部署:我还探索了如何利用群晖云服务来部署个人网站。通过群晖的Docker套件,我能够轻松地在个人NAS设备上部署和管理Docker容器。我学会了如何配置域名、设置SSL证书,以及如何优化网站的性能和安全性。这个过程不仅提升了我的云服务管理能力,也让我对云计算有了更深入的认识。
通过这些实践,我学会了如何在不同环境下进行软件部署,以及如何确保软件在发布后能够稳定运行。我掌握了从制定发布计划到实施部署的全过程管理,包括监控部署状态、处理可能出现的问题,以及在必要时执行回滚策略。这些经验不仅让我在项目管理和协调方面更加得心应手,也为我未来的工作提供了宝贵的实战经验。
我对软件工程师的职业道德规范和实践要求有了深入的理解,能够识别软件开发对社会的多方面影响,并始终秉持负责任的态度进行开发工作。但在国情社情民情的深入理解方面,我认为还有提升空间,需要更多社会实践和学习。
我掌握了需求分析的基本流程和工具,能够较为准确地表达客户的需求。但在处理复杂或模糊的需求时,我意识到自己还需要更多的实践经验来提高分析和建模的能力。
我对软件开发全过程有清晰的认识,能够遵循设计原则完成设计模型。但在技术评审和高级设计方法的应用上,我感觉自己还需要更多的学习和实践来提升技能。
我能够执行基本的技术评测,并具备一定的设计方案选择能力。然而,在创新设计意识和复杂模型的评判能力上,我认为自己还有很大的提升空间。
我遵循软件开发文档标准,能够规范撰写各类文档,并具备与同行交流的能力。但我认为在文档的精细化和专业化表达上,仍需不断学习和实践。
我在团队项目中展现出良好的团队意识和合作技能,能够有效沟通和协作。但在组织和指挥团队方面,我认为自己还需积累更多的领导经验和管理技巧。
我对软件项目管理的构成要素有一定的了解,能够进行基本的规模估算和进度规划。但在管理复杂项目和使用高级项目管理工具方面,我认为自己还需要进一步的学习和实践。
在第一次作业“准备篇”中我为自己制定的是关于后端的学习路线,但是由于团队需要而且也为了补全自己在前端技术栈中小程序开发的空白,我在团队开发中担任了微信小程序端与web端的前端开发角色,在开发中解决的技术问题与获得的技术进展详见下面这篇个人技术总结博客。
概述:ECharts是一个用于数据可视化的JavaScript库,适用于构建各种交互式图表。在需要将复杂数据以图形方式呈现时使用,如报表和仪表板。学习ECharts有助于提升数据展示效果,直观的展现数据的内容与趋势。同时因为团队在web管理端需要对后台数据进行可视化分析与展示,故选择学习该技术。技术难点在于掌握其丰富的配置项和性能优化。