The main emphasis of the curricula is software engineering: a systematic approach to the development of medium-to-large programs. One aspect of this approach is the separation of principles from technology. Students learn fundamental concepts in lecture sections and learn technical details — such as programming languages and operating systems — in laboratory sections. Students have opportunities for team projects as well as independent study and research.