acm-header
登录

ACM通信

的观点

为什么计算机专业的学生应该参与开源软件项目


小数字和大的聊天图标,插图

信贷:Bakhtiar对于玉米蛋白

学习编程——出于许多实际的、历史的以及一些空洞的原因——可能是所有计算机科学、信息学、软件工程和计算机工程课程的必经之路。几十年来,这一技能一直是计算机专业毕业生在其他学科中脱颖而出的关键。在这个观点中,我认为在21世纪世纪编程能力本身既不能代表市场对计算机专业毕业生所要求的技能,也不能像过去那样提供强大的职业资格。因此,我建议应该鼓励计算机专业的学生通过他们的课程活动为开源软件项目贡献代码。15年来,我一直在一个软件工程课程中实践和磨练这种方法,在这个课程中,开源贡献是一项评估的必修要求。2基于这个经验,我解释了为什么做出这样的贡献的能力是现代编码技能获取的概括,概述了学生可以从这样的活动中学到什么,描述了开源贡献练习如何嵌入到课程中,并以支撑作业成功的实践来总结。

回到顶部

贡献是新的编码

如今,编程技能只是软件开发人员应该知道的一部分。原因有二。首先,实践的进步已经远远超过了弗雷德·布鲁克斯在20世纪70年代推广的首席程序员/外科医生模式,1包括大型系统、先进的工具、普遍的过程自动化,以及复杂的团队合作、工作流和管理的数量级工作。第二,工业上的最佳实践与大型成功的开源软件项目所遵循的最佳实践同质化了。企业吸收并贡献了许多开放源码开发实践。这使得相应的知识和技能在志愿者项目和企业项目之间可携带。

因此,教学必须从课程的教育实验室转向组织设置。通过对开源项目的贡献,学生获得在实践中强大的技能、知识和经验,使他们能够作为现代全面的开发人员高效地工作,而不是好莱坞所描绘的独狼程序员。在传统的编程作业中最难获得的技能是以下的社交和组织技能。

  • 发展对环境的理解:理解开发工作如何嵌入到项目的范围、任务、合作开发团队和新的领导形式中;
  • 与项目的全球和多样化社区互动;
  • 协商特性请求、需求和实现选择;
  • 处理沟通问题,如缺乏回应,这在志愿者运营的项目中很常见;
  • 通过诸如问题筛选和发布计划等实践来欣赏软件作为一个产品;而且
  • 接收、讨论和处理代码评审注释。

与技术相关的学习成果从分析评价到应用创造,包括以下几个方面:

  • 浏览项目的资产,如软件代码、问题、文档和拉请求;
  • 迅速评估软件系统或组件的产品和过程质量,这是现代软件重用经常需要的;
  • 配置、构建、运行和调试第三方代码;
  • 建立和运行软件密集型系统,满足不同的软件和硬件需求。在我运行的过程中,这些包括手机、汽车电子、应用服务器、数据库、容器、物联网设备和嵌入式设备;
  • 选择现实的贡献目标。(起初,学生们倾向于过分高估自己对项目的贡献能力。)这是敏捷开发sprint中的一个关键活动;
  • 阅读第三方代码,以确定需要在何处添加或修复它们;
  • 通过添加新功能或修复bug来修改大型第三方系统;
  • 编写测试来证明一个贡献现在和将来都如预期的那样工作;
  • 使用多种编程语言和工具开发的软件系统;学生们经常惊讶地发现,集成开发环境(IDE)的知识绝不是对项目做出贡献的通行证;
  • 记录他们的工作,通常使用声明性标记语言,例如Markdown或文档生成器代码注释;
  • 遵循复杂的配置管理(版本控制)工作流,例如处理问题分支和重基代码提交;而且
  • 通过预先提交和持续集成检查和测试。

社会和技术学习成果在现代工作场所中都是非常相关的——它们远远超出了软件工程项目的ACM/IEEE课程。3.同时,课程的实践包括许多ACM/IEEE课程指南作为交叉关注点。这些包括:锻炼个人技能,如批判性判断、有效沟通和认识自己的局限性(课程指南8);发展自主学习的技巧(CG 9);欣赏软件工程问题解决的多维度(CG 10);使用适当和最新的工具(CG 12);具有现实世界的基础(CG 14);通过各种教与学的方法进行教育(CG 18)。

回到顶部

在软件工程课程中嵌入开源开发

必修的开源软件贡献作业是三年级课程“软件工程实践”的一部分。(该课程于2019年获得管理学院颁发的优秀教学奖。)我们每年向大约20-50名学习雅典经济与商业大学管理科学与技术系“软件与数据分析技术”专业的学生教授这门课程。该课程也是大学信息学系的推荐选修课。

该课程采用(轻)翻转课堂教学方法4并完全通过课程作业进行评估。开源贡献作业占课程成绩的50%。学生可以单独作业,也可以两人一组。结对的目的是帮助那些可能对自己感到不安全的学生,尽管在这种情况下,结对必须比个人完成更多的工作,并且必须从单独的GitHub账户做出贡献。


我们评估学生的表现基于他们在线上的开源项目工作,他们的最终书面报告,以及他们的课堂报告。


