Published on

CPEN

Computer Engineering at UBC

The Computer Engineering Path at UBC.

Contents

Introduction

I'm a third year student at UBC, and I'm currently in the Computer Engineering program. Here's my take on the program, and how it's been so far.
I'll skip courses that I feel are irrelevant to the curriculum.

First Year

APSC 100/101 Introduction to Engineering I/II

Technologies: Excel, C, Arduino, Electronics, CAD
Don't remember much, other than the engineering design process (which is actually pretty important).
The projects were quite fun. I particularly enjoyed the claw project, as I like electro-mechanical systems. I'd say the most boring part is simulating the water system in excel.

APSC 160 Introduction to Computation in Engineering Design

Technologies: C, Arduino, Virtualization, Excel
Ya learn C, ya learn Arduino, ya hardware simulation, ya learn excel.
I think they should teach C pointers instead of Excel :3.

CHEM 154 Chemistry for Engineering

I didn't take the course. Here's my friend's opinion.

The class was at 8am. I don't remember anything. Was just AP Chem.

— Bell Chen

MATH 100/101 Differential Calculus/Integral Calculus with Applications

I toke it during covid-year, so everything was online. Everything was chill until the final.
I got more than 50% higher on my midterms than final.

Math 152 Linear Systems

Technologies: Matlab
Honestly, the prof whose lecture I ended up watching was great. I wish the material was a bit more applied, but it was still interesting. Linear algebra is quite important if plan on taking any cs matrix-based courses (e.g. cpsc 340, 425).

PHYS 157/158 Introductory Physics for Engineers I/II

Don't remember much. Classic physics. A good highschool foundation will makes things easier.

PHYS 159 Introductory Physics Laboratory for Engineers

You get to play around with circuits. Pretty useful for avoiding death in specific situations.

Second Year

CPEN 211 Introduction to Microcomputers

Technologies: Verilog, Assembly, DE1-SOC, Quartus (Programmer, RTL Viewer), Modelsim, Intel FPGA Monitor Program
You learn digital logic, hardware description, how to run assembly on soft core CPUs, etc.
The labs leads up to making your own Reduced RISC CPU. Neat!
If you enjoyed the Verilog/RISC -> take CPEN 311.
If you enjoyed the assembly -> you'll learn more in CPSC 212.

CPEN 221 Software Construction I

Technologies: Java
Learn functional software development principles, and apply them during problem-solving. A brief introduction to concurrency.
If you enjoyed the software development -> take CPEN 321 (haven't taken it myself)

MATH 253 Multivariable Calculus

Technologies: Matlab (optional)
I wished there were more applications and less theory. My favourite second year math course.
The partial and vector calculus is useful for the matrix cs courses (e.g. cpsc 340, 425).

CPSC 221 Basic Algorithms and Data Structures

Technologies: C++
Standard data structures and algorithms. Learn to implement them in C++, and use them to solve problems.
If you enjoyed everything -> you'll like CPSC 320.

MATH 220 Mathematical Proof

Learn set theory, various math proofs. A lot of the work is getting a question, and finding a solution that is able to cover all of its bases∎
Builds a foundation for CPSC 221/320. You'll want to know contradiction and induction very well before/during CPSC 320.
If you truely enjoyed the content, and want to apply the more complex proofs -> take CPSC 420 (didn't take it myself)

CPEN 212 Computing Systems II

Technologies: C, Assembly
You learn computer architecture theory, and how to implement parts of it in C.
Try to retain as much knowledge as possible, as you'll learn to implement the rest of it and more in CPEN 331.

CPEN 291 Computer Engineering Design Studio I

Technologies: HTML/CSS, Python, ItsyBitsy M4, Matplotlib, Torch
Exposes you to basic web dev, data processing, robotics, ML, and how they may be used in projects.
Final project requires two of the three technologies (IoT, ML, electronics).
If you enjoyed web dev -> CPEN 322 [Software Construction II] is a good follow up
If you enjoyed ML -> CPSC 330/340 [Applied Machine Learning/Machine Learning and Data Mining]
If you enjoyed robotics -> CPEN has poor offerings for that...

ELEC 201 Circuit Analysis I

Technologies: Matlab/Wolfram/Graphing Calculator
Solving linear systems of equations, a bit on non-linear components.
Honestly, I think it's too detailed for a required CPEN course. I wish we had the option of taking ELEC 221 [Signals and Systems] instead (convolutions, Fourier transforms, sampling, filtering are useful for CPSC 425).
Turns out the labs (that I skipped), were useful in teaching how to use tools (e.g. oscilloscope, function generator, etc.), which have some relevance to CPEN 291.

MATH 256 Differential Equations

Don't think much of the content has come up again for me. At the very least, when they do, it's so 'applied' that I'm unable to make connections back to this course.

Third Year

CPEN 331 Operating Systems

Technologies: C
Implementing what you didn't implement in CPEN 212 using C. A bunch of exercises on reading through assemlby and C code. Builds a deeper understanding of computer architecture. Assignments involve making a MIPS 3000 based operating system using OS161. \

CPSC 320 Intermediate Algorithm Design and Analysis

Solving problems using proofs, evaluating pseudocode, learning about new algorithms.
If you thought that you learned al lot about data structures in CPSC 221, this is the course where you learn as much content, but for algorithms :)
If you enjoyed the proofs -> take CPSC 420 [Advanced Algorithms Design and Analysis] (didn't take it myself)

MATH 302 Introduction to Probability

Standard probability. You'll find the content applicable in ML (e.g. cpsc 340).

CPEN 311 Digital Systems Design

Technologies: Verilog, Quartus (Platform Designer, Memory Editor), Modelsim, Intel FPGA Monitor Program
Build upon CPEN 211 by learning to use off-chip memories, using IP (e.g. vga adapter module), concurrency, design systems (FPGAs that interface with NIOs II core running assembly/C), hardware acceleration (e.g. accelerating matrix multiplication, decryption).
If you enjoyed the course -> take CPEN 411/412 [Computer Architecture/MIcrocomputer Systems Design] (didn't take them myself)

CPEN 322 Software Construction II

Technologies: HTML, CSS, JS, Express, MongoDB
Learn to build modern web app. Firstly, learn the ins and outs of Javascript. Then, build a the client-side (pure HTML/CSS with DOM), server-side (using express), database (using MongoDB), authentication (using cookies), security (sanitize with JS) portions of a web-app. Not too sure if this low-level web dev is useful for anything, but it is what much of what the higher level libraries (e.g. React/Angular) are built upon. If you want to get into the nitty gritty of networking -> take ELEC 331 [Computer Communications]

Electives

CPSC 425 Computer Vision

Technologies: Python, Numpy, scikit-learn, Matplotlib
Learn traditional computer vision algorithms (e.g. edge detection, Hough transform, image segmentation, feature extraction, object detection, tracking, etc). Learn to implement them using low and high-level libraries (openCV, Numpy, scikit-learn) using Python. Eventually learn an intro to deep learning, CNNs, grouping, and how they are used in computer vision. \

To be continued...