It is our view that Computer Science (CS) education is neglecting basic skills, in particular in the areas of programming and formal methods. We consider that the general adoption of Java as a first programming language is in part responsible for this decline. We examine briefly the set of programming skills that should be part of every software professional’s repertoire. 计算机科学教育对于未来的软件工程师的培养存在忽视基础技能的问题,尤其是编程和形式化方法这两个重要领域。文章提出了Java作为首个编程语言的普及是导致这一下滑的部分原因,并简要探讨了软件专业人员应该掌握的一系列编程技能。 计算机科学教育中的趋势显示,计算机科学课程中的数学要求正在减少,学生的多语言编程技能的培养正在转向使用大型库和专用包的“烹饪书式”的方法,这种结果导致的技能集对于当今软件产业,特别是安全和保密领域是不足的,而且不幸地符合了外包产业所能提供的。这些趋势在最近的美国计算机协会(ACM)的课程推荐中表现得尤为明显。例如,2005年的课程建议中完全没有提到数学前提条件,只是提到了一门编程语言理论课程。 作为纽约大学多年的教师,作者对于引入Java作为大多数计算机科学专业学生的第一教学语言感到遗憾。他们观察到这一选择如何削弱了学生的基础,反映在他们系统和架构课程中的表现。作为专门开发用于关键任务系统的Ada编程工具公司的创始人,他们发现越来越难以招募具有正确基础技能的合格申请者。他们提倡一种更加严格的形成过程,其中形式化方法应该早期引入,编程语言在计算机科学教育中扮演核心角色。 形式化技术用于证明程序的正确性在20年前是非常活跃的研究主题。然而,随着技术的发展,编程语言和开发环境的进步,以及教育理念的变革,计算机科学的教育重心似乎已经从深入理解编程的原理转向了应用现成的工具和库。这种转变可能导致学生缺乏对于编程原理和底层算法的深入理解,这对于软件开发的创新和解决复杂问题是非常重要的。 在文章的讨论中,作者强调了对于软件专业人员来说,一套完整的编程技能集是必不可少的。这些技能不仅仅包括掌握一种或多种编程语言,还需要对编程范式有深入的理解,能够解决复杂问题,并理解软件的底层工作原理。这些技能包括但不限于: - 算法和数据结构的知识:对于软件工程师来说,掌握基本的算法和数据结构是解决实际问题的基础。这包括了解不同算法的效率,选择合适的算法来优化程序性能,以及对于各种数据结构的优缺点有清晰的认识。 - 软件设计原则:包括模块化、抽象、封装、继承和多态等面向对象的概念,以及软件设计模式的理解。良好的软件设计原则可以帮助工程师创建可维护、可扩展和可复用的代码。 - 版本控制:理解和使用版本控制系统(如Git)是软件开发的日常工作的一部分,它帮助团队成员协调工作、跟踪更改,并有效地管理代码库。 - 软件测试:包括单元测试、集成测试和系统测试的技能,软件工程师需要能够编写测试用例,确保软件质量和稳定性。 - 代码审查:团队合作是软件开发的关键,通过代码审查,不仅可以提高代码质量,还能促进知识分享和技术协作。 - 开发工具和环境:理解并能够高效使用集成开发环境(IDEs)、调试工具和其他开发辅助工具对于提高开发效率至关重要。 - 理解软件开发生命周期:从需求分析、设计、编码到测试和维护,软件工程师需要了解整个软件开发生命周期以及如何管理整个流程。 文章提出,教育机构和行业应该共同努力,确保计算机科学教育能够提供给学生必要的技能,使他们能够适应现代软件行业的需求,特别是对安全性和可靠性有较高要求的领域。通过早期引入形式化方法,并在计算机科学教育中强调编程语言的核心地位,可以为学生打下坚实的基础,使他们能够成为明日的软件工程师。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助