## Computer Science Community home page

A place to share course materials including videos, photos, tutorials, syllabi and other tools to assist with teaching and learning across all areas of undergraduate computer science.*Please review the license information provided for each item as usage rights vary.*

### Collections in this community

#### UBC-CPSC 101: Connecting with Computer Science

Fundamentals of computer science and their connections with the arts, psychology, and biology. Historical, cultural, and gender perspectives of important contributions to the field will be discussed. No prior computing background required.

#### Empty Collections (show/hide)

#### UBC-APSC 160: Introduction to Computation in Engineering Design

Analysis and simulation, laboratory data acquisition and processing, measurement interfaces, engineering tools, computer systems organization, programming languages.

#### UBC-COGS 200: Introduction to Cognitive Systems

Interdisciplinary examination of human mental processes and how these are mediated by the brain. Will draw on cognitive psychology, linguistics, cognitive neuroscience, philosophy, artificial intelligence.

#### UBC-COGS 300: Understanding and Designing Cognitive Systems

Theory and methods for integrating diverse disciplinary content in cognitive systems.

#### UBC-COGS 303: Research Methods in Cognitive Systems

Examination and comparison of the research methodologies of different disciplines relevant to cognitive systems.

#### UBC-COGS 401: Seminar in Cognitive Systems

Interdisciplinary seminar integrating theory, methods, and current research topics.

#### UBC-COGS 402: Research in Cognitive Systems

Supervised research project in a Cognitive Systems-related laboratory.

#### UBC-CPSC 100: Computational Thinking

Meaning and impact of computational thinking. Solving problems using computational thinking, testing, debugging. How computers work. No prior computing experience required.

#### UBC-CPSC 103: Introduction to Systematic Program Design

Computation as a tool for systematic problem solving in non-computer-science disciplines. Introductory programming skills. Not for credit for students who have credit for, or exemption from, or are concurrently taking CPSC 110 or APSC 160. No programming experience expected.

#### UBC-CPSC 110: Computation, Programs, and Programming

Fundamental program and computation structures. Introductory programming skills. Computation as a tool for information processing, simulation and modeling, and interacting with the world.

#### UBC-CPSC 121: Models of Computation

Physical and mathematical structures of computation. Boolean algebra and combinations logic circuits; proof techniques; functions and sequential circuits; sets and relations; finite state machines; sequential instruction execution.

#### UBC-CPSC 189: Systematic Program Design in Python

Systematic design of small programs using the Python programming language.

#### UBC-CPSC 210: Software Construction

Design, development, and analysis of robust software components. Topics such as software design, computational models, data structures, debugging, and testing.

#### UBC-CPSC 213: Introduction to Computer Systems

Software architecture, operating systems, and I/O architectures. Relationships between application software, operating systems, and computing hardware; critical sections, deadlock avoidance, and performance; principles and operation of disks and networks.

#### UBC-CPSC 221: Basic Algorithms and Data Structures

Design and analysis of basic algorithms and data structures; algorithm analysis methods, searching and sorting algorithms, basic data structures, graphs and concurrency.

#### UBC-CPSC 259: Data Structures and Algorithms for Electrical Engineers

Advanced procedural programming. Fundamental algorithms for sorting and searching. Data structures including lists, trees, and hash tables. Introduction to scripting languages and file input/output.

#### UBC-CPSC 260: Data Structures and Algorithms for Computer Engineers

Design and analysis of object-oriented programs, emphasizing data structures. Topics include: classes, interfaces, fundamental data structures, algorithmic complexity, basic debugging and testing techniques.

#### UBC-CPSC 261: Basics of Computer Systems

Software architecture, operating systems, and I/O architectures. Relationships between application software, operating systems, and computing hardware; critical sections, deadlock avoidance, and performance; principles and operation of disks and networks.

#### UBC-CPSC 301: Computing in the Life Sciences

