Although some professions require a period of
internship, residency, or apprenticeship before marking an individual as a
qualified member, software engineering does not. Universities have started
offering curricula in software engineering, but many continue to offer SE as a
set of courses in their computer science curricula. Because the global demand
for software engineers far exceeds the supply of SE graduates, CS and applied
CS graduates frequently fill this gap. So, to enrich SE courses in the CS and applied
CS curricula with opportunities to practice SE concepts and principles, we
support an SE apprenticeship, simulated through system development projects.
In this article, the authors first examine the
prevailing SE body of knowledge and perspectives on SE education to construct a
model consisting of knowledge areas for SE professional development. They use
this model and Bloom’s taxonomy to delineate knowledge areas that an
apprenticeship could best handle. They then establish a framework for SE
apprenticeship and use it to examine practices for simulating apprenticeships
in three different academic institutions that offer CS, applied CS, or
computing systems curricula. To further supplement the apprenticeship, the
authors suggest using coordinated internship and co-op programs.