在这篇观点文章中,您将找到一套关于将企业技术纳入软件工程课程的建议。本文探讨了学生面临的困难,并提出了过去成功使用的简化方法。企业技术的不断进步使得将其纳入教育过程变得更加简单。
在未来几年,可以预见,行业对了解企业开发流程和生产系统中使用的技术的专家的需求将会增加。学术机构的任务是为行业培养专家和领导者,因此他们应该了解正在使用的技术。
自从我第一次教授软件工程课程以来,已经十年了。从那时起,我每年都教授这门课程。许多软件工程课程都强调从抽象的角度进行分析和设计,包括 UML 模型和符号,并让学生独立开发软件项目。
然而,在我的课程中,我选择了一条扎根于理论和实践的更艰难的道路。这条道路包括关于企业 Java 技术的讲座和实验。当我们明确指出哪里需要实际的软件工程技能时,我们可以指向大型和复杂的系统。如果不参与此类系统的开发,您怎么能成为一名软件工程师呢?
对于大型系统,标准开发技术已不再足够,因为它们的构造过于低级,无法解决企业开发中的典型问题和情况。此外,当我们可以使用为特定目的构建的组件时,为什么还要从对象构建大型系统呢?使用对象,我们试图重新发明现有企业实践的轮子。
虽然有很多优点被强调,但坦率地说,在您的课程中包含企业技术可能会将一门相当简单的软件工程课程变成一门相当困难的课程,尤其是对于最初的几次迭代。
陌生的领域
只要我们理解企业技术和标准,并且自己开发了一个更大的系统,我们就准备好将企业技术纳入讲座。如果我们以前没有开发过大型系统,我们仍然可以尝试包含该技术,但我们必须准备好事先运行多个示例和演示,尤其是将所有内容整合在一起。
然而,我们从哪里开始呢?我记得早期版本的企业 Java 发布时,酒店预订的初始演示似乎是学习该技术的理想选择,至少从初步检查来看是这样。当学生遇到困难时,困难很快就变得清晰起来。可用的教程和文档不是为新手学生和初学者编写的;它们是为已经使用过类似技术的用户编写的。
不仅仅是 Java
新手遇到的第一个问题与运行企业 Java 本身有关。企业 Java 不再只需要 Java 虚拟机来运行。现在,它需要一个容器和一个符合该技术的 Web 服务器才能使用其许多组件。
软件工程专业的学生必须突然承担起系统管理员的角色,在其机器上安装一个复杂的环境,这需要进一步的配置。对于许多从未打开过终端的学生来说,仅仅准备所需的环境就成了一项繁琐的任务。
操作系统并不总是对新手友好,因为并非所有终端都像其他终端一样友好。在理想情况下,学生需要将其操作系统重新安装到 Linux,但这会将软件工程课程提升到一个完全不同的水平。那些设法安装和配置服务器的人突然被告知服务器在某个端口上运行。也许学生提出的最令人震惊的问题是,什么是端口?
在这种情况下,部署我们的第一个示例的意图又绕道去解释网络,因为我们必须通过网络连接到企业系统。当我们最终克服操作系统和网络问题时,学生的动力几乎消失殆尽,突然我们又面临另一个挑战:在哪里存储数据?
企业系统都与大数据有关,如果没有数据库,人们简直无法想象它们。然而,这假设学生不仅了解数据库,而且还知道如何配置数据库以接受新连接。我们最初为学生进行快速演示的意图几乎失败了,因为我们的软件工程努力绕了多条弯路才进入我们的第一个演示。
当我们最终得到一个正在运行的演示时,学生们想要更新演示并重新运行它。他们很快意识到更改不会传播到正在运行的演示,他们需要盲目地开发代码,然后重新部署它。在某些学校工作站上,此过程最多需要一分钟。
此时,学生们已经失去了大部分动力和最初的干劲。而所有这些努力都只是为了运行初始演示,而不是学习技术本身。
在大多数情况下,人们必须进一步向学生建议版本控制和 Maven,但我们仍然没有达到学习开发此类系统所需的各种组件的地步。因此,最初让学生接触企业技术的好主意变成了教他们所有需要的辅助材料。
对于软件工程课程来说,演示基于组件的开发工作量太大了。意图的实际成果出现在学生花费数小时进行配置和设置之后,这在学期中留下的空间不多。
解决问题的方法
借助最近的技术示例项目,例如 kitchen-sink,我们可以在单个演示中找到应用的每一项重要技术,这非常棒。从那里,直接涵盖对象关系映射和持久性、处理业务逻辑的会话 Bean 以及上下文和依赖注入等主题,这些主题与软件工程课程中通常讲授的组件和 UML 组件图非常吻合。
虽然 Java 仍然提倡服务器端用户界面开发,但在许多情况下,学生拒绝这种选择,而更喜欢使用 React 或 Angular 框架,这促使需要涵盖 XML 绑定和 JSON 转换。
多年来,为了在我的课程中推广企业技术,我尝试了许多辅助工具,以减少学习和涵盖入门材料以及部署第一个演示所需的初始工作量。以下是我发现的。
回归基础
首先,我必须强调,不可能向不成熟的学生讲授企业技术。更重要的是向这些学生讲授多态性、面向对象编程、集合、lambda 和 设计模式,以便他们理解主要设计。
为什么?因为否则,我们的学生就无法成为我们希望他们成为的人。在企业 Java 中,优秀的解决方案是基于组件的,但在后台,它们充满了多态性、模式和集合,并且缺乏对这些的充分理解将在以后的实际系统设计中产生重大问题。因此,当学生缺乏基础知识时,最好排除企业 Java,而是专注于核心技能,并在课程允许的情况下,可能会将该主题推迟到以后的课程中。
入门课程
在我以前的大学里,一个新的本科课程完善了课程设置,配备了完善的先行课程。选修软件工程专业的学生在开始该课程之前,已经涵盖了所有先修课程,例如网络、操作系统、数据库和面向对象编程。然而,上述课程是为了培养本科生以满足行业需求,因此理论课程并未得到强调。
多媒体
通过详细介绍如何运行、调试和重新部署初始演示的每个阶段的分步视频教程,可以显着减少初始演示设置的时间。这看起来很棒,但学生经常希望在其个人机器上安装演示,并且很难制作出适用于在多种操作系统上可能发现的所有条件的完美教程。学生们发现视频非常有帮助,因为他们可以在自己选择的时间进行学习过程。跳过初始演示遇到的所有错误有助于学生保持动力和干劲。
虚拟机
另一个显着改进是为学生准备操作系统的虚拟映像,其中包含设置演示和环境。在最简单的情况下,学生只需要启动其集成开发环境 (IDE) 并单击一个按钮即可看到演示运行。稍后,他们可以在自己的环境中安装演示,但前提是他们已经有一个正在运行的示例并且具有实践经验。
正确的技术
上个学期,在学习一个稍微不同的主题的课程中,我遇到了一个显着的改进,也许是永远改变企业开发的东西。企业微服务架构最近作为对基于云的需求的回应而出现。
Eclipse MicroProfile 可能是讲授企业开发的正确要素。它允许开发人员仅包含特定应用程序所需的技术。其理念是从一个 JAR 文件运行企业应用程序,该文件仅包含所需的库。这种做法允许从容器外部运行应用程序。人们可以将其视为一个可配置的微容器,其中包含 JAR 的最少设置并作为服务器运行。这正是我们简化课程所需的东西。
我们不再需要解释企业容器提供的所有技术,而是可以将注意力集中在更小的集合上。这可以使我们快速达到我们在学术界想要达到的目标。我们可以专注于教学生组件,并跳过容器知识和复杂的重新部署的必要性。
虽然每个人都喜欢标准,但 Spring 框架(企业 Java 的强大竞争对手)似乎比在容器外部运行应用程序的想法早了近十年。因此,为了在学术环境中达到目的,这可能是正确的方法(另一方面,这种选择牺牲了主要行业参与者商定的标准化技术)。
后续步骤
对于我们的下一门课程,我们应该做什么?首先,了解您的听众是谁,以及他们是否足够成熟来学习企业技术。一个简单的评估测试可以说明更多问题。对于大型班级听众,您应该考虑包含视频教程。否则,实验室可能会变成资源不足的调试课程。通过将视频教程用作家庭作业,您可以更有效地利用讲座和实验室的时间,并涵盖其他重要主题。
如果您预计操作系统会出现问题,请考虑制作虚拟机映像,或为数据库等特定部分准备 Docker 映像。最重要的是,不断创新,因为技术来来去去,例如 JRebel(用于热部署更改)学术许可证已不再可用。
幸运的是,企业技术的最新进展带来了简化,下一代人将更容易学习技术。最终,我们将能够专注于旨在引导学生朝着我们预期方向发展的主题。然而,过早开始学习企业技术将适得其反,并且任何进步都无法改变这一点。
评论已关闭。