Computer Engineering Program

Computer Engineering is a discipline that is focused on developing computing systems. The goal of our program is to develop in students an ability to design complete systems that include hardware and software elements. Computer Engineers focus not just on how computers work but how to integrate them into larger systems.

The Computer Engineering Program begins in the second year of undergraduate studies, after completing the required first year engineering courses. Students will graduate with a Bachelor of Applied Science in Computer Engineering. Students in the Computer Engineering Program may choose their electives to focus on computer hardware design or the design of software-intensive computer systems.

See our video below for a brief introduction to the Computer Engineering program!

How does Computer Engineering differ from Computer Science and Electrical Engineering? And what is Software Engineering?

Computer Engineering is a discipline that focuses on developing computing systems. The goal of our Computer Engineering program is to develop in students an ability to design complete systems that include hardware and software elements. Computer Engineers focus not just on how computers work but how to integrate them into larger systems.

There is a some overlap between Electrical Engineering and Computer Engineering and this overlap is typically related to the design of digital circuits and systems. Electrical Engineering is more broadly concerned with electronic devices, electrical motors and machines, generation and transmission of electricity, communications, signal processing, and control of such systems. A computer engineer should understand how a transistor works and how it plays a role in digital circuits but questions related to improving the behaviour of the electronics is mostly an electrical engineering activity.

Computer Science programs evolved from Mathematics as it became necessary to express computation and develop algorithms as opposed to obtaining closed-form solutions for problems. In that sense, one could argue that the core of Computer Science as a discipline is about computation as an abstraction, not necessarily about computing systems. In the early days of computing, the design of programming languages to express computation and the development of algorithms to solve problems drove the discipline. However, for such ideas to be useful, computing systems were needed as well as the programming tools to actually carry out information management and computation. For example, there is much engineering that goes into the design and implementation of, say, operating systems and compilers. This is where “Computer Engineering” comes in.

Software Engineering is a discipline that covers the entire span of software development: from the gathering of requirements to specification, implementation, testing, deployment and maintenance. It also requires project management and risk assessment. No one expects a software engineer to build hardware. For example, a Software Engineer, in practice, may need to know about the properties of a data structure and be able to choose a data structure to use in a particular project, but rarely would such a person design a new data structure or prove correctness of algorithms and data structures.

What are some examples of typical work that a student does in Computer Engineering?

From the get-go, the Computer Engineering program strikes a balance between concepts and hands-on experience.

In CPEN 211, by the end of the course, students typically implement their own microprocessor (on an FPGA board) that can run a subset of ARM assembly language. In CPEN 221, students work on several mini-projects that may involve processing audio files or working with large graphs that represent social networks or a game that utilizes some AI. They also learn some of the key ideas that help us develop compilers for programming languages.

In CPEN 291, which is the Computer Systems Design Studio, students will work on projects that involve hardware and software design. The projects often to relate to robotics and controlling a small autonomous vehicle.

Program Curriculum

Second Year
OpenClose
First TermSecond Term
CPEN 211 (5)CPEN 212 (4)
CPEN 221 (4)CPEN 291 (6)
CPEN 281 (3)ELEC 201 (4)
MATH 253 (3)MATH 256 (3)
CPSC 221 (4)*
MATH 220 (3)*

Total Credits = 39

*courses can be taken in either term

Third Year
OpenClose
First TermSecond Term
CPEN 331 (4)CPSC 320 (3)
CPEN 391 (6)
CPSC 320 (3)*
One of MATH 318, STAT 251, MATH 302, STAT 302 (3)*
Electives (16) – To be chosen based on Department-approved list of Computer Engineering electives*
Complementary Studies Electives (6)*

Total Credits = 38

*courses can be taken in either term

Fourth Year
OpenClose
APSC 450 (2)*
CPEN 481 (3)*
CPEN 491 (10)
Electives (20) – To be chosen based on Department-approved list of Computer Engineering electives*
Science Elective (3)*

Total Credits = 38

*courses can be taken in either term

 For official course descriptions for each of the courses listed above, please visit the UBC Course Schedule.

For students who began their program in previous years, please see the following course checklists:

2019 CPEN Checklist

2020 CPEN Checklist

2021 CPEN Checklist

2022 CPEN Checklist

Switching to Computer Engineering:

Students that wish to switch from the Electrical Engineering Program to the Computer Engineering Program must complete the online application form.