这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2024 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13243 |
这个作业的目标 | 对软件工程有全面的了解,并且对AIGC和ChatGPT等人工智能技术有深入的认识,可以更灵活地利用AI作为辅助工具。 |
学号 | 102202146 |
一、个人logo文生图任务
任务描述
①使用免费的AIGC图像生成工具为你的Github和博客园账号创建一个独特的个人Logo。
②推荐工具:DALL-E(相关介绍可在此处找到)、Craiyon(使用教程可在此处找到)、MidJourney。
③请确保Logo符合个人风格和博客主题。
④请在作业中展示生成的Logo,并描述设计的理念与过程。
⑤请在作业中加入截图和描述生成Logo的步骤,最后总结你使用文生图AIGC工具的使用体验和感想。
任务细节
使用Craiyon工具进行创作
Logo展示及设计理念
这幅图画的创作理念是将运动元素与科技结合在一个独特且充满趣味的角色中——一只鸭子。选择鸭子作为核心形象是经过深思熟虑的,意在突出作品的奇思妙想和富有想象力的一面。
为了增加角色的个性,鸭子还穿上了背带裤,这种装扮为其增添了一种随性且古怪的魅力。这种服装为角色增添了层次感,使其既可爱又让人产生共鸣。
在场景中,鸭子正使用电脑,这象征着现代科技与传统活动的结合。这一元素为画面引入了一种适应性和不同领域融合的叙事——运动与科技的交汇。角落里放置的篮球则作为鸭子运动特质的微妙提示,将画面重新与其运动主题联系在一起。
在创作过程中,我仔细考虑了颜色、服装和角色姿态的搭配,以确保每一个元素都能为整体叙事增色。借助AI工具,可以精准地调整各个细节,捕捉到鸭子独特的个性,同时平衡运动与科技的元素,营造出一个既有趣又充满意义的场景
生成Logo的步骤
在Craiyon工具上,填写提示词,点击Draw,即可生成图片。
使用AIGC的感想
使用文生图AIGC工具让我体验到了创作过程的高效与便捷,能够轻松将文字描述转化为生动的图像,大大缩短了从构思到成品的时间。这种工具不仅帮助我实现了具体的创意,还在互动中激发了许多新的灵感。尽管AI在细节处理和复杂场景上仍有一些局限,需通过多次调整来达到理想效果,但总体上,AIGC工具为艺术创作提供了强大的助力,推动了艺术与科技的深度融合,为未来的创意表达开辟了新的途径。
二.Github个人主页搭建
任务描述
①在GitHub上进行个人主页的搭建,可以选择两种方式的一种来建立个人主页:
建立个人资料自述文件。在GitHub新建一个与自己GitHub ID一致的仓库,在仓库根目录的README下写下自己的介绍,并把个人资料截图放在作业博客中。
使用GitHub Pages建立个人主页。使用Github Pages建立一个内容丰富的个人主页。
在个人主页中添加以下内容:
介绍你自己。比如你的兴趣爱好,你认为值得向别人展示的记忆,可以使用照片丰富网页,并把个人资料截图·放在作业博客中。
介绍自己的成就、成果,技能和专业相关经验经历,并进行自我评估。目前你已经具备了哪些专业知识和能力;你对哪类技术方向有兴趣;你最想学习哪些方面的知识。
规划自己未来三年的发展设想。考研?保研?工作?考公?你可以谈一谈自己未来三年的目标,并给出理由。
个人主页展示
一篇随笔
任务细节
①请给出你当前的技能树与技术偏好,即进行自我评估:目前你已经具备了哪些专业知识和能力;你对哪类技术方向有兴趣;你觉得自己还缺少什么样的能力。请分点描述,比如我目前已经具备了三种能力,能力 A 是什么;能力 B 是什么;能力 C 是什么。格式不限于上述样例,关键在于需要逻辑清楚, 请注意:了解你会什么以及你不会什么,是教师与助教关注的重点内容。
②你之目前的代码量;本学期这门课完成后,希望达到的代码量。
③最期待在课程中能够学习到什么知识,有什么收获。
④请选择一个Chatgpt类型的工具(如:chatgpt、文心一言,通义千问,讯飞星火等)生成一份简单的软件工程这门课的学习指南,并将指南复制到这篇随笔中。分析这份学习指南是否合理、是否对你有帮助
随笔内容
1、我的技能树与技术偏好
在评估自我中,我总结了目前具备的专业知识和能力,并明确了我在技术方向上的兴趣与不足。具体如下:
大数据处理能力
我具备高精度的大数据技术背景,曾深入研究和应用MapReduce、Hive、Spark等关键技术。这些经验使我能够高效处理和分析海量数据,优化数据处理流程,并进行复杂的部署式计算任务提供解决方案。这些能力在数据密集型应用中极其重要。
机器学习与优化算法能力
我在机器学习和优化算法方面有一定的研究经验,尤其是在非负矩阵分层(NMF)领域。我能够利用这些算法对数据进行建模和分析,并在科研项目中获得了实践的机会。这些技能使我能够设计复杂的问题并实施有效的算法解决方案。
竞赛经验与团队合作能力
我多次参与国家级和省级的学术竞赛,获得了包括中国大学生创新大赛、“挑战杯”创业计划大赛、美国大学生数学建模竞赛等多个奖项。这些经历不仅增强了培养了我的专业技能,还培养了我的团队合作和创新能力,特别是在时间紧迫的环境下快速解决问题的能力。
2、技能上的不足
尽管我具备以上能力,但在软件工程开发方面,我还存在一定的不足:
软件工程实践经验不足
虽然我在科研项目和学术竞赛中积累了一些开发经验,但这些经验主要集中在算法实现和数据分析上,缺乏系统化的软件工程实践。我还没有充分的机会参与需求分析到软件发布的完整开发流程,尤其是在大型软件项目中的规范设计、代码规范、测试和方面的经验薄弱维护。
项目管理与协作能力的缺乏
在过去的项目中,我大多是独立或在小团队中完成任务,缺乏在大规模开发团队中进行协作的经验。我需要进一步学习和掌握版本控制工具(如Git)的高级使用技巧,以及如何在团队中分工、管理和协调项目高效进度。
3、代码量现状与目标
目前,我的代码量主要来源于参与的科研项目和学术竞赛,总共有一万行左右。这些代码涵盖了数据处理、算法实现和实验分析等内容。然而,我意识到这与软件工程课程所需的代码量和质量还有一定的差距。
在本学期软件工程课程结束时,我希望能够将我的代码量提高到三万行以上,特别是在系统设计、自定义编程和代码优化方面取得显着的进步。我希望通过增加代码量的积累,提升自己在软件工程各个阶段中的实际开发能力。
4、对课程的期待
在本门课程中,我最期待的是系统性地学习软件开发的全流程,包括需求分析、系统设计、代码实现、测试与维护等环节。我希望通过本门课程,能够在软件工程实践中补充自己经验方面的不足,特别是在开发规范、项目管理和团队协作上取得了突破。
另外,我也希望在课程中学习到如何编写、可维护的代码,并高效掌握更多关于项目管理和版本控制的知识,以便在未来的科研和工作中,能够更加高效地管理项目和团队合作。
5、学习指南
①学习目标设定
理解软件工程的基本概念
掌握软件工程的基本原则、生命周期模型和开发方法。
学习软件开发过程中的各个阶段
需求分析、系统设计、编码、测试和维护。
掌握团队协作和项目管理的技巧
了解如何在团队中有效协作,掌握项目管理工具和技术。
了解主流的软件开发方法论:熟悉敏捷开发、瀑布模型、DevOps等。
②基础知识学习
计算机科学基础:
数据结构与算法:理解常用的数据结构(如数组、链表、树、图等)和算法(如排序、搜索、动态规划等)。
计算机网络:学习网络协议、TCP/IP、HTTP/HTTPS等基础知识。
操作系统:理解进程管理、内存管理、文件系统等概念。
数据库系统:学习SQL和NoSQL数据库的基础知识。
编程语言基础:
选择一门主流编程语言(如Java、C++、Python等)深入学习,包括语法、面向对象编程、设计模式等。
理解版本控制系统(如Git)的使用和原理。
软件开发工具:
熟悉开发工具如IDE(如IntelliJ IDEA、Eclipse、VS Code)、调试器、构建工具(如Maven、Gradle)等。
掌握持续集成工具(如Jenkins、GitLab CI)和代码质量管理工具(如SonarQube)。
③软件工程核心知识
软件开发生命周期(SDLC):
瀑布模型:线性顺序开发模型,适用于需求明确的项目。
敏捷开发:迭代式开发模型,适应快速变化的需求。
DevOps:强调开发与运维的结合,快速交付和持续改进。
需求分析:
学习如何收集和分析用户需求,编写需求文档和使用案例。
掌握需求管理工具(如Jira、Confluence)的使用。
系统设计:
学习系统架构设计,掌握设计模式(如MVC、Singleton、Factory等)。
理解UML图(如类图、时序图、用例图等)的使用。
了解微服务架构、分布式系统设计的基础知识。
编码与实现:
编写高质量代码的原则,如SOLID原则、代码重构技巧。
掌握单元测试、集成测试等测试技术,理解测试驱动开发(TDD)。
软件测试:
理解软件测试的基本概念和类型,如单元测试、集成测试、系统测试、验收测试。
学习自动化测试工具的使用,如JUnit、Selenium等。
软件维护与演进:
学习软件维护的类型和方法,如纠错性维护、适应性维护、改进性维护。
理解版本控制、配置管理和变更管理的重要性。
④团队协作与项目管理
项目管理基础:
了解项目生命周期、项目计划、风险管理和质量保证的基本概念。
掌握项目管理工具(如MS Project、Trello、Asana)和敏捷管理工具(如Jira、Scrum Board)。
团队协作:
学习如何在团队中进行有效的沟通与合作。
掌握代码评审、Pair Programming等实践。
⑤主流开发方法论
敏捷开发:
理解敏捷开发的核心理念,如迭代开发、用户故事、站立会议、回顾会议等。
学习Scrum、Kanban等敏捷框架的实践方法。
瀑布模型:
理解瀑布模型的各个阶段及其适用场景。
DevOps:
学习持续集成、持续交付的理念,掌握相关工具链(如Docker、Kubernetes、Ansible等)。
⑥实践与项目经验
个人项目:
选择一个小型项目,应用所学的知识进行需求分析、设计、编码和测试,完整经历一次SDLC。
尝试使用敏捷方法进行开发,并总结经验。
开源贡献:
参与开源项目,通过协作获取实践经验,并提高代码质量和协作能力。
实习与兼职:
寻找相关领域的实习机会,将理论知识应用于实际项目中,积累行业经验。
⑦进阶学习与前沿技术
云计算与微服务:
学习AWS、Azure等云服务平台,理解微服务架构的设计与实现。
掌握容器化技术(如Docker)和容器编排工具(如Kubernetes)。
人工智能与大数据:
了解机器学习、深度学习的基本概念和应用场景。
学习大数据处理技术,如Hadoop、Spark、Kafka等。
安全与隐私:
学习软件安全的基本原理,如加密、认证、授权等。
了解常见的网络攻击手段及其防护措施。
⑧学习资源与工具
书籍推荐:
《代码大全》 - Steve McConnell
《人月神话》 - Frederick P. Brooks Jr.
《敏捷软件开发》 - Robert C. Martin
在线课程:
Coursera、edX、Udacity上的软件工程课程。
通过YouTube、Udemy等平台学习实际开发技能。
学习社区:
加入Stack Overflow、GitHub社区,参与讨论与学习。
关注技术博客、Medium文章,了解行业动态与最佳实践。
6、分析这份学习指南的合理性
这份学习指南设计得相对合理,涵盖了软件工程的核心内容,从基础知识到高级技术,再到项目实践,逐步引导你深入理解软件工程的各个方面。它通过理论与实践相结合的方式,确保我不仅能掌握必要的知识,还能通过实际项目和开源贡献提升实战能力,这对学习软件工程非常关键。此外,指南提供了丰富的学习资源和工具,帮助我获取高质量的学习材料,并鼓励我参与行业社区,从而保持与技术前沿的接轨。总体来说,这份指南能够有效地帮助我系统化地规划学习路径,是一个很有帮助的学习工具。