开源技术——大学计算机专业的一门重要课程
1 为什么开源技术应作为大学计算机专业的一门课程
目前,世界上开源社区已有一百多万个,开源项目有数十万个,开源代码已超过一亿行。随着开源软件的迅速发展,开源软件与我国软件产业的融合日益加深。开源模式因其开放共享、社区协同、持续演化的特点,使得开源软件种类丰富、质量稳定,成为我国构筑安全可控软件体系的重要支撑,同时也成为信息技术创新发展的动力源泉。发展开源软件因此成为我国信息产业发展的重要战略举措之一。《“十三五”国家战略性新兴产业发展规划》提出要大力发展基础软件和高端信息技术服务,面向重点行业需求建立安全可靠的基础软件产品体系,支持开源社区发展。《“十三五”国家信息化规划》和《国家信息化发展战略纲要》都提出要支持开源社区创新发展,鼓励企业、科研机构、社会组织和个人积极加入国际重大核心技术的开源组织。
尽管有国家政策和产业需求的推动,开源软件在我国仍然遇到很多问题。人们对开源软件存在种种误解,如开源软件意味着免费和安全、开源软件经过修改就可以成为自主可控的国产软件、集成开源软件的产品可以作为商业产品来销售等。不久前,在Chrome内核上开发的红芯“自主可控浏览器”饱受社会质疑就是一个典型的案例。此外,长期以来,我国对开源软件界的贡献较少,但用得很多,与国际接轨的主流开源社区也寥寥无几。据统计,我们有37%的企业通过修改开源软件开发自己的产品,但有84.8%的企业从未打算将产品开源;有43.5%的技术人员不具备开发开源软件的能力,有32%的人不知如何参与开源项目[1]。这些现象说明,一些行业主管、技术开发人员乃至普通用户尚未树立起正确的开源意识,急需开展开源人才的教育培养。
在计算机相关专业中提倡开设开源技术课程,主要有以下几点理由。
1)社会需要。
目前,我国软件产业仍处于方兴未艾的发展阶段,无论在产业规模还是技术水平方面都与先进国家存在相当大的差距。充分利用好开源资源是实现我国软件产业跨越式发展的重要途径。开源软件凝聚了数十年世界范围内大量开发者的成果,充分地学习、研究以及合理地利用这一资源宝库,无疑对技术创新和加速提高我国软件业的水平都具有重要作用。
2)产业公平竞争的需要。
20年前国外高校的计算机专业已经普遍使用开源软件进行教学和实践,很少使用商业软件,而当前在我国高校还在普遍使用商业软件[2],这样必然导致学生就业之后仍然热衷使用在校学过的或用过的商业软件,对于未来软件市场的公平竞争十分不利。应在大学教育阶段,提倡学生使用开源软件,以减少商业软件的影响,打破垄断,为振兴民族软件产业创造条件。
3)IT从业人员素质的需要。
今天,社会上一些人批评我们的大学培养了很多“精致的利己主义者”,其实不止大学,很多研究机构和企业也不能做到与社会共同分享研究成果。在很多科研项目结束之后,成果被束之高阁,浪费了大量的科研经费,对产业的贡献十分有限。我们需要从大学开始培养未来IT从业者乐于奉献的精神和开阔的胸襟。
4)人才培养的需要。
据统计,今天80%新出现的软件产品含有开源代码,98%的全球化企业在使用开源软件,开源软件的大规模应用,导致开源人才的匮乏。据《2018开源职业调查报告》,83%的企业急于招聘开源人才(2017年为76%),87%的企业难以招到足够的开源人才[3]。大学毕业生是开源最重要的有生力量,我们需要及早预见这种趋势,做好人才储备。
5)开源的体系是软件开发技术课程不可或缺的内容。
众所周知,解决“复杂工程问题”能力是工程教育本科专业的本质要求,也是我国高等院校本科工程专业达成工程教育认证要求的重点和难点。开源软件从理念到方法已经形成了成熟的体系,为培养学生解决“复杂工程问题”的能力提供了良好的条件。目前,凡是可以“从头发明轮子”解决的问题已经不能算“复杂工程问题”了,开源软件可以帮助学生在前人的成果上准确定位问题,寻找有效工具,获得技术帮助以及评价实验结果。
综上,无论从上述哪个角度看,开源技术都应该作为大学计算机专业的一门重要课程。
2 开源技术课程的教学目标和内容
目前,开源教育普遍关注的是如何将开源软件和开源社区的资源应用于教学和实践环节[4-6]。笔者认为这是远远不够的。文献[1]认为开源人才的教育要注重开源文化的教育、开源意识教育和开源技能教育,这是很有见地的观点。
北京信息科技大学自2007年开始设置“开源软件开发技术”课程,该课程为计算机类专业任选课。经过10年的改进完善,该课程受到各年级学生的好评,积累了一定的经验,笔者愿意在此与读者分享,以期抛砖引玉。
“开源软件开发技术”课程的目标定位是通过这门课程的学习,使学生了解开源软件的理念、授权协议和开发方法,了解开源项目的特点,掌握开源软件生命周期要素,了解开源软件开发过程管理模型、系统分析与设计的原则和方法;善于吸取开源软件成功的经验和失败的教训,学会利用开源资源从事科学研究。从毕业要求的角度出发,学生应具备达到以下几方面能力:能够开发、选择与使用恰当的开源技术、资源和工具,用于解决复杂软件工程问题,并能够理解其局限性;具备开源文化下的人文社会科学素养和社会责任感;具备组织与参与实际开源项目的能力,具有所需的沟通交流的基本技巧与能力,良好的口头与书面表达能力,有效表达自己思想与意愿的能力、倾听与理解他人需求和意愿的能力,适应工作与人际环境变化的能力。
1)课程理论部分的主要内容和基本要求。
(1)引论,包括开源软件与自由软件的概念,开放源代码许可证的类型与含义,开源软件的发展。通过本章的学习,学生应掌握开源软件的定义,GPL和BSD等重要许可证的内涵,理解开源软件的意义、优势和局限性,了解重要的开源软件发展过程。
(2)开源开发的动力,包括开源开发人员的年龄、职业和收入情况,开源开发者的地区分布和贡献大小,开源开发的动机及其产生的影响。通过这部分的学习,学生应了解开源成功的内在因素。
(3)开源开发的模式,包括“大教堂模式”和“市集模式”的区别,开发团队的组织和协作方式,开源项目管理方法,开源软件开发、测试、维护和发布过程。通过这部分的学习,学生应了解开源开发的特点,开源社区的作用,以及传统软件开发方法与开源软件开发方法的相互借鉴和影响。
(4)开源软件的编码规则,包括开源开发中用到的命名规则、编程风格、常用语言、工具和平台,文档编制规范,开源开发的注意事项。通过这部分的学习,学生应掌握开源开发的基本要领。
(5)开源开发的商业推动,包括商业公司参与开源的动机、策略、方法、现状与前景。通过这部分的学习,学生应理解开源阵营与商业公司从对立、对抗到合作共赢的原因,了解开源的盈利模式。
(6)重要的开源资源,包括重要的开源产品、社区和托管网站,重要的开源活动,开源的现状与发展趋势。通过这部分的学习,学生应了解开源的热点项目,学会如何发现和利用开源资源,并做好参与开源开发的准备。
2)课程实践部分的主要内容和基本要求。
(1)分析一个典型的开源软件及其开发过程,撰写分析报告。通过这部分的学习,学生应学会如何了解和评价一个开源项目,掌握文档和代码的阅读能力。
(2)设计、构建一个开源软件项目解决实际问题,包括项目计划、网站建设、资源库设计、配置管理、编程开发和文档编制等。通过这部分的学习,学生应初步具备通过开源实践解决复杂工程问题的能力。
“开源软件开发技术”课程理论联系实际,受到学生的普遍欢迎。课程中笔者融入了实际的开源开发经验,例如,2007—2015年笔者与北航等高校在Source Forge上完成了一个大型的开源项目——UOF/OOXML文档格式转换器,被微软评价为世界上最好的格式转换器之一,类似成果被用在教学内容里。笔者还邀请了一些热衷开源的学生担任课程的助教。这门课各年度教学效果评价均为优秀,选课人数逐年增多,95%左右的学生认为课程很有收获。以下是部分学生对课程的反馈,“在学习本课程之前,虽然也听说过开源软件,也在使用多款开源软件,但我对开源软件的了解也仅限于开放源代码和免费。我学习本课程的最大收获便是对开源软件有了比较系统全面的认识,也让我开始重新审视开源软件”“这门课为我对就业的认识加深了一个层次。了解了开源的一些好处后,在以后的职业生涯中我也会参加一些开源程序的开发”“课程丰富了我的知识,增长了我的见识,尤为重要的是介绍给我开源的思想。开源思想对技术、知识的交流传播起到重要的作用。”“开源软件是一个新的名词,在读大学之前我对它从来都没有接触过,我觉得对于一个软件工程的学生来说,选修这门课程是非常有必要的。希望能够在将来更深入地学习编程,真正进入到开源的阵营中去,为开源的发展增添一份力量”。
由于精简课时的原因,这门课课时很短,共16学时,其中讲课10学时,实践6学时。以往这门课主要以讲授为主,学生在反馈中提出:希望课上有更多的机会让他们深入实际的开源项目。笔者正在对课程进行改革:今后将通过问题引导的方式让学生主动调研、学习关于开源的知识,以团队形式汇报和讲评;加大实践的比重,以解决复杂工程问题作为目标,利用GitHub平台让学生完整地体验一个实际的开源项目。这样也会出现新的挑战:如何在很有限的时间内组织团队,完成一个适合的课题?这需要在实践中不断探索经验。但无论如何,笔者相信新的授课方式将会带来更好的教学效果。
3 对开源教育和课程教学的建议
1)加强顶层设计。
将开源技术纳入计算机专业(特别是软件工程专业)的教学体系。应通过教指委等主管机构明确开源技术课程在整个人才培养体系中的地位和作用,为课程大纲的设计给出指导性意见。
2)在高校中充分利用开源教育资源。
首先,应该在教学过程和管理平台中优先使用开源软件。其次,在计算机专业的核心课程中充分结合开源软件,如操作系统课程采用Linux、Android,数据库课程采用MySQL、PostgreSQL,并行计算课程采用Hadoop,云计算课程采用OpenStack,机器学习课程采用TensorFlow,软件开发课程采用Eclipse、Tomcat等。此外,如用OpenOffice/LibreOffice 替代Microsoft Office、用Firefox替代IE。再者,还要用好开源实践教学平台。国际上优秀的开源项目管理平台,如GitHub、Google Code、Source Forge等,都提供了项目/团队管理、代码审查、缺陷跟踪、文档编制等便利环境,国外许多课程直接在这些平台上开设[7],值得我们借鉴。
3)筛选适合学生的开源软件和开源项目。
目前,在一些大型的托管网站上,开源项目的数量有上千万之多,然而这些项目大多并不适合教学使用。文献[6]显示,这个问题也是影响开源教育的主要障碍之一。教师应筛选一批具有生命力的、代码规模和开发难度适当的项目进入课堂。在教育网中提供相应的资源镜像(国内访问GitHub曾一度被防火墙拦截),为学生铺设通向开源软件和开源社区的无障碍通路。此外,我们应该鼓励学生参与开源社区的各项竞赛和活动,鼓励他们成为开源活动的积极分子。
4)在软硬件采购、教学资源建设和专业评估中为开源教育开绿灯。
开源软件并不意味着免费,很多开源软件需要比商业软件付出更多的维护代价,有时还需要付费购买软件授权许可和咨询服务。一些机构在审批采购申请的时候,因审核人员对此不理解,轻易地将这些预算核减掉,导致无法在关键业务中使用开源软件,这对开源软件的发展也是不利的。另外,还需要大力建设开源教育的课程资源,当前专门的开源技术教材还比较少。按照开源的理念,开源的研究资料一般也是开源的,这意味着这方面的教材不一定会按纸质图书出版发行,我们是否能够接受这样的教材作为教研成果?再者,目前大学的各项考核评估都与开源无关,一些教学大纲中甚至规定学生要熟悉某些商业软件,教学技能考核则要考察教师是否能够熟练运用某些商业软件开展教学活动,而且,实验室中也充斥着大量的盗版商业软件,这些状况都应该尽快得到改变。
4 结 语
从1983年 Richard Stallman创建GNU项目至今,开源软件已经走过了35个春秋,并且依然生命力旺盛,逐渐成为今天软件产业的主流,这在信息技术的发展史上是少有的。开源软件一方面为我们积累了大量的计算资源,另一方面给我们提供了大量的开发经验,这些都是开源软件留给我们的宝贵财富。然而,在我们的大学计算机教育中尚未给予开源软件充分的重视:开源软件内容未明确列入计算机专业教育的教学大纲之中;几乎没有这方面的课程介绍开源的历史、开源的概念、开源的开发方法,以及帮助学生们分析开源成败的原因和经验;高校中也未能充分利用开源软件作为教育资源,这是非常遗憾的。在大学开设开源技术课程既切合国家信息化建设对开源的迫切需要,也顺应软件产业对人才培养的要求,符合高等教育发展的规律。笔者将开设开源技术课程的点滴经验与想法与读者分享,相信开源教育一定能在IT教育工作者的共同努力下结出硕果。
基金项目:北京信息科技大学教育教学改革研究专项招标课题“软件工程‘一流专业’建设的研究与实践”(2017JGZB01)
第一作者简介:李宁,男,教授,研究方向为文档信息处理,ningli.ok@163.com。
参考文献:
[1] 梅宏, 周明辉. 开源对软件人才培养带来的挑战[J]. 计算机教育, 2017(1): 2-5.
[2] 段新涛, 荣乾, 岳冬利. 基于开源软件的大学计算机基础课程改革研究[J]. 中国教育技术装备, 2014(14): 34-35.
[3] The Linux Foundation. 2018 Open source jobs report[EB/OL]. [2018-08-19].https://www.linuxfoundation.org/publications/2018/06/open-source-jobs-report-2018/. .
[4] 刘刚刚. 面向创新思维培养的开源硬件课程设计及开发[D]. 北京:北京邮电大学, 2018.
[5] 原建伟. 基于开源社区的实践教学评价体系研究[J]. 产业与科技论坛, 2017, 16(1): 245-246.
[6] Pinto G, Filho F F, Steinmacher I, et al. Training software engineers using open-source software: The professors' perspective[C]// IEEE Conference on Software Engineering Education and Training. IEEE, 2017.
[7] GitHub. 2018 GitHub education classroom report[EB/OL]. [2018-08-19].https://education.github.com/classroom-report/2018.
(完)
更多精彩:
北大李晓明教授:有向图的增强——一个适合以问题求解为导向教学的例子