Section II
The following list of the nine computer science areas shows the learning outcomes for the corresponding
University of Victoria Department of Computer Science 300-level course that covers each area. This
information provides guidance on the skills and knowledge required to cover the corresponding areas. A
substantial (but not perfect) match is expected for courses in Table A.
1. Operating Systems
UVic corresponding course: CSC 360 Operating Systems
Students will be able to understand the data structures and algorithms for the main components in a modern
operating system.
By the end of the course, the students will be able to
• understand operating systems history, principles and structures;
• interact with operating systems through system calls and Application Programming Interface;
• understand process and thread management including process/thread operations, scheduling,
communications and synchronization;
• understand memory management including main memory and virtual memory allocation, mapping
and replacement;
• understand common input/output management, particularly storage management;
• understand file systems organization and implementation.
2. Computer Communications and Networks
UVic corresponding course: CSC 361 Computer Communications and Networks
The course objectives are to help students gain a general understanding of the principles and concepts
governing the operations of computer networks and to provide them with the opportunity to become skilled
in implementing and using communication protocols.
By the end of the course, the students will be able to
• use Wireshark to capture and analyze Internet traffic,
• use socket programming to implement/analyze an application-level protocol,
• develop programs to analyze a traffic trace file's structure and statistical features,
• understand TCP behaviour and identify TCP anomalies,
• config and test virtual routing devices, and
• test network performance using tools such as ping and traceroute.
3. Programming Languages
UVic corresponding course: CSC 330 Programming Languages
This course introduces fundamental concepts in computer programming languages, their design, syntax,
semantics, pragmatics and applications. Students will be exposed to (and will write programs using) very
different approaches towards expressing computation. Contrasting programming languages will be used for
assignments (Haskell, Rust, Javascript) that provide experience with different programming paradigms.
By the end of the course, the students will, among other learning outcomes, be able to
• summarize the evolution of programming languages by showing how we have arrived at paradigms
available to us today;
• compare and contrast the compiled and interpreted execution models;
• explain the value of declaration models;
• identify and describe the property of variables given a particular programming paradigm;
• demonstrate different forms of binding, visibility, scoping and lifetime management of variables;
• defend the importance of abstraction mechanisms made available by programming languages;
• justify the philosophy of object-oriented design and concepts of encapsulation, abstraction,
inheritance and polymorphism;
• design, code, test and debug programs using the object-oriented paradigm in a language other than
Java or C#;
• describe how iterators access the elements of a container;
• outline the strengths and weaknesses of the functional programming paradigm;
• design, code, test and debug programs using the functional paradigm;
• describe the steps and algorithms used by language translators;
• recognize the underlying formal models use to define a language through regular expressions and
grammars;
• evaluate languages with regard to typing.
4. Software Development Methods
UVic corresponding course: SENG 365 Software Systems Development.
Upon successful completion of the course, students will be able to
• describe the importance/impact of bad/good interface design;
• identify the potential human factor elements in a design;
• identify the representative users of a design and discuss who else could be impacted by this design
• identify the standard software architecture of a given high-level design;
• select and use an appropriate design paradigm to design a simple software system and explain how
system design principles have been applied in this design;
• discuss factors other than computational efficiency that influence the choice of algorithms, such as
programming time, maintainability, and the use of application-specific patterns in the input data;
• compare and contrast the different types and levels of testing (regression, unit, integration, systems,
and acceptance);
• describe techniques for creating a test plan and generating test cases;
• employ the fundamental principles of test-driven development methods and explain the role of
automated testing in these methods;
• undertake, as part of a team activity, a code review of a medium-size code segment;
• describe the role that tools can play in the validation of software;
• automate testing in a small software project;
• understand the use of Continuous Integration systems as a ground-truth for the state of the team’s
shared code (build and test success);
• describe the issues that are important in selecting a set of tools for the development of a particular
software system, including tools for requirements tracking, design modeling, implementation, build
automation, and testing;
• propose and delegate necessary roles and responsibilities in a software development team; and
• facilitate through involvement in a team project, the central elements of team building, establishing
healthy team culture, and team management including creating and executing a teamwork plan.
5. Human-centered Computing
UVic corresponding course: SENG 310 Human Computer Interaction
In this course, students will be introduced to the three main phases of HCI work: (a) understanding people,
(b) developing prototypes and (c) evaluation. More specifically, students will focus on understanding and
applying the human-centred design process. This course is not about developing technically robust software
systems, but instead will require students to develop an understanding of people’s everyday interactions
with computer technology and apply that understanding to critically reflect upon and suggest new ways to
improve or enhance human-computer interactions.
At the end of the course, students will be able to
• define foundational concepts in human-centred design and be able to differentiate between
different approaches and methods that can be considered when designing, implementing, and
evaluating a prototype computer-based interface;
• identify the goals, requirements, users, stakeholders, ethical considerations, context, and desired
outcomes of a design situation;
• apply design principles to design and develop an interactive prototype using appropriate rapid
prototyping tools and techniques, such as sketching, journey maps, storyboarding, and video
prototyping;
• plan and conduct an evaluation to address a user research problem, including the selection of an
appropriate evaluation technique and a critical assessment of the chosen method;
• as a team, critically analyze and synthesize findings to document and present the results from a
range of evaluation techniques such as controlled experiments, questionnaires, video evaluations,
field studies, and analytically based evaluations;
• synthesize diverse perspectives within a team to collaboratively define, design, and evaluate an
interactive prototype, and articulate the group's rationale for key design decisions.
6. Data Systems
UVic corresponding course: CSC 370: Database Systems
The objective of the course is to present an introduction to database management systems (DBMS), with an
emphasis on how to organize, maintain and retrieve--efficiently, and effectively--information from a DBMS.
By the end of this course, students will be able to
Database Design
• describe real-world domains in terms of data models (e.g., ER diagrams, relational
schemas);
• apply normalization and schema refinement techniques to design robust databases;
Data Analysis
• formulate and execute queries to extract, manipulate, and analyze data using query
languages (e.g., SQL);
• translate real-world questions into formal database queries and interpret results correctly;
Concurrency and Robustness
• explain how a DBMS handles concurrent access and transactions;
• demonstrate understanding of isolation levels, deadlocks, and recovery from system
failures;
Query Evaluation and Optimization
• explain how a DBMS parses, plans, and executes queries;
• compare different query execution strategies and evaluate their efficiency;
• apply query optimization techniques (e.g., use of indexes, join strategies, cost-based
optimization);
Efficiency and Scalability
• describe how databases store and index large volumes of data;
• evaluate query performance and identify bottlenecks;
• understand trade-offs in scaling databases to support large applications.
7. Artificial Intelligence and Machine Learning
UVic corresponding course: CSC 321 Course outline unavailable. (Placeholder CSC 421 Intro to AI)
By the end of the course, the students will have learned to
• understand the abstraction of agents as a framework for understanding AI concepts, as well as
integrating the various concepts and ideas learned during the course into working systems. For
example:
o mapping agent frameworks to specific problems,
o developing example systems to solve problems given in a specification;
• formulate various structured problems as search problems and be familiar with the variety of
algorithms and associated trade-offs that can be used to solve them. For example:
o leveraging structure in Constraint Satisfaction Problems (CSP) for efficiency,
o constructing multiple algorithmic solutions in the same theme to solve the same problem,
and understanding the trade-offs of these solutions;
• represent facts and knowledge using logic and understand the principles behind inference systems.
For example:
o converting a given specification into a given logic notation,
o developing a parser and basic inference system for this notation,
o using more advanced inference systems to solve a problem;
• be able to communicate about and structure various problems that feature uncertainty using
probabilities and probabilistic reasoning. For example:
o construct a probabilistic problem from scratch and then reason about outcomes,
o chart the change in belief over drawn samples using different probabilistic tools,
o reason about how AI agents can use this information to update their beliefs when solving
problems;
• be familiar with the basic terminology and development of machine learning techniques. For
example:
o using data to train effective algorithms,
o investigating measures of success/failure regarding trained models;
• be able to think critically about the ethical and safety implications of building systems using AI
technologies. For example:
o reason about the ethical implications of particular AI usage choices,
o map potential safety requirements/concerns to AI deployment scenarios,
o map ethical frameworks to dilemmas in AI development and deployment.
8. Graphics
UVic corresponding course: CSC 305 Intro to Computer Graphics
This course is an introduction to the field of computer graphics and its three main branches: modelling,
animation, and rendering. The course covers both theoretical and applied concepts such as transformations,
raster graphics with modern OpenGL, data structures for graphics, rendering algorithms, and computer
animation algorithms.
By the end of the course, the student will understand
• the modern real-time graphics pipeline;
• the transformations used in the graphics pipeline;
• projections, projection matrices, and their derivations;
• the development of shader-based rendering methods to implement the real-time graphics pipeline;
• texturing and UV mapping;
• hierarchical transformation modelling and developing animated linked transformations;
• both real-time and offline ray tracing and ray marching methods for high-fidelity rendering.
9. Computer Science Theory
UVic corresponding course: CSC 320 Foundations of Computer Science
By successfully completing the course, the student will be able to
• understand and analyze when it is possible to solve a problem computationally,
• understand and prove when a problem is undecidable,
• understand and illustrate how limitations on computational resources limit the class of problems
that can be solved,
• understand and apply models of computation for different problems in the Chomsky hierarchy,
• characterize and analyze computational problems that are tractable,
• characterize and prove computational problems that are intractable,
• characterize the class of problems solvable in a model,
• understand what it means for models of computation to be equivalent,
• understand and apply reductions to prove intractability and undecidability of problems,
• transform an automaton into a different equivalent representation, and vice versa.