学习编程——出于许多实际的、历史的以及一些空洞的原因——可能是所有计算机科学、信息学、软件工程和计算机工程课程的必经之路。几十年来,这一技能一直是计算机专业毕业生在其他学科中脱颖而出的关键。在这个观点中,我认为在21世纪圣世纪编程能力本身既不能代表市场对计算机专业毕业生所要求的技能,也不能像过去那样提供强大的职业资格。因此,我建议应该鼓励计算机专业的学生通过他们的课程活动为开源软件项目贡献代码。15年来,我一直在一个软件工程课程中实践和磨练这种方法,在这个课程中,开源贡献是一项评估的必修要求。2基于这个经验,我解释了为什么做出这样的贡献的能力是现代编码技能获取的概括,概述了学生可以从这样的活动中学到什么,描述了开源贡献练习如何嵌入到课程中,并以支撑作业成功的实践来总结。
如今,编程技能只是软件开发人员应该知道的一部分。原因有二。首先,实践的进步已经远远超过了弗雷德·布鲁克斯在20世纪70年代推广的首席程序员/外科医生模式,1包括大型系统、先进的工具、普遍的过程自动化,以及复杂的团队合作、工作流和管理的数量级工作。第二,工业上的最佳实践与大型成功的开源软件项目所遵循的最佳实践同质化了。企业吸收并贡献了许多开放源码开发实践。这使得相应的知识和技能在志愿者项目和企业项目之间可携带。
因此,教学必须从课程的教育实验室转向组织设置。通过对开源项目的贡献,学生获得在实践中强大的技能、知识和经验,使他们能够作为现代全面的开发人员高效地工作,而不是好莱坞所描绘的独狼程序员。在传统的编程作业中最难获得的技能是以下的社交和组织技能。
与技术相关的学习成果从分析评价到应用创造,包括以下几个方面:
社会和技术学习成果在现代工作场所中都是非常相关的——它们远远超出了软件工程项目的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行代码集成到一个大型项目中确实是一项有价值的成就。我们给学生的选择项目的建议可以总结如下。
我们把贡献的决定权完全留给学生:他们可以从项目的问题数据库中选择一个开放的任务,或者提出自己的改进或修复方案。学生们也经常在与项目核心团队互动后改变策略。虽然他们可以自由选择自己的贡献,这似乎让作业变得太容易了,但我们发现,这让作业变得足够容易,以至于大约一半的学生贡献被整合在一起。
学生在完成作业时面临的最常见问题是无法构建项目(通常是由于经验不足和平台不兼容),以及项目团队缺乏沟通(学生感到不必要的焦虑,认为他们的工作必须融入到项目中)。另一方面,当学生们发现他们的代码集成到世界各地使用的生产软件中时,他们感到最大的快乐。在课程评估中,学生总是对他们在完成开源软件贡献任务后获得的许多实用技能和自信心给予好评。
1.布鲁克斯,法国专利,Jr。《人月神话》。Addison-Wesley,波士顿,马萨诸塞州,1975年,32年。
2.未来的计算机科学课程已经在这里。Commun。ACM 49, 8(2006年8月),13;https://bit.ly/3bYxSJs
3.计算机课程联合工作组。软件工程本科学位课程导则。ACM。纽约;https://bit.ly/3vn04NP
非常感谢我的同事Serge Demeyer, Michael Greenberg和Angeliki Poulymenakou,以及以前的课程学生Zoe Kotti和Christos Pappas,他们对这个观点的早期版本提供了详细和建设性的意见。
数字图书馆是由计算机协会出版的。版权所有©2021 ACM, Inc。
打个比方,我想说:每个工程专业的学生都应该为开源硬件项目做出贡献。
显示1评论