软件工程课程设计(【计算机教育】软件工程课程设计和交付指南学习笔记)

软件工程课程设计
前面文章【计算机教育】从图灵大会教育论坛到软件工程实践教学研讨会  和老师们探讨软件工程实践教学研讨会,今天和大家交流下学习SE2014: Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering 的体会。SE2014 是软件工程学士学位课程指南,由IEEE Computer Society 和Association for Computing Machinery 协作出品,可在此处访问https://www.acm.org/binaries/content/assets/education/se2014.pdf 

5.1开发和教学课程

课程指引1:课程设计者和导师必须具备足够的相关知识和经验,并理解软件工程的特点。
课程设计者和教师应该在软件工程领域从事广泛的学术研究。
?拥有跟上学科发展的动力和手段。

【小编体会】重要的是,拥有跟上学科发展的动力和手段,小编会加油做些教育教学的研究,将好的经验和教训写成论文,和教育们分享交流。

5.2构建课程

课程指引2:课程设计者和教师必须根据成果进行思考。
整个课程和个人课程都应该包括对结果或学习目标的关注。 此外,随着课程的教授,应定期记住这些结果。 根据成果进行思考有助于确保课程中包含的材料具有相关性,并以适当的方式和适当的难度水平教授。
成果包括:
专业知识
技术知识
团队精神
最终用户意识
上下文中的设计解决方案
进行权衡
持续专业发展
【小编体会】:小编特别能在团队精神、最终用户意识、上下文中的设计解决方案、进行权衡、持续专业发展相关的教学上提供支持。

课程指引3:课程设计者必须在材料覆盖面和灵活性之间取得适当的平衡,以实现创新。
【小编体会】:平衡知识的广度和深度,是工程师和技术人一直要努力的任务。

课程指引4:许多软件工程概念、原则和问题应作为整个课程重复出现的主题来教授,以帮助学生培养软件工程思维。
在许多SEEK单元中定义的材料应该以在课程中的许多课程中分布的方式来教授。一般而言,早期课程应介绍材料,随后的课程将加强并扩大材料。在大多数情况下,还应该有课程或部分课程,深入处理材料。
材料类型包括如下:
?测量,量化和形式或数学方法。
?建模,表示和抽象。
?人为因素和可用性:学生需要反复观察软件工程不只是关于技术。
?事实上,许多软件工程原理实际上是核心工程原理:如果学生在其他地方的行为中看到相同原理的例子,学生可以更好地学习软件工程原则 – 例如,所有工程师都使用模型,测量,解决问题,并使用“黑匣子”。
?规模的重要性:学生只能练习相对较小的问题,但他们需要了解许多技术的力量在大型系统中最为明显。他们需要能够实践一些小任务,就好像他们正在开发非常大的系统一样,并且练习阅读,理解,并对大型系统进行小的改动。
?重用的重要性。
?流程和质量知识领域中的大部分材料。
?反思与评估:学生应通过概念分析,概念实施和实证研究等多种形式来评估自己的想法。
【小编体会】:小编可以通过讲故事的方式和同学们讲工程方法。

课程指引5:学习某些软件工程主题需要学生心智的成熟,所以这些主题应该在课程结束时教授,而其他材料应该早期教授,有利于成熟。
使学生充分理解其基本原理和动机。在设计材料的教学顺序和向学生介绍真实世界的经验时,应该考虑到这一点。例如,SEEK的过程和质量知识领域中的很多主题的介绍性材料应该在早期教授,但大部分材料应该留到课程的后半部分。
【小编体会】:为了让学生理解一些很难的知识和方法,需要在前期做准备课程。

课程指引6:学生应了解软件应用领域。
几乎所有的软件工程活动都将涉及为超越软件工程本身的领域的客户解决问题。因此,在课程的某个地方,学生应该能够以合理的深度研究一个或多个应用领域。学习这些材料将为学生提供可应用于软件工程问题的直接领域知识,并将教会他们领域的语言和思维过程,从而能够在以后进行更深入的研究。
【小编体会】:小编可以启发同学,如何在不同的行业里用计算机软件为其服务。

