## 课程简介：
《开源软件开发导论》课程是一门面向软件工程、计算机科学与技术等专业的高年级本科生的专业课程。课程的目的是通过系统地讲授开源软件的发展历史与现状、基本思想与概念、开发方法与关键技术、支撑工具与系统平台以及相关科研工作，同时结合基于互联网开源软件平台的课程实践环节，使学生掌握开源软件开发的理论知识与实践技能，具备进行开源软件开发和开展相关研究的能力。


This course is designed for senior undergraduate students majoring in software engineering and computer science and technology. The main objectives of this course are: introduction to the history and current status, the basic ideas and concepts, development methods and key technologies, supporting tools and platform, and related research of open source software; course project practice based on Internet open source software platforms; enabling students to master the theoretical knowledge and practical skills for open source software development; prepare the students for future research and engineering work in this field. 

## 课程计划
- 1.  开源软件背景知识（2学时）
- 2.  开源软件开发的基本概念与实例剖析（6学时）
- 3.  开源软件开发方法与支撑工具（6学时）
- 4.  开源软件开发实践（10学时）
- 5.  开源软件研究（2学时）
- 6.  开源的发展趋势与未来展望（2学时）
- 7.  个人实践报告，项目实践总结报告（4学时）

## 教学方法与考核
【教学方法】本课程采用课堂教学、团队实践和研讨并重、结合课外学习和实践的教学方法。由于这门课程是讲开源软件的，绝大部分课程资料和学生的作业都已公开的形式展现出来。 
【考核】平时成绩 50%，项目实践成绩 50% 

## 课程安排
- 课次1: 课程介绍，开源背景介绍，第一次作业布置
- 课次2: 介绍开源软件开发的基本概念，包括开源平台、开源社区、开源项目、开源生态和开源协议等
- 课次3: 开源软件开发的实例剖析 （1）
- 课次4: 开源软件开发的实例剖析 （2）
- 课次5: 开源软件开发的实例剖析 （3）
- 课次6: 开源软件开发方法与支撑工具（1）
- 课次7: 开源软件开发方法与支撑工具（2）
- 课次8: 开源软件开发方法与支撑工具（3）
- 课次9: 开源软件开发实践（1）
- 课次10: 开源研究
- 课次11: 开源软件开发实践（2）
- 课次12: 开源软件开发实践（3）
- 课次13: 开源软件开发实践（4）
- 课次14: 开源软件开发实践（5）
- 课次15: 开源的趋势与未来展望
- 课次16: 项目报告（1）：个人实践报告，项目实践报告
- 课次17: 项目报告（2）：实践报告总结

## 这门课的老师  
- 孙海龙： http://shi.buaa.edu.cn/sunhailong/zh_CN/index.htm 
- 高翔：http://soft.buaa.edu.cn/info/1124/6921.htm 
- 邹欣：https://edu.csdn.net/me/softwareteacher 

## 关于这门课的教学方法
Learning by Doing (做中学)，通过实践来学习。
工欲善其事，必先利其器，在这门课中，我们需要一些工具：
- git，markdown，linux：请看这个在线课程： https://edu.csdn.net/skill/gml
- 常用的编程环境，可以从简单的 VS Code 开始
- 开一个 CSDN 账号，我们的教案都放在这里 https://gitcode.net/csdn/intro-ossd
    其中，目录 plan 是放教学的内容； 目录 PlayGround 是让同学们尝试各种 git 的协作操作，例如 git merge，等。 

## 参考项目
大家可以从这些项目中选择一个或者几个项目参与：

- 开源的技能树：https://gitcode.net/csdn/skill_tree_opensource （构建一个覆盖开源软件开发知识和技能的结构化的知识图谱 + 练习题）
- 开源的 CSDN 可视化项目： https://gitcode.net/csdn/csdn-datav  （一个基于海量 CSDN 数据的大数据可视化项目，由 CSDN 的技术人员和社区开源爱好者一起合作开发）
- 开源的笔记项目： https://gitcode.net/weixin_45873510/okidoki （一个帮助用户做笔记和事项管理的开源小软件，由北航学生开发了第一版，作为 北航计算机学院软件工程课程的项目之一）
- https://gitcode.net/ViewDesign/view-design (View Design 是基于 Vue.js 3 的企业级 UI 组件库和前端解决方案，有开源版本)

- 大家还可以参加一些企业的开源项目，只要事先得到老师的批准，并且工作量和工作质量得到企业和老师的认可，这也可以算为是课程的开源部分。 

详细的参考项目介绍可以看本目录下的 project.md 文件。 