Skip to content

Commit f8b4953

Browse files
committed
Reset for Fall 2024
0 parents  commit f8b4953

File tree

319 files changed

+60247
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

319 files changed

+60247
-0
lines changed

.DS_Store

8 KB
Binary file not shown.

107efaq.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
---
2+
layout: standalone
3+
title: "CS107E: Computer Systems from the Ground Up"
4+
---
5+
6+
# Computer Systems from the Ground Up
7+
---
8+
9+
<style>
10+
.alert {
11+
background-color: #FFC87C;
12+
}
13+
</style>
14+
15+
<div class="alert" markdown="1">
16+
### __Welcome to prospective students of CS107E academic year 2024-25!__
17+
18+
CS107E is scheduled to be taught in __Fall and Winter quarters of 2024-25__. This year we will be continuing the re-design of the course for a __Risc-V__ processor. Our chosen SBC is the spunky pink [Mango-Pi MQ-Pro](https://mangopi.org/mangopi_mqpro).
19+
20+
<a name="enrollment"></a>
21+
Enrollment information for __Fall Quarter 2024__:
22+
23+
- Enrollment will be limited to 40 students. We use a student questionnaire for selection.
24+
- The process is intended to be lightweight and not competitive/ranked. Our one strict filter is to confirm the essential prereq (CS106B or equivalent, nothing further is expected).
25+
- We use the questionnaire to hear about your preparation, interest, and how the course fits with your plans. Stanford students are crazy awesome, we know all of you can succeed at whatever you put your mind to and would surely be wonderful students! Our tie-breaker is to identify students drawn to CS107E in specific and who are in a good position to get a lot out of the course. We know our course is a bit quirky :-)
26+
- Priority is given to freshmen and sophomores (i.e. those needing their first introduction to systems). We are open to all majors; the most common major of past students has been "Undeclared", followed by CS, EE, and MechE.
27+
- The [questionnaire form](https://forms.gle/i8G9ARAKQMu9s9UN6) is open now and will close on __5pm Sept 23__.
28+
You are welcome to fill out the questionnaire in advance, but it’s also possible to wait to attend the first lecture before deciding to apply. After the form closes, we will do a speedy review and make decisions as soon as possible so you can plan.
29+
- Please __do 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.
30+
31+
For information about whether CS107E is right for you, please read below for answers to common questions.
32+
</div>
33+
34+
## What is CS107/CS107E? What topics do these courses cover?
35+
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.
36+
37+
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.
38+
39+
## What are the differences between CS107 and CS107E? How do I determine which course is right for me?
40+
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.
41+
42+
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.
43+
44+
Here are a few other issues you may want to consider in comparing the two:
45+
46+
+ __Assignments:__ The CS107E assignments fit together in a tightly coupled sequence where students start from scratch and incrementally build a complete working system, a simple console. CS107 has a flexible sequencing of topics and each assignment explores a different aspect of systems programming in a software-centric context. A student who falls behind would face challenges in either course, but situation could be particularly difficult for CS107E given the interlocking nature of its assignments.
47+
- __Final project:__ CS107E concludes with a significant open-ended project where students work in teams on an ambitious project of their own design that implements a complete hardware/software system. The final task of CS107 is an individual project to develop a dynamic memory allocator.
48+
- __Exams:__ There are no exams in CS107E. CS107 typically has both a midterm and final exam.
49+
- __Difficulty:__ Our intention is to maintain comparable difficulty and workload for CS107 and CS107E. The assigned programming projects are demanding, and we know this work is invaluable for your learning. You will work hard in either course and leave with sharpened programming skills and a deep understanding of computer systems.
50+
- __Tools:__ Both courses use a similar gcc toolchain (CS107E is cross-compile), but CS107 students have access to richer suite of tools (gdb/valgrind/callgrind) and the linux/x86 mileage may have a more direct payoff in subsequent projects due to the ubiquity of such systems.
51+
- __CS vs EE:__ Because CS107E touches on both hardware and software, it serves a mix of EE and CS students. CS107E could be especially appealing to a student interested in the hardware/software interface and embedded systems, whereas CS107 is a better fit for exploring the software layers of a modern operating system. Either CS107 or CS107E applies to the systems core requirements for the CS major or the hardware/software track of the EE major.
52+
- __History:__ CS107 has been operating in a fairly stable form since 2010; that longevity and larger audience makes for a very mature course. In contrast, CS107E is a younger upstart in the midst of moving to Risc-V SBC to replace our former Raspberry Pi (ARM) system. We welcome a spirit of adventure, and warn there may be some surprises and lack of polish in the midst of this upheaval. Your flexibility and self-sufficiency will be assets in working through any unexpected obstacles.
53+
- __Scale:__ CS107’s large audience and longer history connect you to an extensive community of practice. This means a larger course staff, many more office hours, widespread "institutional knowledge" (e.g. upperclass friends who could advise when you get stuck), and additional academic support from CS107ACE and CS107-specific tutoring. CS107E may be small in numbers, but it is strong in spirit. The small tight-knit community is a chance to get to know your instructors and CAs and work closely and bond with your peers.
54+
- __Materials:__ Take a look at recent course materials to get additional information. The current CS107 course web site is at [cs107.stanford.edu](http://cs107.stanford.edu); the [CS107 FAQ](http://cs107.stanford.edu/faq.html) may be a good place to start. The course web site from last year’s CS107E offering is archived at [cs107E.github.io](https://cs107E.github.io) and you’re reading the CS107E FAQ right now. Reviewing the syllabus, labs, and assignments will give you a better feel and allow you to consider the fit of each course in relation to your experience and own learning goals.
55+
56+
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!
57+
58+
## Axess says that CS107E has limited capacity and enrollment requires instructor consent. What does this mean?
59+
Enrollment is limited to 40 students. We use a lightweight questionnaire to select based on the "fit" between the student and course. See above for [instructions and deadlines](#enrollment).
60+
61+
## What equipment will I need to participate in CS107E?
62+
- __What we provide:__ We will prepare a [parts kit](https://cs107E.github.io/guides/bom/) for each CS107E student. The kit contains the SBC, cables, breadboard, jumpers, LEDs, transistors, and other components. There is a $75 fee for the parts kit.
63+
- __What you provide:__ You will need a computer (Mac OS, Linux, or Windows) onto which you can install the needed cross-development tools.
64+
65+
## What is the schedule for lecture and lab? Is attendance required?
66+
67+
#### Schedule for __Fall Quarter 2024__
68+
- Lectures meet __Monday and Friday 10:30am-12pm__. We use lecture time to cover highly relevant content. Lectures are __not recorded__ and __lecture attendance is expected__. Consistent attendance and active participation are highly correlated with student success and we want you to have this optimal experience! ([An ode to "did I miss anything"?](http://cs.stanford.edu/~zelenski/didimissanything.html))
69+
- Labs meet on __Tuesday or Wednesday 6:30-8:30pm__. You must attend one of the two times; __lab participation is mandatory__. During lab, you will work on guided exercises in small groups with the support of the course staff. Lab is also an opportunity to build community with your peers, get to know the course staff, and have fun!
70+
- The final project demos are __Friday Dec 13th 9am-11am__. Participation in the __project demo session is mandatory__.
71+
72+
If your schedule doesn’t permit you to consistently attend lecture or lab or you have a conflict with the project demo session, you should choose a different course or wait to take CS107E in a future quarter when you are able to fully participate.
73+
74+
## Is CS107E open to remote students and/or available to SCPD?
75+
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. For a virtual option, consider instead CS107 which is regularly offered via SCPD.
76+
77+
## What are the course prerequisites for CS107(E)?
78+
CS107 and CS107E require 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).
79+
80+
## Still have questions?
81+
If your question is not answered here, email us at `[email protected]` and we can help you out!

Gemfile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
source "https://rubygems.org"
2+
3+
# For GitHub Pages
4+
gem "github-pages", group: :jekyll_plugins
5+
6+
# Syntax highlighter
7+
gem "rouge"
8+
9+
# If you have any plugins, put them here!
10+
# github whitelist https://pages.github.com/versions/
11+
group :jekyll_plugins do
12+
gem "jekyll-sitemap"
13+
gem "jekyll-target-blank"
14+
end
15+
16+
# confirm version of jekyll
17+
# current jekyll for github-pages is 3.9.0 Dec 2020
18+
gem "jekyll", "~> 3.9.0"
19+
20+
# Ruby 3 upgrade require manual use of webrick
21+
# I think this will fail on github pages, only needed locally?
22+
gem "webrick"

LICENSE.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Copyright 2014-2024. The Board of Trustees of The Leland Stanford Junior University.
2+
All Rights Reserved. Reproduction of publication in whole or in part without written permission is prohibited.

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Public repo of materials for CS107e course. Do not commit here (automatically managed)

_assets/img/Ben.jpeg

69.7 KB
Loading

_assets/img/aanya.jpg

35.2 KB
Loading

_assets/img/allwinner.png

5.28 KB
Loading

_assets/img/anna.jpg

22.5 KB
Loading

_assets/img/chris.png

445 KB
Loading

0 commit comments

Comments
 (0)