软件工程第一次团队作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13546 |
这个作业的目标 | 学习github代码托管网站的使用,学习基本的团队开发流程,学会使用markdown语法 |
学号 | 102301527 |
个人资料截图
团队仓库
https://github.com/XunBo2023/cuddly-umbrella
自我技能评估
- 掌握C/C++开发,了解TCP/IP协议,SDN技术
2.对网络通信感兴趣
3.未曾参与过项目开发经验
代码量
目前代码量:约1k行
完成本课程后希望达到代码量:2k左右
学习期望
希望能学习到现代化的代码管理与成果交付。希望能学习到清晰的现代化软件开发流程
学习指南
核心理念:不要只学编程,要学“工程”
软件工程不仅仅是写代码,它涉及从需求分析到产品维护的整个生命周期。你的目标是成为一个能构建可靠、可维护、可扩展软件系统的工程师,而不仅仅是一个程序员。
第一阶段:奠基篇 - 编程与计算机基础
这个阶段的目标是打下坚实的根基,就像盖楼前要打地基一样。
一门编程语言精通
选择:建议从 Python(语法简单,应用广泛)、Java(面向对象典范,企业级应用多)或 C++(理解内存和底层机制)中任选一门开始。
目标:达到“精通”的程度。这意味着:
熟练掌握其语法、标准库。
深刻理解其核心编程范式(面向对象、函数式编程等)。
了解其内存管理机制(如垃圾回收、指针)。
能使用它编写结构良好、可读性强的代码。
计算机科学核心知识
数据结构与算法:这是软件工程的“内功”。
数据结构:数组、链表、栈、队列、哈希表、树(特别是二叉树、BST、AVL、红黑树)、堆、图。
算法:排序、搜索、递归、分治、动态规划、贪心算法、图论算法(BFS, DFS)。
学习目标:理解它们的原理、时间复杂度/空间复杂度、应用场景。
计算机组成原理:了解计算机如何工作。
冯·诺依曼体系结构、CPU、内存、I/O设备。
操作系统:
进程与线程、进程间通信、死锁、内存管理、虚拟内存、文件系统。
计算机网络:
OSI/TCP-IP模型、HTTP/HTTPS、TCP/UDP、DNS、Socket编程。
本阶段资源推荐:
书籍:《算法导论》、《CSAPP》(深入理解计算机系统)
在线课程:Coursera的《Algorithmic Toolbox》、edX的《CS50》
练习平台:LeetCode(从简单开始)、HackerRank。
第二阶段:工程入门篇 - 软件开发全流程
这个阶段开始接触“工程”部分,学习如何协作和构建软件。
版本控制
工具:Git 是绝对主流。
学习目标:熟练使用 Git 进行代码管理(clone, add, commit, push, pull, branch, merge, rebase)。理解工作流(如 Git Flow, GitHub Flow)。
软件工程方法论
软件开发模型:了解瀑布模型、迭代模型、敏捷开发 和 DevOps。目前业界以敏捷和DevOps为主流。
设计模式与原则:学习经典的23种设计模式,更重要的是理解 SOLID 原则、DRY、KISS等,让你写出易于扩展和维护的代码。
数据库知识
SQL数据库:MySQL、PostgreSQL。精通SQL语言,理解事务、索引、锁、范式。
NoSQL数据库:了解至少一种,如 MongoDB(文档型)、Redis(键值对)。
软件测试
学习编写测试代码:单元测试、集成测试。
了解测试金字塔概念。
工具:JUnit(Java), pytest(Python)。
集成开发环境与构建工具
IDE:熟练使用一款强大的IDE,如 IntelliJ IDEA, Visual Studio Code, PyCharm。
构建工具:Maven/Gradle(Java), npm/webpack(JavaScript)。
本阶段资源推荐:
书籍:《设计模式:可复用面向对象软件的基础》、《重构:改善既有代码的设计》、《Head First设计模式》
实践:在GitHub上创建项目,使用分支进行功能开发;为你的代码编写单元测试。
第三阶段:进阶与专项篇 - 构建复杂系统
这个阶段关注如何构建高性能、高可用、可扩展的分布式系统。
系统设计
基础: RESTful API 设计、缓存技术(Redis)、消息队列(Kafka, RabbitMQ)。
核心概念:负载均衡、数据库分库分表、微服务架构、容器化与虚拟化。
学习目标:能够设计一个像 Twitter、Netflix 这样的复杂系统(不一定实现,但要能画出架构图并说明技术选型)。
网络与安全
深入理解HTTP协议,学习Web安全常见问题(SQL注入、XSS、CSRF)。
了解基本的加密解密原理。
Linux 与 命令行
熟练使用Linux常用命令,能在Linux环境下进行开发、部署和问题排查。
本阶段资源推荐:
书籍:《数据密集型应用系统设计》
网站:github.com/donnemartin/system-design-primer
在线课程:Educative.io 的《Grokking the System Design Interview》
第四阶段:工具与工程实践篇 - 现代化交付
这是成为高级工程师的关键,关注如何高效、可靠地交付软件。
容器化与编排
Docker:学习编写 Dockerfile,构建镜像,运行容器。
Kubernetes:了解Pod、Service、Deployment等核心概念。这是云原生时代的操作系统。
CI/CD
理解持续集成和持续部署/交付的流程。
学习使用 Jenkins, GitLab CI, GitHub Actions 等工具搭建自动化流水线。
云服务
选择一家主流云厂商(AWS, Azure, 谷歌云),学习其核心服务,如计算(EC2)、存储(S3)、网络(VPC)等。
第五阶段:软技能与持续学习
沟通与协作:能清晰地表达技术方案,编写技术文档。参与代码审查。
问题解决能力:遇到bug和线上问题,有系统地排查和解决的能力。
项目管理:了解如何估算工时、管理任务、识别风险。
持续学习:技术日新月异,保持好奇心,关注技术博客(如InfoQ, Stack Overflow Blog)、参加技术会议。
学习路线图与项目实践建议
阶段 建议项目
第一阶段 命令行小游戏(如猜数字)、简单的数据处理脚本、实现基本的数据结构。
第二阶段 带数据库的Web应用(如博客系统、TodoList),使用Git管理,并编写测试。
第三阶段 微服务项目(如拆分成用户服务和文章服务),引入缓存和消息队列。
第四阶段 将你的项目用Docker容器化,并使用GitHub Actions实现CI/CD,最终部署到云服务器。
最重要的建议:
动手,动手,再动手! 看十遍书不如写一遍代码。
阅读优秀的代码:在GitHub上关注一些优质项目,学习别人的代码结构和风格。
不要害怕犯错:遇到Bug和问题是最好的学习机会。
加入社区:Stack Overflow是你最好的朋友。
学习软件工程是一场马拉松,而不是短跑。保持耐心和热情,一步步积累,你一定能成为一名优秀的软件工程师!祝你学习顺利!
指南评估
对我十分有帮助,对我的软件工程学习之旅起到指导作用