Undergraduate - 2nd Year Courses
Second Year Course Information
- Most Computer Science programs require the following
second-year courses:
- Computer Science, 208a, 209b, 210a/b, 211a/b, 212a/b/y
- Mathematics 222a, 223b
Suggested Course Selection for First and Second SemesterFirst SemesterSecond SemesterMath222a Math223b
Math222a is a prerequisite for Math223bCS208a/b or CS209a/b
CS208a/b contains programming, CS209a/b has more theory and no programming content.CS208a/b or 209a/b
(which ever was not taken in first semester)CS210a CS212b
CS210a/b and 211a/b are prerequisites for CS212bCS211a Option Option Option
Note: Students who want to take CS388 in third-year and do not have Linear Algebra 040a/b or Applied Math 025a/b should consider taking Math
202a or Applied Math 214b in place of an option.
- Computer Science, 208a, 209b, 210a/b, 211a/b, 212a/b/y
- For Honors progression, you must have:
-
At least 60% in each Computer Science and Mathematics
courses listed above (or the principal courses listed for
the program)
-
An average of at least 70% in these same courses
-
A passing grade in each subsidiary (option) course
- An average of at least 60% in the subsidiary courses
-
At least 60% in each Computer Science and Mathematics
courses listed above (or the principal courses listed for
the program)
- For progression in the Four-Year General and Three-Year
programs, you must have:
-
A passing grade (50%) in each Computer Science and
Mathematics courses listed above (or the second year
principal/mandatory courses
listed for the program)
- An average of at least 60% in the Computer Science and Mathematics courses listed above
-
A passing grade (50%) in each Computer Science and
Mathematics courses listed above (or the second year
principal/mandatory courses
Second-Year Course Descriptions
Computer Science 208a:
Fundamentals of Computer Organization
-
This course teaches the concepts of computer organization in
terms of internal computer structure and basic operations.
Topics will include
representation of information (instructions, data), assembly and linking, memory management, design of instructions. The theory is put into practice
by studying one or more assembly languages.
- Prerequisite: Computer Science 027a/b with at least 60%
Computer Science 209b:
Applied Logic for Computer Science
-
This course looks at formal logic, with particular emphasis
on its applications to Computer Science. It covers
propositional and predicate logic, and
discusses logic as a tool for representation, reasoning and calculation.
-
There is no programming content.
- Prerequisite: Computer Science 027a/b
Computer Science 210a/b:
Data Structures and Algorithms.
-
Topics include:
-
Object-Oriented Design Principles and Techniques
-
Time and Space Complexity Analysis Techniques
-
Analysis of Data Structures and their Associated
Algorithms
-
stacks, queues, lists (linked lists, ordered lists,
sequences), trees (binary trees, binary search trees,
AVL trees B-trees), priority queues,
hash tables, directed and undirected graphs
-
stacks, queues, lists (linked lists, ordered lists,
sequences), trees (binary trees, binary search trees,
AVL trees B-trees), priority queues,
-
Analysis of Sorting and Searching Techniques
- selection sort, bubble sort, insertion sort, merge sort, quick sort, heap sort, radix sort, linear search, binary search
-
File Structures
- memory management techniques, external searching and sorting
-
Object-Oriented Design Principles and Techniques
-
Prerequisite: Computer Science 027a/b with at least 60%, and
one full course or equivalent, chosen from the following:
Mathematics 030, Applied
Mathematics 026, Calculus 050a/b, 051a/b, 081a/b or Linear Algebra 040a/b
Computer Science 211a/b:
Software Tools and Systems Programming.
-
Introduction to tools and techniques that promote programming
productivity and software quality. Topics include
understanding what happens when programs run, specification,
code review and inspection techniques, testing and debugging
methods and tools, reusable software components and templates,
file system navigation, scripting languages, software
configuration management, software tools, environments, and
instrumenting and profiling.
-
Topic include:
-
Introduction to Systems Programming Languages:
Introduction to C; Memory, addresses, pointers, arrays, strings, bit operations, standard; I/O libraries, preprocessors
-
Basic Operating System Concepts and System Tools:
File abstraction and file system organization, processes and shell internals, program execution, shell scripting, storage models, compilation, and linking, standard library, system calls, basic concurrency concepts, windowing systems, debuggers, profiling
-
Software Project Structure and Cycles:
Program builds, version control and configuration management
-
Software Testing Techniques and Quality Assurance:
Abstract data type testing versus system testing, whitebox and blackbox testing , stubs and drivers, measuring coverage, defensive programming
-
Object-Oriented Concepts:
C++, class and function templates, using class libraries, exceptions, dynamic versus static binding
- Miscellaneous: useful software development techniques within a particular domain; regular expressions and basic parsing techniques
-
Introduction to Systems Programming Languages:
- Prerequisite: Computer Science 027a/b with at least 60%
Computer Science 212a/b/y:
Introduction to Software Engineering
-
A team project course that provides practical experience in
the software engineering field. Introduction to the structure
and unique characteristics of large software systems, and
concepts and techniques in the design, management and
implementation of large software systems.
-
Course hours will be used for lectures on the topics outlined
below, and, as the team project progresses, for group
meetings.
-
Topics include:
-
Introduction to Software Engineering:
Project life cycles, methodology overview
-
Estimating, Planning and Scheduling Projects: standards
and organization
-
Working in a Team
-
Requirements Analysis and Specifications
-
Design Concepts
-
User Interface Design Concepts
-
Source Code Management
- Modern Software Engineering Tools
-
Introduction to Software Engineering:
- Prerequisites: Computer Science 210a/b and 211a/b
Mathematics 222a and 223b:
Discrete Structures I and II
-
These courses explore topics in discrete mathematics that are
of particular use in Computer Science.
-
Topics include: logic, mathematical induction, sets,
equivalence and order relations, permutations and
combinations, Boolean algebras, lattices; error-correcting
codes, elementary number theory, graph theory.
- Prerequisites:
-
Math 222a: One full course equivalent chosen from the
following: Mathematics 030, Applied Mathematics 026,
Calculus 050a/b, 051a/b, 081a/b or Linear Algebra 040a/b
(in each case with a minimum grade of "C");
Computer Science 026a/b and 027a/b (in each case with a
minimum grade of "C").
- Math 223b: Math 222a
-
Math 222a: One full course equivalent chosen from the
following: Mathematics 030, Applied Mathematics 026,
Calculus 050a/b, 051a/b, 081a/b or Linear Algebra 040a/b
(in each case with a minimum grade of "C");
Computer Science 026a/b and 027a/b (in each case with a
minimum grade of "C").
Also from this web page:
Undergrad Courses
- Course Number Conversion Chart
- First Year Courses
- Second Year Courses
- Third Year Courses
- Fourth Year Courses