Basic concepts, tools, and techniques for working with scientific data at larger scales, higher speeds, and lower costs that would otherwise be impossible. Applications and examples drawn from the life sciences. No prior computing background is required.

#### UBC-CPSC 302: Numerical Computation for Algebraic Problems

Numerical techniques for basic mathematical processes involving no discretization, and their analysis. Solution of linear systems, including analysis of round-off errors; norms and condition number; introduction to iterative techniques in linear algebra, including eigenvalue problems; solution to nonlinear equations.

#### UBC-CPSC 303: Numerical Approximation and Discretization

Numerical techniques for basic mathematical processes involving discretization, and their analysis. Interpolation and approximation, including splines and least squares data fitting; numerical differentiation and integration; introduction to numerical initial value ordinary differential equations.

#### UBC-CPSC 304: Introduction to Relational Databases

Overview of database systems, ER models, logical database design and normalization, formal relational query languages, SQL and other commercial languages,data warehouses, special topics.

#### UBC-CPSC 310: Introduction to Software Engineering

Specification, design, implementation and maintenance of large, multi-module software systems. Principles, techniques, methodologies and tools for computer aided software engineering (CASE); human-computer interfaces, reactive systems, hardware-software interfaces and distributed applications.

#### UBC-CPSC 311: Definition of Programming Languages

Comparative study of advanced programming language features. Statement types, data types, variable binding, parameter passing mechanisms. Methods for syntactic and semantic description of programming languages.

#### UBC-CPSC 312: Functional and Logic Programming

Principles of symbolic computing, using languages based upon first-order logic and the lambda calculus. Algorithms for implementing such languages. Applications to artificial intelligence and knowledge representation.

#### UBC-CPSC 313: Computer Hardware and Operating Systems

Instruction sets, pipelining, code optimization, caching, virtual memory management, dynamically linked libraries, exception processing, execution time of programs.

#### UBC-CPSC 314: Computer Graphics

Human vision and colour; geometric transformations; algorithms for 2-D and 3-D graphics; hardware and system architectures; shading and lighting; animation.

#### UBC-CPSC 317: Internet Computing

Computer networking, basic communication protocols, network infrastructure and routing. Common application-level protocols and principles associated with developing distributed applications.

#### UBC-CPSC 319: Software Engineering Project

The design, implementation, and test of a large software system, using a team approach.

#### UBC-CPSC 320: Intermediate Algorithm Design and Analysis

Systematic study of basic concepts and techniques in the design and analysis of algorithms, illustrated from various problem areas. Topics include: models of computation; choice of data structures; graph-theoretic, algebraic, and text processing algorithms.

#### UBC-CPSC 322: Introduction to Artificial Intelligence

Problem-solving and planning; state/action models and graph searching. Natural language understanding Computational vision. Applications of artificial intelligence.

#### UBC-CPSC 340: Machine Learning and Data Mining

Models of algorithms for dimensionality reduction, nonlinear regression, classification, clustering and unsupervised learning; applications to computer graphics, computer games, bio-informatics, information retrieval, e-commerce, databases, computer vision and artificial intelligence.

#### UBC-CPSC 344: Introduction to Human Computer Interaction Methods

Basic tools and techniques, teaching a systematic approach to interface design, task analysis, analytic and empirical evaluation methods.

#### UBC-CPSC 402: Numerical Linear Algebra

Investigation of the practical techniques of computational linear algebra. Orthogonal transformations and their application to the solution of linear equations, the eigenproblem, and linear least squares. Complete solution of the symmetric eigenproblem, including bisection and the QR method. Refinements of these techniques for sparse matrices.

#### UBC-CPSC 404: Advanced Relational Databases

Physical database design, indexing, relational query processing and optimization, transaction processing, concurrency control, crash recovery, data warehouses, data cubes, views, special topics.

#### UBC-CPSC 406: Computational Optimization