5.3应该贯穿课程和教授课程的属性和态度

课程指引7:软件工程必须以承认计算和工程两种学科的方式进行教学。
教育工作者应该了解与其他工程部门和其他计算机部门,尤其是计算机科学部门共享的软件工程方面。
【小编体会】 :作为业界一员,小编能够从工程的角度,为老师们提供支持。

课程指引8:学生应接受超越主题的某些个人技能的培训。
几乎所有学生在工作中遇到的活动都需要以下技能。这些技能必须主要通过实践获得:
?行使重要的判断力:评估相互竞争的解决方案是成为工程师的关键部分。因此,课程设计和交付应该帮助学生建立他们作出合理判断所需的知识、分析技能和方法。特别重要的是有批判性思考的意愿。还应教导学生判断各种信息来源的可靠性。
?评估并挑战所接受的智慧:应训练学生不要立即接受他们教授或阅读的所有内容。他们还应该了解当前软件工程知识的局限性以及软件工程知识如何发展。
?认识到自己的局限性:应该教导学生们专业人员咨询其他专业人员,团队合作有很大的优势。
?有效沟通:学生应该学会在各种情况下进行良好沟通:书面形式,演示时,展示(自己或他人)软件时,并在与他人进行讨论时。学生还应该建立倾听、合作和谈判技巧。
?以道德和专业的方式行事:学生应该学习思考他们的工作对道德、隐私和安全的影响。这和课程指引15也有关系。
【小编体会】:小编面试时,经常问,这种技术的优点、缺点和适用场景在哪里?

课程指引9:学生应该了解持续学习和自主学习技能的重要性。
因为学到的知识将会改变学生的职业生涯,而在大学里只有一小部分可以学到的东西会被教授和学习,所以学生养成不断扩大知识的习惯是至关重要的。
【小编体会】:小编经常劝某些三十岁恐惧症的开发者,加油学习啊,三十岁还太年轻,别老想着做管理。

课程指引10:解决软件工程问题应该被视为具有多个维度。
大多数软件项目的一个重要目标是明确和隐含地满足客户需求。 设计项目和课程时认识到这一点很重要。 这种认可将学习者的学习重点放在他们学习内容的基本原理上,加深对所学知识的理解,并有助于确保所教材料的相关性。
【小编体会】:小编可以帮助同学理解什么是客户的隐含需求。

课程指引11:应强调软件工程的基本和持久原则,而不是最新或特定工具的细节。
SEEK列出了许多可以使用各种计算机硬件、软件应用程序、技术和流程(统称为工具)教授的主题。 在一个好的课程中,必须强调SEEK主题中的持久知识,而不是工具的细节。 这些话题应该保持多年, 尽可能地,从他们的学习中获得的知识和经验应该在10年或20年后仍然适用。 另一方面,特定的工具将迅速改变。 例如,过度关注如何使用特定供应商的软件,方法的详细步骤或特定编程语言的语法是一个错误。
【小编体会】小编不建议技术人写操作步骤相关的博客

课程指引12:必须教授课程,以便学生使用合适的最新工具获得经验,尽管工具细节不是学习的重点。
高效率和有效地执行软件工程需要选择和使用最合适的计算机硬件、软件工具、技术和流程(这里统称为工具)。 学生必须培养选择和使用工具的技能,这样他们就有了使用工具的习惯,并了解到使用工具选择和开发工具是专业工作的一部分。
【小编体会】小编可以讲授选择工具的方法。

课程指南13:在可能的情况下,软件工程项目中教授的材料应该基于(a)合理的实证研究和数学或科学理论或(b)被广泛接受的良好实践。
必须有证据表明,所教的是真实有用的。 这种证据可以采用经过验证的科学或数学理论(如计算机科学的许多领域)的形式,系统地收集经验证据,或广泛使用和普遍接受的良好实践。
【小编体会】:小编擅长从工程角度讲为什么良好实践是良好实践。

