An aspect-oriented approach to the undergraduate programming language curriculum

  • Authors:
  • Mark A. Sheldon;Franklyn Turbak

  • Affiliations:
  • Wellesley College;Wellesley College

  • Venue:
  • ACM SIGPLAN Notices
  • Year:
  • 2008

Quantified Score

Hi-index 0.00

Visualization

Abstract

Three key forces are shaping the modern Computer Science (CS) curriculum: (1) new topics/courses are squeezing out existing ones; (2) a focus on "big picture" and interdisciplinary aspects of CS is leading to curricula in which the traditional core courses + electives model is being superseded by a more flexible approach based on tracks/threads; and (3) project-based courses are increasingly relying on a notion of just-in-time teaching in which particular skills are not bundled into a particular course, but are covered at a point when they are needed for particular project work. The undergraduate programming language curriculum is feeling the pressure of these forces. Core courses on programming languages and compilers are being changed to electives, relegated to a software/systems track, or phased out altogether. Particular programming languages and programming language concepts are being taught in a more piecemeal fashion on an as-needed basis. Unfortunately, these changes make it increasingly likely that CS majors can graduate without being exposed to certain "big ideas" of programming languages. Programming languages (along with many other subdisciplines of CS) contains ideas that every well-educated computer scientist needs to know and which are relevant to a wide variety of projects/careers. In a CS curriculum based on tracks and projects, how can we ensure that vital intellectual components are not lost in the shuffle? One way to think about this problem is to view the CS curriculum as a collection of aspects that can be combined in different arrangements to produce various projects/courses. In this paper, we consider the benefits and challenges of an aspect-oriented view of the CS curriculum, particularly in regard to programming language concepts.