Academics

This is a complete listing of Computing and Information Science courses I have taken while at the University of Guelph while completing my Bachelor of Science degree in Computing and Information Science.

Key Sections

Introductory problem-solving, programming and data organization techniques required for applications using a general purpose programming language. Topics include control structures, data representation and manipulation, program logic, development and testing. For students who require a good understanding of programming or are planning on taking additional specialist Computing and Information Science courses.

CIS*1910 - Discrete Structures in Computing I - P. Matsakis

An introduction to discrete structures and formal methodologies used in computer science, including Boolean, prepositional and predicate logic, finite set theory, functions, relations, and proof techniques.

CIS*2430 - Object Oriented Programming - F. Song

This course introduces the Object Oriented (OO) approach to programming and algorithm design. Topics will include the creation and use of objects from class libraries, user defined objects, inheritance, modularity, generic code, components, collections and containers, and an introduction to OO design methodologies.

How to interpret a program specification and implement it as reliable code. Experience with pointers, complex data types, and important algorithms. Intermediate tools and techniques in problem-solving, programming and program testing.

CIS*2520 - Data Structures - D. Calvert

Basic data structures are studied including: stacks, queues, lists, trees, hashing, search trees, and graphs. Topics include their representation, uses, and algorithms for their traversal and manipulation. The emphasis is on using these structures and assessing the relative effectiveness of alternative implementations.

CIS*2910 - Discrete Structures in Computing II - D. Swayne

This course introduces graph theory, combinatorics and other discrete structures used in computer science, including graph representations, traversal and simple graph algorithms, trees, counting strategies, summations, and an introduction to finite probability, recursion, and finite state machine models.

Review of data organization and data management principles with the perspective of analyzing applications suitable for implementation using a DBMS. Analysis of several data base models, query specification methods, and query processing techniques. Overview of several related issues including concurrency control, security, integrity and recovery. Students are expected to demonstrate concepts through project assignments.

CIS*3620 - Programming Language Foundations - C. Obimbo

This course explores finite automata, formal languages, parsing, sequential machines and models of computation, including an introduction to Turing machines and the hierarchy of machines/languages.

This course examines the components of a computer system, including memories, CPU, buses, and input/output subsystems and interface hardware. Programming of these systems is studied, including instruction sets, addressing modes, assembly/machine language programming, development of algorithms for data acquisition, display, and process control.

This course covers the high-level (protocol) oriented aspects of computer networks, specifically: application, session, transport and network layers. It includes the internet, socket-level programming, multimedia and quality of service issues. The hardware aspects (switches, LANs, modems, transmission paths) are covered at only a functional level.

Techniques and tools used in the development of large software systems. Methods for organizing and constructing modular systems, manipulating files, an introduction to interface design, and use of databases. Software tools for managing projects, database connectivity, configuration management, and system application programmer interfaces.

An introduction to the issues and techniques encountered in the design and construction of software systems. The theory and models of software evolution. Topics include requirements and specifications, prototyping, design principles, object-oriented analysis and design, standards, integration, risk analysis, testing and debugging.

CIS*4150 - Software Reliability and Testing - D. Stacey

This course serves as an introduction to systematic methods of testing and verification, covering a range of static and dynamic techniques and their use within the software development process. Concepts such as defining necessary reliability, developing operational profiles, techniques to improve and predict software reliability, preparing and executing tests, black box testing, white box testing, unit testing, system testing, and integration testing will be explained.

This course is a detailed study of the compilation process. Topics include interpreters, overall design implementation of a compiler, techniques for parsing, building and manipulating intermediate representations of a program, implementation of important features, code generation and optimization.

Planning, developing and writing a research proposal under individual faculty supervision. The course, in continuation with CIS*4910 provides senior undergraduates an opportunity to pursue an independent course of study. The topic selected will be determined by agreement between the student and the faculty member with expertise in the area.