AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

为什么计算机专业的学生应该为开源项目做贡献?

  • 2021-07-06
  • 本文字数:3925 字

    阅读完需:约 13 分钟

为什么计算机专业的学生应该为开源项目做贡献?

本文最初发布于 acm.org 网站,经原作者Diomidis Spinellis授权,由 InfoQ 中文站翻译并分享。作者声明保留所有权利。


出于许多现实的、历史的和一些空泛的原因,编程可能是所有计算机科学、信息学、软件工程和计算机工程课程的必修课。


数十年来,这项技能都是计算机专业毕业生与其他学科同学的典型区分点所在。本文提出的观点认为,在 21 世纪,编程熟练度既不能涵盖市场对计算机毕业生的技能要求,也不能像过去那样带来强大的职业竞争力。


因此,我建议学校应该鼓励计算机专业的学生通过他们的课程活动为开源软件项目贡献代码。我已经在软件工程课程中实践和打磨这种方法超过 15 年了,在我的课程里开源贡献是强制的打分点(注 2)。


基于这方面的经验,我会在本文中解释为什么做出这种贡献的能力可以反映现代编程技能的一般水平,并介绍学生可以从这些活动中学到什么,具体说明如何将开源贡献练习嵌入到课程中,并总结一些在课程中获得成功的实践。

贡献是新的编程

如今,编程技能只是软件开发人员应掌握知识和能力的一部分。出现这种情况有两个原因。首先,现实实践已经远远超出了 Fred Brooks 在 1970 年代推广的首席程序员/外科医生模型(注 1)所描述的范畴,开发人员今天要面对规模大得多的系统、更先进的工具链、普遍的流程自动化,还要参与复杂的团队合作、工作流程和管理方面的工作。


其次,行业最佳实践与成功的大型开源软件项目所遵循的实践业已趋同。企业界已经吸收并贡献了许多开源开发实践。因此相应的知识和技能对于志愿者项目和企业项目来说是相通的。


正因如此,编程教学必须从课堂实验室教育形态转向基于组织环境的教育方式。学生在为开源项目做出贡献的同时,可以在实践中获得广泛的技能、知识和经验,让他们成为符合现代需求、全面发展的高生产力开发人员,而不是好莱坞电影描绘的那种独狼程序员。在传统的编程课程中最难获得的技能包括以下社交和组织技能:


  • 感知背景和氛围的能力:了解如何在开发工作中融入项目的范围、使命,如何与同事组成团队,发展新的领导形式;

  • 与项目涉及的全球多元化社区互动;

  • 与团队协商特性请求、需求和实现选项;

  • 处理沟通问题,例如无人响应,这在志愿者运营的项目中很常见;

  • 通过问题分类和发布计划等实践,体会将软件视为产品的理念;

  • 接收、讨论和处理代码审查意见。


对应的技术层面学习成果涵盖了从分析和评估到应用和创造的领域,包括以下内容:


  • 浏览项目的资产,例如软件代码、问题、文档和拉取请求;

  • 快速评估软件系统或组件的产品和流程质量,这在现代软件重用实践中是很常见的需求;

  • 配置、构建、运行和调试第三方代码;

  • 设置和运行具有不同软件和硬件需求的软件密集型系统。在我开设的课程中,涉及的平台包括手机、汽车电子、应用服务器、数据库、容器、物联网设备和嵌入式设备;

  • 选择现实的贡献目标。(一开始,学生往往会高估他们为项目做出贡献的能力。)这是敏捷开发冲刺中的一项关键活动;

  • 阅读第三方代码,找到需要添加或修复代码的位置;

  • 通过添加新特性或修复错误来改进大型第三方系统;

  • 编写测试,证明自己的贡献在现在和将来都能按预期运行;

  • 使用由多种编程语言和工具开发的软件系统;学生经常惊讶地发现,只掌握集成开发环境(IDE)的相关知识就想为项目做出贡献是远远不够的;

  • 为他们的工作编写文档,通常使用声明性标记语言,例如 Markdown 或文档生成器代码注释;

  • 遵循复杂的配置管理(版本控制)流程,例如处理问题分支和重新提交代码;

  • 通过预提交和持续集成检查和测试。


上述社交和技术学习成果都与现代行业环境息息相关——它们远远超出了 ACM/IEEE 软件工程课程的推荐学习范围。


同时,这种课程的实践还遵循了许多 ACM/IEEE 课程指南(注 3)的要求,具体包括:


个人技能的锻炼,例如批判性判断、有效沟通和认识到自己的局限性(课程指南 8);培养自主学习的技能(指南 9);理解解决软件工程问题的多个维度(指南 10);使用合适和最新的工具(指南 12);构建一个真实世界的基础(指南 14);并通过各种教学和学习方法进行教育(指南 18)。

在软件工程课程中融入开源开发实践

我的这堂必修的开源软件贡献课程是名为“实践中的软件工程”的三年级课程的一部分。(本课程在 2019 年获得了管理学院的卓越教学奖。)


