e9995aae50 | ||
---|---|---|
Assignments | ||
PublicizingMaterials | ||
Slides | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
CONTRIBUTORS.md | ||
LICENSE | ||
Projects.md | ||
README.md | ||
Syllabus.md |
README.md
OSSDevelopment //《开源软件开发/技术》课程
本课程主要面向大学计算机系本科生和研究生设计,希望通过本课程的教学,使得计算机领域的同学们能够:
- 对于开源软件的开发方法、开发过程和支持技术有深入的了解;
- 对于如何将抽象方法和理论知识结合到工程中有更好的锻炼;
- 对于开源软件社区参与有基本的掌握,具备参与开源软件开发的基本能力。
课程背景
开源软件在科学研究、工业制造、以及日常生活中发挥着重要作用。近年来,开源软件在云计算、大数据、人工智能等新兴领域迅速成为技术主流。开源软件不仅在计算机科学和软件工程中扮演了重要的角色,也成为了社会生活所依赖的关键基础设施。国内很多IT公司也在逐渐推出高质量的开源项目,例如openEuler、TiDB、OceanBase、PaddlePaddle等。开源已经成为软件技术创新和软件产业发展的主要模式。
与传统开发模式相比,开源开发展现出充分共享、自由协同、无偿贡献、用户创新、持续演化的新特征,颠覆了诸多经典软件工程的基本假设和理论。越来越多的IT公司在内部推行开源理念和开发方法,以期提高创新能力以及开发效率和质量等。相比传统软件开发,开源软件开发有一套新的模型和技术。然而,鉴于相关课程的缺乏,广大同学们往往对此缺乏理解和实践;而初学者在试图对开源软件做出贡献时,通常会感到无从下手,困难重重。因此,我们开设此课程,以帮助计算机领域的同学们了解开源软件开发和开源社区参与,这是现时代技术环境下亟待掌握的基本知识。
先置知识
- (必须)熟练掌握至少一门编程语言
- (必须)具备基本的英语沟通交流能力
- (推荐)对开源和计算机技术有兴趣,有想要做出贡献的领域,希望培养自我驱动力和锻炼自主学习能力
- (可选)开发过有一定规模的软件项目,或阅读过软件工程有关书籍,或选修过软件工程相关课程
内容提要
本课程采用理论知识和开源实践相结合的方式进行设计,从开源模式出发,以学生参与开源项目的实践为整体线索,讲授开源软件开发方法、过程及其涉及的理论知识和技术,具体包含如下内容:
- 开源模式: 开源历史发展;互联网协作技术的演变和革新;工业界开源布道师分享;...
- 开源开发活动: 开源开发流程、社区维护/协作模式、贡献指南、如何沟通、Issues、Pull-Based Development、...
- 相关流程、工具和最佳实践: git、GitHub/Gitee/GitLab、CI/CD/DevOps、Code Review、Good First Issue、...
- 前沿研究和实践: 开源社区治理、商业协作、开源生态系统、开源软件供应链管理、安全性/可持续性问题、相关实证研究方法、...
课程的主要考核方式如下(每学期会有所调整,以最终发布的课程作业为准):
- 实践作业(Lab): 创建GitHub项目、提交PR、配置CI/CD流水线、发布开源软件包、...
- 报告: 开源项目和任务选择、Linux Kernel中的沟通实践、前沿学术论文阅读、...
- 课程项目: 选择某个开源项目并做出实际贡献,在课程上报告进展和思考,并提交期末报告
学分/学时分配
课程为3学分,总学时为48学时(3*16),大致学时分配:课程讲授占50%,学生的文献阅读和讨论占20%,学生参与开源项目的实践报告占30%。
文件结构
- Syllabus.md:课程大纲(包含课程作业概览和评分标准)
- Slides:课程课件
- Assignments:课程作业
- PublicizingMaterials:课程相关宣传/研讨材料,例如大会报告
如何贡献
- 在我们的课程上宣传您的开源项目! 详见CONTRIBUTING.md
- 希望使用相关材料用于您的教学?请联系我们
- 认为课程设计和作业设计存在不足?有任何意见和建议?请发起一个Discussion
- 在任何地方发现了Typo、Bug、或格式问题?请开启一个Issue或者直接提交Pull Request
关于贡献指南相关、和项目开发的基本约定等更多信息,请参见CONTRIBUTING.md
使用本仓库的课程
-
北京大学信息科学技术学院,《开源软件技术》
- 2021-2022学年秋季学期、2022-2023学年秋季学期、2023-2024学年秋季学期、2024-2025学年秋季学期
-
跟头歌共建的实训课程参见:https://www.educoder.net/paths/9i8a7og6