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

Basic Principles

CIS*1500 - Introduction to Programming - M. Wirth

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.

CIS*2460 - Modelling of Computer Systems - M. Wineberg

Discrete simulation based on event queues. Random number generation. How to generate input data, measure and evaluate results using standard statistical tests. Model calibration and validation. Algebraic, probabilistic and simple queuing models of software and hardware operation.

CIS*2500 - Intermediate Programming - D. Calvert

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.

CIS*3490 - Analysis and Design of Computer Algorithms - D. Swayne

The design and analysis of efficient computer algorithms are studied. Topics which will be studied include: standard methodologies, asymptotic behaviour, optimality, lower bounds, implementation considerations, graph algorithms, matrix computations (e.g. Strassen's method), NP-completeness.

CIS*3530 - Data Base Systems and Concepts - D. Nikitenko

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.

Computing Systems

CIS*2030 - Structure and Application of Microcomputers - A. Elmesalami

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.

CIS*3110 - Operating Systems - W. Dobosiewicz

Operating Systems in theory and practice. Components in a system: scheduling and resource allocation; process management, multi-programming, multi-tasking; I/O control and file systems; mechanisms for client-server computing. Examples from contemporary operating systems.

CIS*3120 - Digital Systems - G. Grewal

Boolean algebra, minimization of Boolean expressions. Design of combinational and sequential logic circuits. Memory design. Control, ALU, bus design. Microprogramming and CPU design.

CIS*3210 - Computer Networks - W. Dobosiewicz

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.

Design and Implementation

CIS*2750 - Software Systems Development and Integration - D. McCaughan

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.

For information about the project, click here.

CIS*3750 - System Analysis and Design in Applications - J. McCuaig

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.

CIS*4300 - Human Computer Interaction - J. McCuaig

Methods for user interface software design, including interface representations nd testing. Evaluation and design of sample application systems. Impacts of computer-based information systems on individuals and organizations. Implementation and testing tools. Planning of learning stages and design of assistance subsystems.

CIS*4430 - Information Organization and Retrieval - F. Song

Advanced techniques for information management. Analysis of advanced indexing structures. Information retrieval, feedback strategies, text searchings, automatic indexing. Database query optimization and system support. Web based retrieval.

CIS*4650 - Compilers - D. McCaughan

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.

CIS*4800 - Computer Graphics - D. Calvert

Introduction to computer graphics. Topics include graphics programming concepts, geometrical transformations, viewing 3-D projections, raster graphics, sculptured surfaces, visible surface determination, image processing and other special topics. Practical issues will be covered by assignment using currently available graphics equipment.

Artificial Intelligence

CIS*4730 - Pattern Recognition - D. Chiu

This course introduces fundamental concepts, theories and algorithms for pattern recognition, which are used in areas including computer vision, signal processing, speech recognition and linguistics. Major themes include statistical pattern classification, supervised and unsupervised learning, feature selection and extraction, clustering, image classification, and syntactical pattern recognition.

CIS*4780 - Computational Intelligence - S. Kremer

This course introduces concepts of soft computing: modelling uncertainty, granular computing, neurocomputing, evolutionary computing, probabilistic computing and soft computing for software engineering.


CIS*4900 - Computer Science Project - J. McCuaig

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.