Many people understandably ask “Where is the science and where is the engineering?” After all, isn’t computers “just programming”?
The short answer goes something like this: the science comes in learning how to classify and categorize algorithms, how to describe their features mathematically, and how to measure the performance and capabilities of software and/or hardware systems. Programming is a tool in this endeavour. When we turn to building complex software or hardware systems we enter the realm of engineering where the application of the science becomes intertwined with the methodologies required to build safe, correct, reliable and maintainable systems. Central ideas of computer science, computer engineering, electrical engineering and computer security are built on mathematical foundations. Our programs incorporate a high level of abstract thinking using mathematical concepts and notation as well as mathematical logic.
At the heart of our field is the interaction of hardware and software. Our undergraduate program provides a fundamental understanding of the theoretical principles of software and digital systems within the context of modern technology. Upper-year courses go beyond the core areas of systems, theory, programming and hardware to study robotics, graphics and visualization, multimedia and computer music, database systems, artificial intelligence, programming languages, operating systems, computer networks, user interfaces and more.
In addition to developing the core professional skills, it is also important that our students obtain an understanding of the human and social aspects of computer systems, and how computer science relates to other disciplines. Besides formally pursuing a double major, each degree program includes opportunities to take elective courses outside the mainstream computer science curriculum. Students are encouraged to select electives that develop their other interests and which meaningfully expand their understanding of the implications of their chosen discipline.