Computer engineering encompasses a wide range of topics surrounding the interaction between hardware and software. As computers continue to get smaller, cheaper and more ubiquitous, the software-hardware boundary is becoming more important to understand: High-performance network cards now write packets directly to user-space memory; secure enclaves and bootloaders must protect themselves from malicious or vulnerable operating systems; and increasingly complex systems must remain robust under faulty or buggy hardware and firmware.

Computer engineers of the future will be versatile full-stack developers, comfortable with understanding the technical depths of software development while also possessing a wide knowledge of the underlying hardware implementations. Our course curriculum and research covers a wide range of computer engineering topics, including embedded system design, networks and security, computer-aided verification and synthesis, distributed systems and software engineering.