1996年秋季学期,RIT(罗切斯特理工学院)在美国推出了第一个本科软件工程课程。9,10 该课程是五年规划、开发和审查的成果,从一开始就旨在为毕业生在商业和工业软件开发领域的专业职位做好准备。
该课程最初只有一个15人的班级,后来获得了ABET认证,规模稳步扩大。如今,在校学生人数超过400名本科生。合作教育学生和毕业生受雇于各种规模的组织,包括微软、谷歌、苹果和联合技术公司,以及各种政府机构。该课程设在RIT独立的软件工程系,具有必要的独立性和灵活性,以确保其在发展过程中的完整性。
其主要重点是培养专业的、实践型的软件工程师。这一点最直接地体现在为期一年的合作教育要求中,该要求在两年的基础课程学习之后进行。学生们在正规学习和带薪专业实践之间交替进行;在五年制课程结束时,他们既有扎实的学术准备,又有重要的实践经验。这些毕业生非常抢手,因为他们已经准备好定义、设计、开发和交付高质量的软件系统。
当然,问题仍然存在:为什么要设立专门的软件工程学位?毕竟,大多数新入职的工业界员工都来自传统的计算机科学和工程专业。接下来的章节将阐述我们开辟新方向的理由——我们坚信工业界需要入门级的软件工程师,并且我们确信我们可以提供一种教育体验,更好地为学生在软件领域的职业生涯做好准备。然后,本文将探讨RIT课程与典型的本科计算机科学课程之间的差异。这反过来又引出了我们教学方法的介绍,以及软件工程在计算机科学课程中的现状。最后几节将讨论RIT课程与工业界的关系,以及合作教育学生和毕业生的准备情况。
在20世纪80年代后期,本文的一位作者(Lutz)从RIT休了两年工业假:先是在光学计量产品制造商GCA/Tropel公司,后来在伊士曼柯达公司,他在那里领导团队开发嵌入式系统和应用级软件。他的部分职责包括面试、招聘和指导新毕业的大学生,而他在这段时间观察到的情况令人不安。总的来说,这些毕业生在基础计算理论和技术方面有扎实的背景。许多人修过算法分析和计算理论课程,大多数人对操作系统、编程语言概念、人工智能、图形学和编译器设计有一定的了解。然而,他们缺乏在大型、复杂的工业质量系统上有效工作的必要背景。
特别是,这些毕业生很少(如果有的话)有作为软件团队成员工作的经验,但这在工业实践中很常见。他们对设计的知识通常仅限于计算机科学家感兴趣的那些工件——编译器、操作系统、图形库等——但他们对设计作为一项独立的活动几乎没有认识。大多数人没有版本控制的经验,更不用说配置管理了。他们对测试的知识通常很匮乏,很少有人听说过验证和确认。最后,他们对创建产品的实际过程知之甚少,除了死记硬背瀑布模型之外。
与工业界和软件工程教育界其他人士的对话表明,这些问题普遍存在。问题仍然是科学与工程的旧问题:那些目标是增长和扩展知识的人与那些应用这些知识来创造有用产品的人。传统上,这被表达为科学家“为了学习而建造”,而工程师“为了建造而学习”。这似乎是将这种区别应用于计算机科学和软件工程的恰当时机,就像过去物理学和物理人工制品的工程之间的区别出现一样。
在我们当时在RIT开发软件工程课程时,许多软件工程硕士课程已经开始提供。当时的普遍观点是,本科生应该攻读计算机科学学位,然后在注册硕士课程以完成他们的教育。鉴于大多数计算机科学毕业生在毕业后立即进入工业界,并且许多人可能永远不会完成MSSE(软件工程硕士),这种方法是有问题的。考虑以下情况:教新驾驶员的一种方法是介绍内燃机、传动系统和电气系统的理论,然后交出钥匙,让驾驶员开车兜风;在新驾驶员撞到一些灯柱并撞坏几个邮箱后,教练然后说:“现在你准备好学习如何驾驶了。” 从我们的角度来看,这类似于BSCS/MSSE教育软件开发人员的方法。
当然,必须有权衡。正如机械工程师在物理学方面的深度远不及物理学专业学生一样,软件工程师在计算机科学方面的深度也不及计算机科学专业学生。然而,我们的论点是,当涉及到当代软件开发实践时,软件工程知识将弥补缺乏深厚的科学知识的不足。下一节将探讨计算科学和软件工程之间的差异,以此来阐明这些权衡。
2001年,一群领先的软件工程专业人士发布了敏捷软件开发宣言。2 他们提出了一系列不同软件开发方法之间的权衡,例如“响应变化”与“遵循计划”。他们的结论是,尽管所有这些方法都有价值,但他们提倡一套——“敏捷”方法——优于另一套。
同样,我们并没有否定传统计算机科学方法的价值;我们只是在软件工程师的教育中更看重其他方法。从敏捷宣言中获得灵感,我们介绍了RIT软件工程课程的相关方法和权衡。虽然我们承认一些计算机科学课程和教师确实融入了我们的一种或多种方法,但我们发现没有哪个课程能像我们的课程那样做到同样的程度。RIT课程的更多细节可以在课程流程图中找到。12
也许最大的哲学差异是工程知识的广度(横向)与特定技术专长的深度(纵向)之间的权衡。RIT软件工程课程毫不掩饰地基于前者。在必修课程中,学生们多次迭代整个开发生命周期,从客户需求到产品交付,以及介于两者之间的所有活动(例如,正式和非正式建模;架构和设计;测试和质量保证;计划、估算和跟踪;过程和项目管理)。当然,个别课程侧重于工程师专业职责的特定方面,但在毕业设计项目时,学生们已经具备了将项目从构思到完成所需的背景知识。
实际上,毕业设计项目是横向方法的例证。虽然许多计算机科学课程中的软件工程仅限于一个学期的项目,但对于RIT的软件工程学生来说,为期两个学期的基于团队的毕业设计项目是所有先前学习的顶峰。与真实的客户(无论是工业界、非营利组织还是RIT内部)合作,团队负责确定项目范围、协商需求、在约束条件下(例如,与现有系统的兼容性)设计解决方案、执行风险分析以及创建和实施适当的开发计划。许多项目已在项目赞助商的站点投入实际运营,证明了这种方法的成功。
许多计算机科学课程强调个人能力而不是团队合作,但团队合作解决问题是RIT软件工程课程的标志。实际上,除了两个例外(一门关于个人软件工程的课程和一门关于形式化数学建模的课程),所有软件工程课程都将团队项目作为重要的评分组成部分。
二年级入门课程(面向软件工程、计算机科学和计算机工程专业)提倡团队合作是专业实践的基础。课程强调了具体的角色和职责,以及团队凝聚力、冲突解决和基于团队的成功等问题。这也是确保接触版本控制的课程,因为版本控制对于提供成员贡献日志以及检测和协调文档和源代码的冲突更改至关重要。
对于基于团队活动的成绩部分(约占50%),团队作为一个整体获得成绩。根据教师观察、版本控制日志和机密同行评估,还会评估每位团队成员对团队的贡献。
入门课程是计算机科学和计算机工程专业唯一要求的此类课程,但这仅仅是软件工程师众多此类课程中的第一门。学生们需要以四到六名成员组成的团队为单位工作,作为他们专业教育的组成部分。在整个课程期间,典型的软件工程学生将参与20多个不同的团队。
RIT软件工程学生对编程本身的主要接触是在入门计算机科学课程序列中。虽然入门和高级软件工程课程都会讨论编程技术,但这从来都不是重点。相反,我们将编程能力视为进入该领域的敲门砖——一种基本的会员资格要求,如果你愿意这么说的话。虽然团队将在我们的大多数课程中编写软件系统,但重点是将编程作为产品交付的必要步骤。
一个例子可能有助于说明这一点。虽然学生们应该从他们的计算机科学课程中了解数据结构,并掌握复杂性的基本概念(即“大O”表示法),但他们很少被要求从头开始构建这些结构。相反,我们强烈鼓励他们在可能的情况下合并现有组件。这些组件可能是Java或Ruby等语言的标准环境的一部分,也可能是第三方提供的(例如,RubyGems)。团队负责尽职调查,以确保所选组件在提供所需功能的同时表现出某些质量属性,并且他们必须对他们使用的任何组件给予适当的署名。
减少本身编程的教学,为强调更重要的建模和设计问题留出了空间。14 二年级入门课程,除了前面讨论的团队合作部分外,也是介绍基本设计质量(如内聚性和耦合性、信息隐藏、面向接口而不是面向实现的设计以及抽象为提供明确定义的服务的组件)的课程。其他二年级专业课程为建模和设计提供了更多经验。
建模课程探讨了基于形式化的建模方法,探索和验证设计。学生们使用Alloy6 和Promela/Spin5 等工具,学习使用离散数学表达结构和行为属性,并使用相关工具验证关于整体系统属性的断言。此外,该课程还概述了数据建模和关系数据库理论。课程结束后,学生们对严谨的设计分析在软件系统分析中的作用有了更好的认识。
子系统设计课程明确地探讨了设计,使用设计模式4 作为提高抽象级别的工具。我们的经验是,通过命名常见的结构和行为交互,并在设计练习中应用这个扩展的词汇表,学生们开始摆脱实现细节,专注于更高层次的组件关系。以后的设计课程,无论是涉及安全性、并发性还是基于Web的系统,都可以以此为基础,讨论设计概念和权衡。
并发和分布式系统设计课程说明了与大多数计算机科学课程的另一个不同之处。虽然计算机科学通常在操作系统或数据库系统的背景下介绍这些问题,但我们的课程更多的是关于并发和分布式概念及其自身的问题,而不是关于工件。通常,学生团队设计、开发和交付数据库或操作系统以外的系统,其中并发性是一个关键的设计考虑因素,因此不将其视为专家的领域。在多核计算机和云计算时代,这种方法对毕业生很有帮助。
在创建RIT的软件工程课程时,以有条理的过程封装的专业精神教学的概念在我们思考中占据突出地位。过程并非像某些人声称的那样,是软件工程的一切,但它确实为软件开发发生提供了框架。在我们的课程中,过程与软件设计一样重要。
然而,这并不意味着我们强加一种教条式的过程方法——事实上,我们确保学生熟悉许多过程方法,从严格计划的方法到更具适应性的敏捷方法。3 成为一名有效的从业者的部分内容是认识到选择和坚持适合手头项目的过程的重要性。敏捷方法对于快速发展的Web系统的优势在应用于安全关键设置(例如,飞机电传操纵控制)时会变成重大风险。
在计算机科学课程中很少讨论的过程重点之一是估算和跟踪。在第一年的个人软件工程课程中,学生们估算和跟踪他们在课堂活动和较长项目中付出的努力。为了防止“做假账”,对学生的评估不是基于他们的估算有多准确,而是基于他们对估算工作量和实际工作量为何不同的反思。正是这种反思性实践慢慢但肯定地提高了学生的估算能力,这是以后课程中团队估算的基础。
主动学习和基于团队的项目工作是RIT软件工程课程中使用教学方法的两个最突出的特点。8,13 使用主动学习教学法当然不是软件工程课程独有的,但在整个课程中应用它在某种程度上是独特的。幸运的是,我们能够在我们的设施中纳入对它的支持。我们几乎所有的课程都在工作室实验室中进行,我们已经用课堂练习和团队项目活动取代了大量的讲课时间,这些活动使学生立即巩固课程概念。工作室实验室在每个座位都配备了电脑,为讲课和个人或两人练习提供了无缝过渡。
每门课程都有贯穿整个学期的团队项目,至少占期末成绩的40%。为了支持课堂内外的团队活动,我们有11个七人团队室,每个团队室都配有白板、台式电脑和投影仪。团队室是工作室实验室的延伸。典型的课堂时间可能会有一半时间在工作室实验室中在讲课和课堂练习之间切换,其余时间在团队室中。
学生们在团队室中使用这段时间,要么以随机分组的团队参与使用本节课材料的练习,要么以他们当前的项目团队分组进行具体的项目工作。在此期间,教师直接与每个团队互动,以更好地了解团队及其个人成员的表现。团队有多次机会获得项目反馈和设计指导。
在设计这种教学方法时,许多软件工程教师成员回忆起他们工业经验的初期,当时他们的大部分软件设计指导来自高级工程师的指导。教师与团队的这段时间鼓励了这些互动。
随着时间的推移,我们意识到团队需要更多的设施支持。团队室非常适合与毕业设计项目赞助商举行会议、设计会议和审查,但它们不足以满足团队实施会议的需求。为了解决这个缺点,我们将我们的一个工作室实验室重新配置为软件工程协作实验室,其中包含五个协作区域,每个区域可容纳六名学生。壁挂式显示器显示来自四个桌下工作站之一或学生笔记本电脑的输出。工作站显示器固定在桌子下方,使协作空间保持开放。几位在工业界工作的访客对这种独特的安排表示赞赏,希望在他们自己的团队区域中重新创建它。
创建本科软件工程课程的动机是我们认为入门级软件开发人员所需的技能与计算机科学课程通常为学生提供的技能之间存在错配。我们认为,20年前描述的技能错配仍然存在。看到这一点的其中一个地方是《计算机科学课程2013:计算机科学本科课程指南》(CS2013)7,它被用作许多计算机科学课程的基础。
指导CS2013创建的原则规定,“课程必须……包括专业实践(例如,沟通技巧、团队合作、伦理)作为本科生体验的组成部分。计算机科学专业的学生必须学会将理论与实践相结合,认识到抽象的重要性,并欣赏良好工程设计的价值。” 计算机科学毕业生的预期特征之一是项目经验,其中“计算机科学课程的所有毕业生都应该至少参与过一个实质性项目。在大多数情况下,这种经验将是一个软件开发项目,但在特定情况下,其他经验也适用……。学生应该有机会在他们的项目经验中培养他们的人际沟通技巧。” 指南的这两个总体方面都指出了对软件工程概念的需求。
计算机科学课程内容指导的另一个来源是《ABET计算课程认证标准》。1 题为“计算机科学和类似名称的计算课程的项目标准”部分中指定的学生成果如下:
课程必须使学生在毕业时能够达到
(j)能够以一种证明理解设计选择中涉及的权衡的方式,应用数学基础、算法原理和计算机科学理论于基于计算机的系统的建模和设计。[CS]
(k)能够将设计和开发原则应用于构建不同复杂程度的软件系统。[CS]
这两个成果明确定义了对设计原则和开发实践的覆盖需求,这两者都属于软件工程领域。此外,我们认为(j)的建模和设计部分以及(k)的全部都是软件工程。
在CS2013指南和ABET认证要求中确立了软件工程的需求后,让我们看看当前的课程指南在该领域提供了什么。CS2013定义了围绕技术(如架构和组织、图形和可视化、网络和通信、操作系统和编程语言)的18个知识领域。只有三个——SDF(软件开发基础)、SE(软件工程)和SP(社会问题和专业实践)——属于软件工程领域。指南评论将SE和SP知识领域确定为学习和实践团队合作和沟通软技能的具体课程领域。这三个知识领域中指定的软件工程主题的最少讲课时间是SDF 10小时,SE 28小时,SP 1小时。
即使学生将有更多的时间完成作业和项目工作,并且可能会在选修课程中看到更多材料,但这些最低要求不足以培养入门级软件工程师的全部技能。当您考虑到SE知识领域(在CS2013中,SE知识领域长达14页,是非跨领域知识领域中最长的)确定了60个核心主题,具有69个学习成果,以及54个选修主题,具有56个学习成果时,尤其如此。这个知识领域的广度和深度导致了在软件工程教育会议上经常听到的哀叹。负责课程中软件工程的CS教师成员会问:“我如何在我们的计算机科学课程中的单一软件工程课程中容纳核心SE主题和‘软’团队合作和沟通技巧?” 本科计算教育的现实情况是,绝大多数学生不会通过软件工程课程,在那里有时间深入解决这个问题。相反,他们参加计算机科学或计算机工程课程,并在他们的一门,而且往往是唯一的一门软件工程课程中学习他们的软件工程技能。15
2013年5月,本文的一位作者(Vallino)参加了罗切斯特Java用户组的一次会议。该小组没有听取关于Java技术某些方面的演示,而是由Bryan Basham(他是一位活跃的开发人员,也是Sun Microsystems的前Java培训师)主持了一次关于软件教育/培训/认证的一般性讨论。他表示担心,所教授的内容与软件开发人员需要的技能之间存在错配。这与20年前促使我们开始在RIT开发软件工程课程的见解相同。
用户组会议通过让听众列出他们记得在本科课程中学到的内容而得以进展。该列表清楚地指出了在传统计算机科学学位中探索的技术领域。接下来,听众描述了他们认为在软件开发活动中胜任工作所需的技能。该列表涵盖了RIT软件工程课程的大部分要素,包括对强大的团队合作和沟通技巧的需求。这种经历强化了这样一种观点,即软件工程课程满足了专业软件开发的需求,至少在活跃的开发人员听众看来是如此,并且这些课程需要更高的知名度,因为听众中甚至没有人知道本科软件工程的存在。
RIT软件工程课程的有效性在认证自评报告中得到了定量评估。我们确实有一些计算机科学和软件工程之间比较的轶事迹象。RIT的职业服务办公室发布薪资数据11,与RIT的计算机科学、计算机工程和所有其他计算专业相比,软件工程专业的学生几乎每年都报告最高的平均时薪合作教育工资和中位全职工资。软件工程本科生的毕业安置率超过90%。
此外,对合作教育就业评估的审查也为我们学生的培训对雇主的价值提供了轶事证据。一家航空航天公司的工程经理(该公司已聘用我们许多学生进行合作教育和全职职位)评论说,学生们非常注重捕获需求和系统建模。一位工程副总裁(他聘用了学生并赞助了毕业设计项目)评论说,我们的毕业生可以与公司中一些拥有五年经验的软件工程师相媲美。
我们的一位讲师Robert Kuehl在消费和商业成像领域的软件系统开发和管理开发方面拥有30多年的职业生涯,他对我们学生获得的技能准备进行了如下评估:
总的来说,工业界想要
• 专业精神。 以专业的方式行事、进行有效的口头和书面沟通以及在多元化团队中有效工作的个人。
• 执行能力。 知道如何引出和指定良好需求、如何将需求转化为满足需求的设计、如何高效编写优秀代码、调试代码和测试代码的专业人员。他们希望专业人员能够有效地选择和执行软件开发方法和工具来管理始终按时并在预算内交付的项目。
• 技术知识和专业知识。 掌握当前技术、对计算原理、技术和算法有扎实知识并且能够创新的专业人员。
计算机科学课程无疑可以帮助学生获得计算技术知识和专业知识。软件工程课程提供类似的技术基础,但整合了其他课程来教授专业精神并获得随之而来的执行能力。课程通过课程项目深入涵盖软件开发生命周期的各个方面,这些项目强调通过实践、团队合作和沟通以及项目的技术方面进行学习。
根据我的经验,因此,软件工程毕业生通常更适合需要开发和部署高质量软件的行业工作。
信息技术教授Jeffrey Lasky曾担任Excellus(当地Blue Cross/Blue Shield健康保险提供商)的RIT驻校教授。与Lasky的对话首先让我们注意到软件工程课程产生的一些区别。
“RIT/Excellus Blue Cross/Blue Shield合作教育计划于2002年秋季开始。该计划由Excellus架构和集成组主管以及RIT驻校教授共同管理。该合作教育计划向所有RIT计算学科的本科生开放。
“2004年,一个由六名学生组成的团队(计算机科学、信息技术和软件工程各两名)被分配到一个高优先级系统开发项目的子系统上工作。团队的组成是计划外的,但却是偶然的。学生们很快意识到,他们各自的技能优势集中在他们学位课程的核心领域:编程(CS)、数据库和Web(IT)以及设计(SE)。
“虽然所有主题都被证明很有趣,但软件工程专业的学生对软件设计模式的使用和解释最受其他学生的关注,他们很快注意到软件工程专业的学生对软件系统开发的思考方式不同。特定的模式成为并经常指导团队对话的一部分;计算机科学和信息技术专业的学生对形式化抽象在软件设计中的作用和价值充满热情。Excellus的软件架构师主管对设计模式也有类似的反应,《设计模式:可复用面向对象软件的元素》这本经典书籍开始出现在他们的办公桌上,此后,出现在许多Excellus软件开发人员的办公桌上。”
Lasky教授对我们学院各个学位学生优势的描述得到了其他机构同事的呼应。软件工程专业的学生会询问组件、架构以及组件之间的交互,更喜欢更高级别和更抽象的以模型驱动的讨论。计算机科学和信息技术专业的学生倾向于要求提供工作代码示例,并从自下而上的角度开始理解系统。计算机科学专业的学生非常擅长编码,但通常缺乏设计技能和对质量属性的关注。凭借RIT软件工程课程中设计和过程之间的课程平衡,学生们拥有更广泛的编码技能,有些学生根本对进行大量编码不感兴趣。在学生调查中,三分之二的人更喜欢设计和实现方面,其余的人对过程方面(例如,需求、过程改进和软件质量保证)更感兴趣。
20年前,当RIT开始创建美国第一个本科软件工程课程时,我们打赌,如果我们建造它,他们就会来——指的是学生和雇主。该课程在增长和毕业生超过90%的就业率方面的记录表明,这场赌博取得了回报。对工程设计、软件产品开发、团队合作和沟通的关注为寻求软件开发职业生涯的学生提供了一套技能,这些技能不仅更适合他们在入门级软件工程师的职位上表现出色,而且也为他们在整个职业生涯中的成长做好准备。
1. ABET计算认证委员会。 2013年。计算课程认证标准; http://www.abet.org/uploadedFiles/Accreditation/Accreditation_Process/ Accreditation_Documents/Current/C001%2014-15%20CAC%20Criteria%2010-26-13.pdf。
2. Beck, K. 等人。 2001年。敏捷软件开发宣言。 http://www.agilemanifesto.org/。
3. Boehm, B.W., Turner, R. 2004年。《平衡敏捷性和纪律性:困惑者指南》。波士顿,马萨诸塞州:Addison-Wesley。
4. Gamma, E. 等人。 1995年。《设计模式:可复用面向对象软件的元素》。雷丁,马萨诸塞州:Addison-Wesley。
5. Holzmann, G.J. 2011年。《SPIN模型检查器:入门和参考手册》。上萨德尔河,新泽西州:Addison-Wesley Educational Publishers。
6. Jackson, D. 2012年。《软件抽象:逻辑、语言和分析》。剑桥,马萨诸塞州:MIT出版社。
7. 计算课程联合工作组。 2013年。《计算机科学课程2013:计算机科学本科课程指南》。
8. Ludi, S., Natarajan, S., Reichlmayr, T. 2005年。促进主动学习的入门软件工程课程。载于《计算机科学教育SIGCSE技术研讨会论文集》:302。
9. Lutz, M.J., Naveda, J.F. 1997年。人迹罕至的道路:软件工程学士学位。载于《软件工程教育与培训会议论文集》。
10. Naveda, F., Lutz, M. 1997年。设计软件工程学士课程。载于第28届《计算机科学教育SIGCSE技术研讨会论文集》。
11. 罗切斯特理工学院,合作教育和职业服务办公室。 2013年。薪资 | 课程概述; http://www.rit.edu/emcs/oce/students/salary。
12. 罗切斯特理工学院,软件工程系。 2013年。本科课程; http://www.se.rit.edu/pagefiles/documents/VSEN%20Flowchart%20v6.6%202013-09-08.pdf。
13. Vallino, J. 2003年。设计模式——从被动学习演变为主动学习。载于《教育前沿会议论文集》。
14. Vallino, J. 2006年。如果你不建模,你只是在编程:在整个本科软件工程课程中建模。载于《软件工程模型国际会议论文集》:291-300。
15. Vallino, J. 2013年。学生在他们的第一门(也是唯一一门)软件工程课程中应该学到什么?载于《软件工程教育与培训会议论文集》:335-337。
喜欢还是讨厌?请告诉我们
Michael Lutz ([email protected]) 自 1976 年起在罗切斯特理工学院 (RIT) 任教。在 20 世纪 90 年代,他发起并领导了在美国开发首个软件工程学士学位课程的工作。他的专业兴趣包括软件工程教育、软件设计和软件数学建模。
J. Fernando Naveda ([email protected]) 是罗切斯特理工学院软件工程系的联合创始人,并于 2001 年至 2010 年担任系主任。他的兴趣在于课程开发和广泛的软件工程学术课题。他已在罗切斯特理工学院工作 21 年,目前在教务处任职。
James Vallino ([email protected]) 自 1997 年在罗切斯特理工学院开始工作以来,一直与罗切斯特理工学院软件工程系有关联。自 2010 年起,他一直担任系主任。在加入罗切斯特理工学院之前,他在 AT&T 贝尔实验室、AVL 和西门子公司研究院拥有 16 年的工业经验。他的兴趣在于本科软件工程课程的开发,重点是软件设计和建模。
© 2014 1542-7730/14/0600 $10.00
最初发表于 Queue vol. 12, no. 6—
在 数字图书馆 中评论这篇文章
Ellen Chisa - 产品经理的演变
软件从业人员都知道,产品管理是软件开发的关键组成部分。产品经理与用户沟通,帮助确定要构建什么,定义需求,并编写功能规范。他们在整个软件构建过程中与工程师紧密合作。他们充当想法的共鸣板,在出现技术挑战时帮助平衡进度,并在需要技术修订时向执行团队施压。产品经理从第一行代码编写之前一直参与到代码发布之后。
Jon P. Daries, Justin Reich, Jim Waldo, Elise M. Young, Jonathan Whittinghill, Daniel Thomas Seaton, Andrew Dean Ho, Isaac Chuang - 社会科学中的隐私、匿名和大数据
开放数据对于科学具有巨大的潜力,但是,在人体受试者研究中,隐私与发布高质量开放数据之间存在 tension。管理学生隐私和学生记录发布的联邦法律表明,匿名化学生数据可以保护学生隐私。在这一标准的指导下,我们对来自麻省理工学院和哈佛大学在 edX 平台上的 16 个 MOOC(大型开放式在线课程)的数据集进行了去标识化并发布。在本文中,我们表明,这些和其他去标识化程序需要对数据集进行更改,这威胁到基线分析的复制和扩展。为了平衡学生隐私和开放数据的好处,我们建议将重点放在保护隐私而不匿名化数据上,而是扩展政策,以迫使研究人员维护开放数据集中受试者的隐私。