Computer Systems from the Ground Up


Welcome to prospective students of CS107E!

Thanks for your interest in the course. To get a better idea of what this course is about, please read below for answers to common questions.

CS107E is scheduled to be taught in Winter and Spring quarters of academic year 2023-24. Extra exciting news is that this year the course is being redesigned for a single board computer that uses a Risc-V processor. Adventure awaits!

Please read the following for information about Spring 2024:

The course is geared towards students who have finished CS106B (or equivalent), and we generally prioritize frosh and sophomores in the course. The class is, however, open to all majors, with students most frequently majoring in CS, EE, and MechE.

The class is suitable as a replacement for CS107, and as such the concepts covered use low-level C and assembly language to write systems-level code. There is a significant hardware component to the class, meaning that you will be spending a considerable amount of time using breadboards, multimeters, and sensors. Students spend much of their coding time in the CS107E lab. Please be aware that lectures are not recorded, and lecture attendance is mandatory.

If you are interested in the course, feel free to fill out the prospective student questionnaire form. The deadline is the first day of the quarter. We will make decisions about enrollment by the second day of the quarter.

Re: Axess pre-enrollment. We ask prospective students to not pre-enroll on Axess, just submit the questionnaire and wait to hear back before enrolling. If you like, you can pre-enroll in a class (e.g. CS107) you are considering as an alternative if CS107e doesn't work out for you.

What is CS107/CS107E? What topics do these courses cover?

CS107 is the second systems course in Stanford's undergraduate core sequence and introduces students to computer systems focusing on these five fundamental concepts: hardware, architecture, assembly code, the C language, and software development tools. Our classic CS107 course teaches these concepts on a hosted Linux system using standard libraries and tools. The alternative CS107E explores the same concepts through bare-metal programming on a small single board computer (SBC) using hardware add-ons such as LEDs, buttons, and sensors.

Both versions of CS107 cover the C programming language, data representation, machine-level code, computer arithmetic, compilation, memory organization and management, program execution, debugging, and performance. CS107 has light coverage of floating point and computer security that CS107E does not. CS107E includes topics in hardware and I/O that CS107 does not.

What are the differences between CS107 and CS107E? How do I determine which course is right for me?

CS107 and C107E are considered two embodiments of the same course. They both cover the same core concepts and assign significant programming projects in C and assembly. Both promote effective development and testing through use of good engineering practices and developer tools. Either course satisfies the requirement for the CS major or minor and serves as a prerequisite for follow-on systems courses.

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 Risc-V SBC. 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:

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!

This course can accommodate at most 40 students and we must settle enrollment commitments in advance so students can be certain about their schedules. The appplication process is a lightweight questionnaire and selection is focused on identifying a good "fit" between you and the course. Priority is given to freshmen and sophomores. See above for instructions.

What equipment will I need to participate in CS107E?

What is the schedule for lecture and lab? Is attendance required?

Schedule for Spring Quarter 2024

If your schedule doesn’t permit you to consistently attend lecture or lab or you have a conflict with the project demos, consider enrolling in CS107 instead or waiting to take CS107E in a future quarter.

Is CS107e open to remote students and/or available to SCPD?

CS107e does not have a virtual option. Although we were able to muddle through a few virtual quarters during the pandemic, we know the course works best with active synchronous participation, so that remains our focus. If you are not able to join in person, consider taking CS107 instead which is offered via SCPD most quarters.

What are the course prerequisites for CS107/CS107E?

Successful completion of CS106B (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 and CS107(E), our strong recommendation is to pursue CS106B – we love this course! It is lots of fun, well-taught, and produces thoughtful and accomplished apprentice programmers. You will exit CS106B well-prepared to go on to a satisfying and successful experience in CS107(E).

Still have questions?

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