The undergraduate programs in computer science stress fundamental principles of computational thinking, including solid theoretical underpinnings, computational methods and models for solving problems, principles for designing computing systems to meet human needs, and techniques for analyzing the effectiveness of these methods, models, and systems. They provide students with the conceptual foundation needed to stay at the front of this fast-changing field. For most courses, classroom learning is enhanced through significant faculty-directed, hands-on experience, typically in the form of a regularly scheduled laboratory.