CSCA48 - Introduction to Computer Science II

The result of a process that took well over a year and a half, this course has been re-designed from the ground up. In terms of material, it is equivalent to other CS2 courses in North America, and indeed the course content was determined after careful study of a number of such CS2 courses. What is different about this course is the emphasis put on helping you develop skills that will be essential during your University career.

  • It is not a programming course - though we will use programming heavily and you will learn the fundamental material to implement course ideas in C.

  • It is also not just for future computer scientists! - If you have an interest in computing, or will need to apply computational techniques to solve problems in your professional field, there is something in this course for you! Applications and problems in the course are chosen from a variety of domains.

  • We will focus on fundamental problems in computer science, and discover how the tools and theory we learn in the course help us address these problems.

  • The goal is to help you develop the ability to analyze a problem, choose a suitable approach for solving it, and then implement that solution. Tools and algorithms you learn in this course will be required, and refined upon, in your later courses.

  • We will link what you are learning in this course to the applications where the material is relevant, and to future courses you will be taking

  • We will bring up the social impact of computing, and start working toward developing a solid ethical foundation on which to build your career. In the end, computer science should be a tool for changing the way our world works in order to make people happier, more productive, and to live more fulfilled lives. We encourage you to dream of what you'd like to change, and we can start here, with this course, to provide you with the tools you will need to make it happen.

Course Topics

Selected to cover fundamental ideas central to compter science. Each topic is carefully developed, and builds upon prior content toward providing you with a well rounded and solid foundation for taking on, and mastering advanced material in multiple areas of theory and application for computer science. Topics include information storage, management, and manipulation; computational efficiency; approaches for problem solving (including recursion), and the need for a solid framework for software design.

Course Components and Outcomes

There are multiple course components, each of which supports a variety of course and learning outcomes. You will engage in weekly readings, problem solving exercises, and in-person interaction with your TAs and instructors. Lectures support your learning and dive into the more involved or interesting parts of the material. Self-reflection questionnaires allow you to keep track of your progress and determine whether you should drop by and get help from us during office hours

Lecture Notes

As part of the course re-design, I wrote a complete set of lecture notes covering all the material in the course, complete with worked out examples, problems to practice, and code for the relevant parts of each section. These are freely available. Click on the image!

Click here to read what people who completed the course think about it!