课程指引14:课程应具有重要的现实世界基础。
有效学习软件工程技能和概念,将真实世界的元素结合到课程中。一个计划应至少包括以下一些内容:
?案例研究:接触真实系统和项目案例研究非常重要,学生将教会对这些例子进行评论并重用最佳部分。
?基于项目的活动:应该建立一些学习活动来模仿业界的典型项目。这些应包括小组工作、演示文稿、正式评审和质量保证等等。建议包含现实世界的利益相关者或跨学科团队。学生应该理解并能够体验当代软件工程团队中常见的各种角色。
?顶石项目:学生应该完成一个重要的项目,最好跨越整个上学年的整个项目,以便练习他们学到的知识和技能。以其他基于项目的学习活动中培养的技能为基础,学生应该承担管理这个顶石项目的主要责任。团队项目是最常见的最佳实践,因为学生可以开发在许多专业环境中具有价值的团队技能。
?实践练习:应该给学生实践练习,以便他们能够培养当前实践和流程中的技能。
?学生工作经验:在可能的情况下,学生应该具有某种形式的工业工作经验作为其计划的一部分。这个术语不同国家有不同说法,包括实习和合作教育等方式。目的是提供具有真正利益相关者的团队开发的软件产品的重要经验,这些团队包括活跃用户、庞大代码库、持续开发、打包和分发周期以及产品文档。如果难以提供工作经验的机会,课程必须尽可能模拟这些经验。学生参与开源项目是提供这些体验的另一种可能途径。
【小编体会】:小编可以帮助老师们策划一些好项目,让项目练习真实地帮到同学和老师。

课程指引15:伦理,法律和经济问题以及成为专业人士意味着什么的概念应经常提出。
确定专业存在的关键原因之一是确保其成员遵循道德和专业原则。如果学生在整个课程中讨论这些问题,他们将会变得根深蒂固。这方面的一个方面是让学生接触标准和指导方针。
【小编体会】:做为业界一员,小编很愿意通过讲业界故事的方式,与同学们分享这些准则的话题。

课程指引16:软件过程应该是课程组织的核心,也是学生对软件工程实践的理解。
软件过程既是每个软件工程学位课程中的焦点和交叉主题,也是与本文档相关的讨论和反馈中遇到的最受欢迎且有争议的话题之一。
包括
软件工程最佳实践的演变
软件工程的范围
激励软件流程
上下文中的软件过程
软件过程的深度和应用
流程改进
【小编体会】:做为业界一员,启发同学们理解流程,小编还是有不少办法的。

5.4软件工程教育学的一般策略
课程指引17:为确保学生掌握某些重要思想,必须注意通过使用有趣、具体和令人信服的例子来激励学生。
一些被认为是软件工程学科核心的概念和技术,学起来似乎很痛苦。 在某些情况下,这是因为教育界并没有赞赏和教导这些概念的价值。 在另一些情况下,教育工作者对学生表示怀疑。
以下是特别需要激励的领域的例子:
?数学基础:逻辑和离散数学应该应用于软件工程或计算机科学问题。 如果出现派生和证明,最好在解释为什么结果很重要的情况下教授这些派生和证明。 同样应该以应用而不是抽象的方式教授统计和经验方法。
?过程和质量:学生必须意识到过程不良和质量差的后果。 他们还必须接触到良好的流程和质量,以便他们可以亲身体验改进的效果,对工作感到自豪,并学会欣赏良好的工作。
?人为因素和可用性:学生通常不会意识到需要关注这些领域,除非他们实际上遇到了可用性困难或者看用户难以使用软件。
【小编体会】:在人为因素和可用性这一点,小编也能为老师们提供上课素材。

