CS107E Computer Systems from the Ground Up

Curious about the course? Below we answer some of the questions commonly asked by prospective students.

What is CS107E?

Both CS107 and CS107E introduce students to the fundamental concepts of computer systems, exploring how these five concepts come together: hardware, architecture, assembly code, the C language, and software development tools. Our classic CS107 course is taught on a hosted Linux system using a full complement of libraries and tools. The CS107E course is a novel alternative that explores the same concepts through bare-metal programming on the Raspberry Pi. CS107E students do all programming with a Raspberry Pi kit and hardware add-ons such as LEDs, buttons, and sensors.

What are the course topics for CS107/CS107E?

Both CS107 and CS107E cover the C programming language, data representation, machine-level code, computer arithmetic, compilation, memory organization and management, program execution, debugging, and performance. Additionally, CS107E includes topics in hardware and I/O.

What are the differences between CS107 and CS107E? What factors should I consider to determine which course is right for me?

We think both courses are great and either will serve as an excellent introduction to computer systems. They cover the same core concepts and both require significant programming in C/asm. The major difference is the system being explored. CS107 students work on linux running on the x86 architecture. This modern, hosted system provides the advantages of sophisticated libraries and tools, but it puts you at arms' length away from the hardware (no direct access to processor, I/O, or framebuffer). CS107E runs bare-metal (no OS or libraries) on a Raspberry PI ARM architecture. There is nothing standing between you and the hardware, but the environment is somewhat more primitive and edit/compile/debug must be done via cross-system tools.

Here are a few other issues you may want to consider in comparing the two options:

Whether you take CS107 or CS107E, you'll learn how a computer system operates and work hard to gain mastery over these topics and advance from a novice programmer to an effective practitioner. Students who do well in either course are excellently positioned to apply these powerful skills to future CS, EE, or ME projects!

The CS107E course can accommodate at most 40 students due to the space/capacity constraints. We configure Axess wiith no limit; all potential students are welcome to pre-enroll. If we have more interested students than the limit, we have a low-key process to choose students. To be considered, you must attend the first class meeting and submit a questionnaire to share your prior experience and interest and fit with the course. Priority will be given to freshmen and sophomores. We will let you know of our enrollment decisions within the first few days of quarter so you can plan.

What equipment will I need to participate in CS107E?

Each CS107E student will be given a kit containing a Raspberry Pi, breadboard, jumpers, LEDs, transistors, and other parts. There is $75 lab fee for the parts kit. We can arrange a scholarship for any student for whom the fee is hardship-- please contact the instructors. You will also need a laptop (Mac OS, Linux, or Windows) on which you can install the needed cross-development tools. The laptop will need a USB 3.0 port (USB-C with adapter also ok). Access to an HDMI display is a nice-to-have, but there are shared monitors available for student use in our lab room.

When is CS107E offered?

CS107E is scheduled for winter and spring quarters of the 2019-20 academic year. The weekly schedule consists of two lectures and one lab session. The winter quarter lecture schedule will be Monday and Friday 11:30am-12:50pm and lab sessions will meet Tuesday and Wednesday evening. Lecture attendance is expected and participation in lab is mandatory.

Will the CS107E lectures/labs be recorded? Is attendance required?

CS107E is not being offered via SCPD and lectures will not be recorded. Lecture attendance is expected and participation in lab is mandatory. (An ode to "did I miss anything"?) If your schedule doesn't permit you to consistently attend lecture/lab, we recommend choosing a different course than this one.

What are the course prerequisites for CS107/CS107E?

Successful completion of CS106B/X (or equivalent) and eagerness to advance to the next level. You should be an accomplished programmer who has practical C/C++ skills using recursion, dynamic data structures (pointers, linked lists, trees), data abstraction, classic data structures (lists, stacks, queues, sets, maps), and standard algorithms (searching, sorting, hashing). You should have an appreciation of the intrinsic value of good engineering and design and you will be expected to produce well-decomposed, readable code. If you feel on the fence in determining your placement between CS106B/X and CS107/107E, our strong recommendation is to pursue CS106B/X -- we love this course! It is lots of fun, supremely well-taught, and produces thoughtful and accomplished apprentice programmers. You will exit CS106B/X well-prepared to go on to a satisfying and successful experience in CS107/CS107E.

Still have questions?

If your question is not answered here, email us at cs107e@cs.stanford.edu and we can help you out!