COMP 1003: Foundations of Computing Systems
This course is required for all computer science MAJ majors and MIN minors.
This course is a follow up to a course in computer programming and would be of interest to students who want to pursue a degree in computer science or to those who are interested in learning foundational ideas in the science of computing.
Lab | In addition to classes, this course has one structured laboratory session per week. |
Prerequisites: COMP 1001
Corequisites: COMP 1002 or Mathematics 2320
Availability: This course is usually offered on-campus in Fall and Winter semesters.
ⓘ | COMP 1002 can be taken before or at the same time as COMP 1003, but COMP 1003 cannot be taken before COMP 1002. |
Course Objectives
The objective of this course is to provide a solid introduction to foundational topics in computer science: algorithms and data structures, theory of computing, machine architecture and their historical context.
Representative Workload
- Assignments 10%
- Lab Quizzes 15%
- Midterm Exam 30%
- Final Exam 45%
Representative Course Outline
- Algorithms and data structures (10 hours)
- Abstract data types and their implementation; using, designing and creating data types
- Algorithms for sorting and searching
- Fundamental data structures and their performance characteristics
- Theory of computing (10 hours)
- Alphabets, formal languages and their descriptions
- Abstract machines, finite state automata, Turing machines
- Universality
- Computability
- Intractability
- Machine architecture (10 hours)
- From abstract machines to “real computers”
- Representation of information, characters, integers and floating point numbers
- Machine language programming
- Virtual machines
- Boolean logic and the circuit model
- Combinational circuits, gates, multiplexors, decoders, arithmetic and logic unit
- Sequential circuits, flip-flops, memory, registers, clock
- Digital devices, program counter, control, central processing unit
Notes
- This course requires programming in Python.