图为罗切斯特理工学院。
图片来源:USNEWS
自年开始,我在罗彻斯特理工学院(RochesterInstituteofTechnology)带领一个教师团队。我们的任务是创建一个软件工程本科学位。年,这个团队的努力造就了全美第一个软件工程学士学位。这个获得美国工程技术评审委员会认证的专业从一开始的15个学生扩展到了如今包括近名学生。我们的毕业生受雇于软件开发领域的各个环节,从零售软件公司如微软和苹果,到嵌入式系统机构如联合技术航空航天(UTCAerospace)。我们也有许多毕业生在计算、工程和商业的研究生课程中继续深造。
为何需要一个独立的软件工程专业?因为我们的经历和从业界合作伙伴那里得到的反馈都显示,计算机科学毕业生的知识、技能和职场对他们的期望之间存在着差异。虽然他们具有的理论基础和实际的编程能力都是有用的,但他们在下列领域却存在不足:规划、评估、团队合作、沟通、超越课堂或功能层级的设计、测试、版本控制、产品发布。
我们的方法是创造出一整套课程来弥补这些不足,让毕业生们更好地为他们的职业生涯做好准备。
课程目标
在几乎所有的软件工程课程中,团队合作都是个关键元素。罗彻斯特理工学院的学生要做很多课堂报告,他们必须面对来自教授和同学的提问,为自己的工程决策辩护。项目化课程要求做出团队和个人规划、评估和追踪;教师在评分时,更看重学生对预估和现实间的偏差的反思而不是准确度。设计课程对于团队产品的评估更看重是否达到低耦合、高内聚、信息隐蔽等要求,而非编码本身。
当然,软件工程不是在真空中实施的——它总和一个问题领域相关。为了强化这一点,我们所有学生都必须完成三门应用领域课程,作为技术性软件工程课的补充。他们可以挑选的领域包括生物信息、商业应用、互动娱乐、公共政策。我们明白用三门课来介绍一个领域是很不够的,但我们坚信,为学生们建构起至少一种应用联系对于他们理解软件工程师的角色至关重要。
我们这个专业的一个特点让这个任务变得简单了:必修的“合作教育”。从第二学年末开始,每个学生必须完成一年的有偿业界实践,穿插年级学术课程。
对学生来说,这种合作教育为他们提供了一种途径,探索在各种不同的情境中运用软件工程原理,同时也帮助他们解决了部分学费来源。但对教师而言,这意味着上高年级课程的学生们不再需要“盲信”在课堂所学的知识,因为他们现在可以把有意义的工作经历带到课堂上了。如果学生们明白自己为何要来上课,并且可以把课题和工作经历联系起来,教师们的满足感大多了。
作业
总体而言,我们相信我们的课程设计明智合理。当然,我们牺牲了在与计算机科学家相关的诸多领域里的某些深度内容——没有操作系统、数据库理论、算法复杂性、人工智能、图表或程序语言的必修课(学生们可任意选修这些课)。但我们在并行和分布式系统设计、信息系统设计、正式(数学)建模等课程中涵盖了上述课程的核心工程概念。也就是说,我们把重点从工件(比如操作系统)转移到了这些工件所揭露的核心工程问题(比如并发控制)。我们也从而扩大了处理其他工程问题的空间。我们在第二学年提供两门基础工程课。
第一门课是软件工程概论。上课的学生来自计算机科学、计算机工程和软件工程专业。这门课以基于团队、分阶段发布的项目为焦点,推介团队组织、策划、风险管理、设计质量、单位和功能测试、记录归档方面的基本问题。此外,每个团队在学期中要分别就两次定时发布做课堂报告。鉴于时间有限、覆盖的话题之多以及学生的缺乏背景知识,这些项目的处理必然是很粗略的。就像一名学生所说,它是“课程中的瑞士军刀”。
第二门课是二年级课程,北京最好白癜风医院北京治白癜风医院哪家最好