We have come a long way since the time when it was generally believed that computers themselves would never constitute a scientific field of study, to a time where Computer Science has pervaded and made an impact on nearly all aspects of human life. The "smartness" of computers has enabled us to explore the surface of mars, map the human genome, discover malignant cancer cells, and even discover the "God particle", ad infinitum. At the same time, it is important to remember that a computer by itself is a "dumb" device which needs to be "programmed" to perform actions and tasks.
With all of this in mind, this course has been designed to teach students "to think like a computer scientist". Through a general-purpose programming language, Python, students will be introduced to multiple programming paradigms, including functional, imperative, and object-oriented, with a strong emphasis on writing clean, efficient (both in space and time), and bug-free code. Taking a hands-on approach, we will discuss and analyze how all of these methodologies can be mapped onto real-world problems and algorithms and students will be expected to get their hands dirty. Importantly, rather than getting into the nitty-gritty of these paradigms, this course aims to equip the students with the right skills and tools to venture out into the real world and make an impact in their respective domains.
"The computing scientist’s main challenge is not to get confused by the complexities of his own making."
— E. W. Dijkstra