我们每年向大约 20-50 名学生教授这门课程,他们学习由雅典经济与商业大学管理科学技术学院设置的“软件和数据分析技术”专业。该课程也是这所大学信息学院的推荐选修课。


该课程使用了一种(轻量)翻转课堂方法(注 4)进行教学,并完全通过课程作业评价成绩。开源贡献部分占课程成绩的 50%。学生可以单独或结对完成作业。


结对是为了帮助可能信心不足的学生,不过在这种情况下,结对的学生必须完成比独立学生更多的作业,而且俩人的贡献必须分别放在不同的 GitHub 帐户里。


我们根据学生在线提供的开源项目成果、他们的期末书面报告和课堂演示来评估学生的表现。


我们根据学生在线提供的开源项目成果(代码提交和交互)、他们的期末书面报告和课堂演示来评估学生的表现。三场演示分别安排在大约第 4 周(描述所选项目)、第 8 周(概述准备做出的贡献)和第 14 周(总结贡献的实现)。


让贡献获得项目接收并不是通过考核的先决条件,但贡献通过会有加分。其他考核要素包括学生对他们选择的项目的理解和文档撰写、贡献的广度、实现质量、代码与项目的集成水平、测试实现、与项目开发团队的合作过程、口头陈述、书面报告的质量,以及在版本控制、代码审查、问题管理和文档编写等活动中使用可用工具链的情况。


从理论上讲,作弊(复制他人项目分支的贡献,或者找别人完成作业)是可能存在的问题;为了预防作弊,我们让学生在课堂上展示他们的作品,并让学生认识到他们的(公共)贡献会成为他们工作技能组合的一部分,还可能会被未来的潜在雇主询问。


该课程每年都会安排一两位专职助教,他们会开设针对关键工具的实验室课程,并在办公时间为学生提供常见疑难答复。他们为支持课程付出了很多辛勤劳动,这也意味着如果要增加学生人数,就需要相应地增加助教人数。

实现成功的开源贡献

学生们都是怀着惶恐的心情开始课程学习的,到结课时都非常兴奋。要让学生为开源项目做出有意义的贡献,需要考虑到他们缺乏经验的背景,并与现代开源软件开发的快节奏与复杂性之间取得平衡。


在我教授这门课程的这些年里,我看到为开源项目做出贡献变得越来越容易了。开源项目变得更具包容性。许多项目简化了入门和指导流程,团队也更加多样化(女性领导更多了),公开的联系方式是很常见的,回复也通常很有礼貌,并且大都支持 Windows 构建(尽管一些学生采用 Linux 以避免出差错)。


由于精心设计的拉取请求工作流、持续集成的广泛采用、多样化的代码检查机器人、友好的代码审查流程,以及使用拉取请求草案对工作进程进行增量审查的设计,对开源项目做出贡献变得愈加轻松。


学生们深入参与的开源项目环境与他们在传统学术作业中体验的常见环境相去甚远。


尽管如此,学生们深入参与的开源项目环境与他们在传统学术作业中体验的常见环境还是相去甚远。因此,唯一现实的目标就是只做一些小规模的贡献。让课程作业取得预期效果的关键在于,教师对学生的贡献不能抱(看起来很大的)指望。


对于一个本科生来说,做出开源贡献往往是一件门槛非常高的事情,所以在一个大项目中集成 20 行代码就称得上是一项成就了。我们给学生挑选项目的建议可以总结如下。


  • 选择一个有多个活跃贡献者的项目,这样就有一个社区来指导你并回答你的问题。

  • 选择一个相对流行的项目(一些 GitHub 明星),项目应该证明自己提供了有用的功能并且以相对合理的方式开发。你应该避开 GitHub 上被废弃的那种论文项目。

  • 避开非常受欢迎的项目,这样你的贡献就不会被竞争、噪音和官僚主义淹没。(尽管如此,我们还是有学生参与了一些众人皆知的项目,例如 Tensorflow 和 VisualStudioCode。)

  • 做好验证,确保你可以在自己的计算机上构建和运行项目。

  • 确认项目会定期接受来自外部的拉取请求,这样你才有机会。

  • 尝试提供一个微不足道的修复作为热身练习,并测试你遵循项目工作流程的能力。

  • 查找标记为“Goodfirstissue”的项目问题,这表明项目对新贡献者开放。(有几个在线列表统计了包含这类问题的项目。)


我们将贡献的选择权完全留给学生:他们可以从项目的问题数据库中选择一个开放的任务,或者提出他们自己的增强或修复。学生在与项目的核心团队互动后也经常改变策略。


尽管让他们自由选择自己的贡献路线似乎让作业变得太容易了,但我们发现这种背景下大约一半的学生贡献都能被项目接收。


学生在作业中面临的最常见问题是无法构建项目(通常是由于缺乏经验和平台不兼容)以及项目团队缺乏沟通(学生会产生不必要的焦虑情绪,认为他们的贡献必须被项目接受才行)。


