About the course
What is an “embedded system”?
An “embedded system” is anything that you write code for that isn’t a computer — like a refrigerator, or a car, or a pacemaker. These devices all contain computers, but they are each purpose-built for a specific application. Embedded systems are exciting to program because they are often very constrained: they must be low power, low cost, have guaranteed latency, or be super-reliable (or all of the above!) And when the code runs, it interacts with the real world — sensing the environment, controlling motors, and so on. To program these systems, you need to know more than just the programming language; you need a deep understanding of the microcontroller and the hardware it interacts with. And EE 14 exists to give you that experience!
Is EE 14 similar to CS 40?
Not really. There are some similarities: both courses use C (rather than C++) and cover the details of what happens at lower levels of the machine as it runs code. Both courses expose you to some assembly programming, and explore things like how a C compiler turns a function call into something a computer can execute.
Underneath those surface similarities, the courses explore very different areas. CS 40 is mostly about programming, and what programmers need to know about how a “large” computer works. CS 40 generally assumes you’re working with a “full-sized” CPU such as you might find in a laptop or cell phone, with gigabytes of memory. Along with that is an operating system which handles all interactions with the hardware and provides things like a filesystem and multitasking.
In EE 14, we’re focused on “small” microcontrollers that connect
directly to the outside world. These have a whole suite of specialized
peripherals to communicate with sensors, actuators, displays, and other
microcontrollers. There is no operating system; we’re writing code that
interacts directly with the hardware, and by extension, the real world.
Along the way, we learn about the basic operation of the
microcontroller, like examining how data and code are placed into
memory, and tracing how the system goes from powered off to running
main().
CS 40 discusses profiling and performance tuning to make code run fast. In EE 14, we’re sometimes concerned about speed, but the ways to make code fast are often very different. “Optimizing” can also mean optimizing for minimal power usage or code size.
Finally, a major difference is that EE 14 has a weekly hands-on lab where we build physical systems with microcontrollers. The labs in CS 40 focus mainly on writing programs and measuring their performance.
Both courses are valuable in different ways, and will make you a stronger programmer. If you have time in your schedule, they are both worth taking!
Is it like programming an Arduino / Raspberry Pi?
Yes. However, the brilliance of Arduino is that it allows people to build stuff with a microcontroller without really knowing how it works. Our goal in EE 14 is to really know how it works, so that you can build efficient, high-performance, or cost-optimized systems.
For Spring 2026
A few key points for the Spring 2026 offering of the course:
Contrary to what is listed in SIS, ES 4 is not a requirement. The only prerequisite is CS 11. If you’d like to take the course and need a permission code to join without ES 4, just email me your student ID number and which section you want to be in.
There are two lecture sections, scheduled for M/W 10:30-11:45am and M/W 1:30-2:45pm.
Labs will be scheduled during the first week of class; you’ll fill out a short survey of which lab times you’re able to make along with your preferred times, and we’ll schedule your 2-hour lab section based on that.
If you have questions about the course that aren’t answered on this page, please get in touch with Prof. Steven Bell (sbell AT ece.tufts.edu).