acm-header
登录

ACM通信

实践

让CS和IT更具沉浸感的四种方法


沙漠路上的车辆

图片来源:Jesse The Traveler / Flickr

回到顶部

我很幸运。我以一种难以置信的沉浸式的方式学习IT。我的前两份工作都是在遵循当时最佳实践的组织中工作。因为我只知道这些,所以我认为这很正常。我不知道这些组织有多么独特。我当时并不知道,在未来10年或更长时间内,行业中的其他公司都不会采用这些技术。

在接下来的职业生涯中,我接触到了一些不遵循相同最佳实践的公司,也没有其他公司。事实上,他们根本不知道这种最佳实践的存在。我认为这是一个错误,并着手解决它,沮丧的是有人会满足于其他东西。我在重新创造我认为“正常”的东西。

然而,我试图再现的环境并不正常,或者更准确地说,它并不典型。相比之下,典型的IT组织是完全混乱的。IT组织的质量遵循一个钟形曲线:少数百分比的组织运行起来像经过微调的机器,少数百分比的组织看起来像着火的有毒废料堆,而绝大多数组织处于中间的某个位置。

幸运的是,我中了IT职业彩票。在我职业生涯的早期,我看到班上最好的学生是什么样子的,并认为这很正常。后来,这个高标准让我看起来像个有远见的人。事实上,我不知道还有什么别的办法。

大多数IT从业者就没有这么幸运了。他们没有我所拥有的同样的经历,他们也不知道什么是更好的。

我相信,这就是为什么钟形曲线没有变成一根曲棍球棒,甚至没有变成一个不平衡的斑点。这就是为什么我们不能拥有美好的东西。

回到顶部

我们是如何陷入这种境地的?

学生当然不是在课堂上学习最佳实践。事实上,学生更有可能通过课外参与开源项目而不是从大学教授那里学到最好的DevOps实践。

大多数大型开放源码项目使用Git进行源代码控制,使用Jenkins进行CI/CD(持续集成/持续部署),并拥有完全自动化的测试过程,因为它使它们能够以最小的开销扩展到大量参与者。较小的开放源码项目也倾向于使用这些工具,因为它们缺乏资源,而使用这些工具使管理项目更加容易。

然而,有多少大学要求通过Git提交CS作业?有多少大学拥有一个展示最佳DevOps实践的IT部门?有多少大学有计算机系和IT系合作推动最佳实践的边界?我向你保证这个数字很低。毫无疑问,导致DevOps转型的创新并非来自学术界。这是一个耻辱,应该让每一个计算机系低头羞愧。

回到顶部

我们如何扭转这种局面?

我们如何确保学生从一开始就接触到最佳实践中的最佳,从而使他们认为其他任何东西都是错误的?

我们怎样才能使课程更具沉浸感?

以下是大学可以做的一些小的和大的事情。

  1. 从一开始就使用DevOps工具。学生应该在做CS作业时使用源代码库,比如Git,以及CI/CD工具,比如Jenkins。这些过程应该被确立为正常的工作方式。教授应该期望通过链接到Git提交和Jenkins输出日志来提交家庭作业。

毫无疑问,有些教师会觉得,如果不增加Git的复杂性,教授一年级的计算机科学就已经足够困难了。然而,大多数ide使简单的签入/签出操作变得轻而易举,特别是对于没有分支的单人项目。当项目变得更具有合作性时,学生将为更高级的Git特性做好准备。

  1. 作业应该生成一个Web页面,而不是控制台的文本。最近,我和一屋子CS专业的三年级学生进行了交流,我震惊地发现,大多数人不知道HTML。课程是相当标准的本科生算法之类的。HTML是你在美术部门学到的东西;计算机科学系是为认真的学生准备的。

我认为在严肃的计算机科学理论和意外地变成Web应用程序新兵训练营之间有一个中间地带。

说大多数软件工程师编写的代码在某种程度上是基于web的应用程序的一部分并不是一个激进的说法。在像Squarespace和谷歌这样的公司,软件工程师的ide为新程序提供默认模板。这样的模板适用于将输出定向到Web页面的自包含Web服务器。即使是一个简单的“Hello World!”程序也是一个Web服务器,它作为HTTP请求的结果输出问候语,并在默认情况下生成日志信息、监视指标等等。

是的,这对于一个入门级学生的“把你的名字打印十次”项目来说有点贵。但在此之后,生成一个Web页面!

  1. IT课程应该是沉浸式的。正规教育怎样才能更好地模仿我有幸受益的沉浸式体验呢?

大多数IT课程都是自下而上的。学生被教授独立的子系统,然后是更高层次的抽象。最后,他们了解到这一切是如何结合在一起的。在大学生涯接近尾声的时候,他们学习了使所有这些都可持续发展的最佳实践。或者,更典型的是,这些可持续发展的实践直到后来才学会,当新毕业生有了工作,被分配给一个解释“现实世界中事物是如何工作的同事”。

相反,IT课程应该从一个遵循所有最佳实践的工作系统开始。学生们应该把这视为常态。他们可以剖析各个子系统并将它们重新组合在一起,而不是从零开始构建它们。

奥斯陆大学(University of Oslo)的系统管理硕士课程包括一个名为“正常运行时间挑战”(Uptime Challenge)的多周沉浸式体验。1学生被分成两个小组,每个小组都有一个基于Web的应用程序,包括多个Web服务器、一个负载平衡器、一个数据库等等。该应用程序是一个名为BookFace的简单社交网络应用程序。