课程指引18:软件工程教育需要超越讲座形式,并考虑各种教学方法。
教授软件工程材料最常用的方法是使用讲座,辅以实验室课程和教程等。 然而,还有其他的替代方法可以帮助学生更有效地学习。 设计软件工程学习活动的核心是认识到学生需要参与有时间限制的迭代开发体验。 除了反映常见的行业实践之外,迭代对于激励学生学习非常重要。 迭代先前的工作可以帮助学生在之前的迭代中看到他们努力的不足之处,并为反思和改进提供机会,否则这些机会将无法实现。
在某些情况下,以下一般的教学方法可能被认为是补充甚至在很大程度上取代演讲格式:
?基于问题的学习:这已被发现在其他专业学科中特别有用,现在用于在某些机构教授工程学。
?及时学习:在教授该材料的应用之前教授基础材料。例如,教师可能会在软件工程环境中应用前一天教授数学方面的内容。有证据表明,这有助于学生保留基本材料,尽管这种方法可能难以实施,因为教师必须跨课程协调内容。
?通过失败学习:布置学生完成一个会遇到很多问题的任务。然后教授他们方法,使他们能够在未来更容易地完成任务。
?技术增强型学习:由技术支持的个人和团队学习活动的选项不断扩大和发展。这些包括模拟、开放教育资源、智能辅导、测验和实践系统以及支持分布式协调和协作的产品。

【小编体会】小编讲课喜欢用基于问题的学习方式,事实证明有效果。

课程指引19:通过设计课程可以实现重要的效率和协同效应,以便同时学习多种类型的知识。
正如一些评论者指出的那样,SEEK确定了很多主题,其中很多主题被分配了相当少的小时数。 然而,仔细关注课程设计,可以同时教授很多主题。 通常情况下,列出的两个主题分别需要x和y小时,可以在小于(x + y)小时内共同教授。
这种协同教学可能适用于以下情况:
?建模、语言和符号:熟悉UML等建模符号可以通过使用它来说明和解释其他概念。正式的方法和编程也是如此。显然,需要花一些时间来教授语言或建模技术本身的基础知识,但是随着学生学习一系列其他主题,可以学习广泛和深入的知识。
?过程、质量和工具:当明确的目标是学习其他概念时,在学生练习过程中,可以指导学生遵循某些过程,使用工具,并包括质量保证活动。事先,给学生做相关流程、工具或QA技术的介绍,以便学生理解执行这些活动的原因。通过跟踪练习或项目并讨论应用特定技术或工具的有用性,可以加强学习。该过程的学习深度可能相当可观,而从正在教授的其他材料中占有相对较少的时间。
?数学:学生可能会加深和扩展对统计学的理解,同时分析可靠性或绩效研究所产生的一些数据。加深对逻辑和离散数学其他分支的理解的机会也比比皆是。
【小编体会】:在教授过程、质量和工具这部分内容时,小编作为业界一员,能为老师们提供一些支持。

课程指引20:课程和课程必须定期审查和更新。
软件工程正在迅速发展; 因此,随着时间的推移,大多数(如果不是全部的话)课程或课程将变得过时。 因此,机构和教师必须定期审查他们的课程和计划,并做出必要的改变。 尽管本指南适用于单独的软件工程课程或课程,但第3.2节中阐明的原则明确指出,本书中描述的课程指南也必须是不断发展和更新的主题。
【小编体会】:变化是永远不变的真理。

欢迎留言,一起探讨软件工程教育。

欢迎关注我的微信公众号

推荐阅读

【阅读导引】信息技术文化小文汇

【阅读导引】软件技术开发小文汇

【阅读导引】IT创业相关小文集锦

【阅读导引】数据分析小文集锦

【实战技能】产品设计小文集锦

公众号回复以下关键词,查看相关话题文章
软件技术开发:
AR VR  技术开发  Refactoring 设计模式 Java  PHP 网站 前端 Web应用 自然语言处理 物联网 MQTT  Restful Web Services 代码阅读 卓越的代码 网站 编程之美 MVP AngularJS HTML5 Python

人工智能:
人工智能 自然语言处理 深度学习 纳思系统 

IT创业:
创业 硅谷 知识型企业 产品技术管理 招贤纳士 技术管理

数据分析:
数据  数据分析 数据可视化  数据科学家 数据质量 数据匿名化

产品设计:
产品管理 互联网产品 产品技术管理 产品意识 产品与数据 原型设计 原型测试

软件工程课程设计相关文章

赞 (0)
版权声明