Formulation and analysis of algorithms for continuous and discrete optimization problems; linear, nonlinear, network, dynamic, and integer optimization; large-scale problems; software packages and their implementation; duality theory and sensitivity.

#### UBC-CPSC 410: Advanced Software Engineering

Specification, design, construction and validation of multi-version software systems.

#### UBC-CPSC 411: Introduction to Compiler Construction

A practical introduction to lexical analysis, syntactic analysis, type-checking, code generation and optimization. This will be used to design and implement a compiler for a small language.

#### UBC-CPSC 415: Advanced Operating Systems

Process synchronization and communication schemes, including message-passing and concepts of monitor and serializer. Virtual memory systems management and the problem of information sharing in such systems. The working set principle. Traps and interrupt handling. Elementary queuing theory and its application such as process scheduling, system balancing and load control. File systems and operating system design methodologies.

#### UBC-CPSC 416: Distributed Systems

Concepts and design of distributed systems. Communication architecture and models for interprocess communication. Process migration, naming, distributed file systems, fault tolerance, and concurrency control.

#### UBC-CPSC 417: Computer Networking

Network protocols and architecture including internetworking, the Internet, layered communication protocols, routing, flow and congestion control, network performance, wired and wireless data communication.

#### UBC-CPSC 418: Parallel Computation

Algorithms, architectures, and programming paradigms for parallel computation. Shared memory, message passing, and data parallel architectures and programming models. Parallel algorithms including reduce, scan, and sorting networks. Reasoning about the correctness of parallel programs. Performance analysis and measurement for parallel programs.

#### UBC-CPSC 420: Advanced Algorithms Design and Analysis

The study of advanced topics in the design and analysis of algorithms and associated data structures. Topics include algorithms for graph-theoretic; algebraic and geometric problems; algorithms on nonsequential models; complexity issues; approximation algorithms.

#### UBC-CPSC 421: Introduction to Theory of Computing

Characterizations of computability (using machines, languages and functions). Universality, equivalence and Church's thesis. Unsolvable problems. Restricted models of computation. Finite automata, grammars and formal languages.

#### UBC-CPSC 422: Intelligent Systems

Principles and techniques underlying the design, implementation and evaluation of intelligent computational systems. Applications of artificial intelligence to natural language understanding, image understanding and computer-based expert and advisor systems. Advanced symbolic programming methodology.

#### UBC-CPSC 424: Geometric Modeling

Digital representation of curves and surfaces, including splines, subdivision surfaces and meshes. Principles, algorithms and mathematical foundations for geometry representation in computer graphics, computer vision, fabrication, CAD/CAM, and medical imaging. Algorithms for acquisition, creation, representation, and processing of 3D shapes.

#### UBC-CPSC 425: Computer Vision

Introduction to the processing and interpretation of images. Image sensing, sampling, and filtering. Algorithms for colour analysis, texture description, stereo imaging, motion interpretation, 3D shape recovery, and recognition.

#### UBC-CPSC 426: Computer Animation

Motion in computer graphics for characters and their environments. Keyframing, inverse kinematics, particle systems, rigid body dynamics, contact and collision, controller-based active motion, motion capture.

#### UBC-CPSC 430: Computers and Society

Impact of computer technology on society; historical perspectives; social and economic consequences of large-scale information processing systems and automatic control; legal and ethical problems in computer applications. Computers and the individual: machine versus human capabilities, fact and fancy; problematic interface between man and machine.

#### UBC-CPSC 436: Topics in Computer Science

Selected topics in a specific area within Computer Science.

#### UBC-CPSC 444: Advanced Methods for Human Computer Interaction

Design and evaluation methodologies and theories; formal models of the user including visual, motor, and information processing; advanced evaluation methods including laboratory experiments and field studies; HCI research frontiers.

#### UBC-CPSC 445: Algorithms in Bioinformatics

Sequence alignment, phylogenetic tree reconstruction, prediction of RNA and protein structure, gene finding and sequence annotation, gene expression, and biomolecular computing.