一旦系统开始运行,指导员将启用一个向应用程序发送不断增加的模拟流量的系统。每个小组的系统每五分钟检查一次正常运行时间。如果网站上线,团队将获得一定数量的虚拟货币(积分),如果页面在0.5秒内加载,团队将获得少量奖金。如果网站宕机,就会从团队中扣款。这模拟了一个典型的网站商业模式:只有网站上线,你才能赚钱。速度更快的网站更有吸引力,也更有利可图。客户对网站关闭或变慢的反应是转向竞争对手;因此,那些表现较差的网站亏损了。

挑战持续数周,在此期间,学生们学习执行常见的网络操作任务,如软件升级、bug修复、任务自动化、性能调优等。受Netflix的Chaos Monkey的启发,2各个主机被随机重新启动,以测试整个系统的弹性。

正常运行时间挑战使学生能够理解IT对组织的价值,并确定影响该价值并允许持续改进的IT流程。因此,学生更有动力,也能更好地评估自己的工作。这将提高学生的参与度,并促进更多实际的课堂讨论。它在学生的行为和他们创造的价值之间建立了一个直接的反馈循环。最重要的是,它让学生更好地为现实世界做准备。

  1. 从一开始就沉浸其中。IT项目通常涉及某种遗留系统。最恰当的类比是,当一辆卡车在高速公路上行驶时,被要求给它换轮胎。

软件工程师花在阅读别人代码上的时间比自己写代码的时间要多。我们发展现有的系统。新手或“全新开始”的机会很少。我遇到的许多人从来没有从零开始设计过新的网络、应用程序或基础设施。为什么教育不能更好地为学生做好准备呢?

像“正常运行时间挑战”这样的东西可以在教育过程中更早地引入吗?

也许在上课的第一天,学生们不仅应该拿到教学大纲的复印件,还应该拿到一个工作系统的管理控制面板的用户名和密码。教学和实验可以以维护这个系统为导向。学生将拥有自己的wiki来维护文档和操作运行本。

每个学生都有自己的工作系统,但我建议每隔几周就随机分配学生管理一个不同的系统。看看他们的同学是如何以不同的方式做事的,这将是有教育意义的。此外,了解编写良好的运行本价值的最好方法是继承别人维护得很差的运行本。

学校正在制定更多的沉浸式教育策略。与工业合作,博西尔教区社区学院一个创建了一个系统管理员的应用科学副学士学位,该学位高度沉浸式,涵盖了核心DevOps原理,包括自动化技术(基础设施如代码和软件定义的网络),精益/看板思想,云基础,甚至DevSecOps。

回到顶部

结论

教育应该从一开始就寻求使最佳做法正常化。在这些最佳实践之外工作应该被认为是一个错误。学生不应该在毕业后努力学习最佳实践,如果潜在的新雇主还没有这些实践,他们应该感到震惊。

IT和CS课程都可以构建得更具沉浸感,因为沉浸式教育更可靠地反映了现实世界。它为学生进入工业界做准备,并更好地为那些选择这条道路的人的研究提供信息。先见森林,然后了解树木,这有助于学生在学习某样东西之前理解为什么要学习它。这更容易上手,因此更吸引人,也更适合游戏化。

我们最初的经历巩固了我们的常态。学生应该从看到一个运行良好的系统开始,剖析它,学习它的各个部分,并逐步深入到细节。在他们体验过运行良好的系统之前,不要让他们看到运行糟糕的系统是什么样子的。一个运行糟糕的系统会让他们厌恶。

ACM队列的q戳相关文章
queue.acm.org

软件工程本科
Michael J. Lutz等人。
http://queue.acm.org/detail.cfm?id=2653382

与艾伦·凯的对话
http://queue.acm.org/detail.cfm?id=1039523

产品经理的发展
艾伦Chisa
http://queue.acm.org/detail.cfm?id=2683579

回到顶部

参考文献

1.正常运行时间挑战:通过游戏化为价值驱动运营提供学习环境。系统管理教育2, 1 (2016);https://www.usenix.org/jesa/0201/begnum

2.反脆弱组织。Commun。ACM 56(2013年8月),4044。

回到顶部

作者

托马斯·a·利蒙切利是纽约Stack Overflow公司的一名站点可靠性工程师。他的博客地址是EverythingSysadmin.com并在@YesThatTom

回到顶部

脚注

一个。https://www.bpcc.edu/catalog/current/technologyengineeringmathematics/aas-system-administration.html


版权归所有者/作者所有。授权ACM出版权利。
请求发布的权限permissions@acm.org

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


评论


罗伯特·格林

感谢这篇精彩的文章。CS绝对应该这样教!


马克·门阶

在大学里教授最佳实践是一个有趣的想法,但我认为它应该慎用。计算科学不同于软件开发,就像数学不同于计算一样。如果过于强调最佳实践,那么计算的核心理论基础可能会被忽视。对于一个目标是学习复杂性理论的算法类来说,强加IDE、工具链和方法论需求是过份的。必须注意的是,要确保学生在离开时对过程的掌握不是很牢固,而是对理论的掌握很薄弱。这就是为什么同时存在计算机科学和软件工程课程;走一条路的学生和走另一条路的学生有不同的期望和目标。


显示所有2评论

Baidu
map