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 Semester

    First Semester
    Second Semester
    Math222a Math223b
    Math222a is a prerequisite for Math223b
    CS208a/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 CS212b
    CS211a 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.

  • 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

  • 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

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
    • 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
  • 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
  • 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
  • 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

 



 

Western provides the best student experience among Canada's leading research-intensive universities.