我们根据学生的在线开源项目工作(代码提交和交互)、最后的书面报告和课堂报告来评估学生的表现。大约在第4周(描述选定的项目)、第8周(概述提议的贡献)和第14周(总结贡献的实现)进行三个陈述。投稿被接受不是通过作业的先决条件,但它是积极的评价。其他被评估的因素包括学生对他们选择的项目的理解和文档,他们的贡献的广度,他们的实现的质量,他们的代码与项目的集成,他们的测试实现,他们与项目开发团队的协作,他们的口头报告,他们的书面报告的质量,以及他们对可用工具的使用,如版本控制,代码审查,问题管理,和文档。

从理论上讲,欺骗(通过复制项目分支的贡献,或外包工作)可能是一个问题;与之相反的是,让学生在课堂上展示他们的作品,并知道他们(公开)的贡献会成为他们工作组合的一部分,可能会被未来的雇主提问。

该课程每年都有一到两个专门的教学助理,他们负责关键工具的实验,并在办公时间为学生提供他们总是面临的困难的建议。他们为支持这门课程所付出的努力意味着,增加学生人数将需要相应增加助教。

回到顶部

确保成功的开源贡献

学生们怀着忐忑不安的心情来学习这门课程和完成作业,然后满怀喜悦地完成它。确保学生能够对开源项目做出有意义的贡献,需要平衡他们的经验不足与现代开源软件开发的快节奏复杂性。

在我分配这项任务的这些年里,我发现为开源项目做贡献变得更容易了。项目正变得更具包容性。许多项目简化了入职和指导,团队更加多样化(包括女性领导),公开联系代码是常见的,回应通常是礼貌的,Windows构建通常得到支持(尽管一些学生采用Linux以避免故障)。由于拉式请求工作流的手持,持续集成的广泛采用,多样化的代码检查机器人,友好的代码审查过程,以及使用草稿拉式请求来允许增量审查正在进行的工作,贡献已经被简化了。


学生们所接触到的开源项目环境与他们在传统学术作业中所体验到的环境相差甚远。


尽管如此,学生们所接触到的开源项目环境与他们通常在传统学术作业中所体验到的环境仍然相距甚远。因此,小规模捐款是唯一现实的目标。让课程作业顺利完成的关键,是要对学生的贡献抱有乍一看非常低的期望。对于一名本科生来说,开源贡献的障碍通常是如此之高,以至于将20行代码集成到一个大型项目中确实是一项有价值的成就。我们给学生的选择项目的建议可以总结如下。

  • 选择一个有几个活跃贡献者的项目,这样就会有一个社区来指导你并回答你的问题。
  • 选择一个相对受欢迎的项目(一些GitHub明星),证明它提供了有用的功能,并以相对合理的方式开发。你想避免在GitHub上上传一个废弃的论文项目。
  • 避免非常受欢迎的项目,这样你的贡献就不会淹没在竞争、噪音和官僚主义中。(尽管如此,我们还是有学生贡献了一些重磅项目,比如Tensorflow和Visual Studio Code。)
  • 验证是否可以在计算机设置上生成并运行项目。
  • 确保项目定期接受来自外部的pull request,这样你的项目也会有机会。
  • 试着贡献一个微不足道的修复,作为一个热身练习,并作为一种测试您遵循项目工作流程的能力的方法。
  • 寻找标记为“Good first issue”的项目问题,这表明该项目对新的贡献者开放。(网上有几个项目的列表存在这样的问题。)

我们把贡献的决定权完全留给学生:他们可以从项目的问题数据库中选择一个开放的任务,或者提出自己的改进或修复方案。学生们也经常在与项目核心团队互动后改变策略。虽然他们可以自由选择自己的贡献,这似乎让作业变得太容易了,但我们发现,这让作业变得足够容易,以至于大约一半的学生贡献被整合在一起。

学生在完成作业时面临的最常见问题是无法构建项目(通常是由于经验不足和平台不兼容),以及项目团队缺乏沟通(学生感到不必要的焦虑,认为他们的工作必须融入到项目中)。另一方面,当学生们发现他们的代码集成到世界各地使用的生产软件中时,他们感到最大的快乐。在课程评估中,学生总是对他们在完成开源软件贡献任务后获得的许多实用技能和自信心给予好评。

回到顶部

参考文献

1.布鲁克斯,法国专利,Jr。《人月神话》。Addison-Wesley,波士顿,马萨诸塞州,1975年,32年。

2.未来的计算机科学课程已经在这里。Commun。ACM 49, 8(2006年8月),13;https://bit.ly/3bYxSJs

3.计算机课程联合工作组。软件工程本科学位课程导则。ACM。纽约;https://bit.ly/3vn04NP

4.塔克,B.翻转课堂。教育未来12, 1(2012,3), 82-83。

回到顶部

作者

Diomidis卢卡雷利dds@aueb.gr)是希腊雅典经济与商业大学管理科学与技术系的软件工程教授,以及荷兰代尔夫特理工大学软件技术系的软件分析教授。

回到顶部

脚注

非常感谢我的同事Serge Demeyer, Michael Greenberg和Angeliki Poulymenakou,以及以前的课程学生Zoe Kotti和Christos Pappas,他们对这个观点的早期版本提供了详细和建设性的意见。


版权归作者所有。
向所有者/作者请求(重新)发布许可

数字图书馆是由计算机协会出版的。版权所有©2021 ACM, Inc。


评论


Holger Kienle

打个比方,我想说:每个工程专业的学生都应该为开源硬件项目做出贡献。


显示1评论

Baidu
map