另一方面,学生们发现他们的代码集成到了被全球使用的生产软件中时是最兴奋的。在课程评估中,学生往往非常满意他们在完成开源软件贡献任务后获得的许多实践技能和自信心。


参考文献:


  1. Brooks, F.P., Jr. The Mythical Man-Month. Addison-Wesley, Boston, MA, 1975, 32.

  2. Spinellis, D. Future CS course already here. Commun. ACM 49, 8 (Aug. 2006), 13;https://bit.ly/3bYxSJs

  3. The Joint Task Force on Computing Curricula. Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering. ACM. New York, NY;https://bit.ly/3vn04NP

  4. Tucker, B. The flipped classroom. Education Next 12, 1 (Mar. 2012), 82–83.

作者介绍

Diomidis Spinellis(dds@aueb.gr)是希腊雅典经济与商业大学管理科学与技术学院软件工程课程教授,并在荷兰代尔夫特大学软件技术学院教授软件分析技术。


原文链接:


https://cacm.acm.org/magazines/2021/7/253459-why-computing-students-should-contribute-to-open-source-software-projects/fulltext

2021-07-06 14:321703
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 536.9 次阅读, 收获喜欢 1977 次。

关注

评论 1 条评论

发布
用户头像
学到了,这就通过开源项目提高自己 github 活跃度。
2022-11-02 07:43 · 河北
回复
没有更多了
发现更多内容

安全知识

笑春风

大学生读书情况调研

hepingfly

读书 调研 大学生 阅读

软件IT专业大学生就业意向问卷调查

三掌柜

签约计划 问卷调查

政采云:数据可视化探索之SpreadJS 表格控件

葡萄城技术团队

IT之家专访庄秉翰:未来全球5G vRAN将达90%,英特尔5G布网参与度非常高

E科讯

Rust从0到1-代码组织-use关键字

rust 代码组织 use

阿里云 RTC QoS 弱网对抗之 LTR 及其硬件解码支持

阿里云视频云

阿里云 音视频 WebRTC 视频解码 视频云

【InfoQ 写作平台 1 周年】我和写作平台剪不断的“孽缘”

三掌柜

征稿 InfoQ 写作平台 1 周年

HTTP/2做错了什么?刚刚辉煌2年就要被弃用了

学Java关注我

Java 编程 架构 程序人生 计算机

15个问题告诉你如何使用Java泛型

华为云开发者联盟

Java 接口 参数 Java泛型 泛型对象

如何基于 PANO SDK 实现 iOS 端屏幕共享互动

拍乐云Pano

ios sdk

Worktile 权限设计与实现

PingCode研发中心

项目管理 后端 权限管理

五一啃透这份阿里巴巴Java面试指导手册(泰山版),节后直接面试找工作!

Java架构追梦

Java 阿里巴巴 架构 面试 泰山版

10行C++代码实现高性能HTTP服务

万俊峰Kevin

c c++ workflow Open Source

Windows系统下电脑强制卡死、关机的邪恶方法

不脱发的程序猿

程序人生 技术人 4月日更 系统关机 计算机小技巧

如何构造更好的团队

soolaugust

团队管理 架构

IT专业本科生毕业选择【就业】/【攻读硕士】调查问卷

Aldeo

考核 大学生毕业 问卷调查

探讨 JS 对象如何缓存属性的值

零维

JavaScript 大前端 设计模式

圆梦阿里之后,我收集整理了这份“2021春招常见面试真题汇总”

比伯

Java 编程 架构 程序人生 计算机

五一小长假最新产物:阿里巴巴面试的参考指南(泰山版)

学Java关注我

Java 编程 程序员 架构 计算机

为什么越来越多的人不敢结婚?

徐说科技

婚姻 情感 恐婚

anyRTC 智能硬件解决方案

anyRTC开发者

音视频 WebRTC IoT 智能硬件

关于软件IT专业大学生对专业认知情况的调查问卷

花花

签约计划

可能有点长的Spring MVC入门篇

北游学Java

Java spring ssm Spring MVC

视频后期怎么添加AR贴图?一招教你搞定!

奈奈的杂社

视频剪辑 视频后期 剪辑 会声会影

网易云课堂个性化推荐实践与思考

有道技术团队

推荐系统

水性硅胶防滑透明浆

C13713145387

面向软件 IT 专业的高校大学生职业思考调查问卷

程序员架构进阶

职业规划 调查报告 就业 28天写作 4月日更

鸿蒙系统(HOS)终于上线,微内核操作系统科普

北游学Java

Java 操作系统 微内核

索引的正确“打开姿势”

华为云开发者联盟

数据库 索引 B-tree Psort 分区

大学生IT就业方向以及就业培训的调查问卷

麦洛

调查报告 调查采访能力考核 问卷调查

为什么计算机专业的学生应该为开源项目做贡献?_开源_Diomidis Spinellis_InfoQ精选文章