Cs107 Assignments

Getting Started

Welcome to the website for intro programming in Java.

  • Sign-up (purchase) a subscription to the custom, interactive text we will be using:
    1. Sign up at learn.zybooks.com using your JHED login-based email (such as jsmit34@jhu.edu, not an alias)
    2. Enter zyBook code: JHUEN601107SelinskiFall2017
    3. Subscribe
  • Sign-up for our (free) on-line Q&A discussion forum on Piazza as soon as possible! Please use your actual full name and JHED login-based email when signing up so we know who you are. Most resources (lecture notes, exercises, assignments), announcements and course updates will be posted there only.
  • Download and install the (free) Java SDK and jGRASP as soon as possible. See the Software Downloads section below for links and instructions. You will likely want to use them on your laptops frequently during class sessions.

Resources for Practice & Review

Software Downloads

  • REQUIRED Java SDK downloads: choose the most recent version of the Java JDK. You don't need NetBeans or JSEE for this course. Install this before you install jGRASP.
  • REQUIRED jGRASP website -- install the Java compiler first (see above).
  • REQUIRED Checkstyle downloads: tool, configuration file, and documentation: website, JHU notes
  • OPTIONAL JUnit download (JGrasp configuration is similar to that for checkstyle), and notes if you're interested in learning more.


Winter 2018

Welcome to the Winter 2018 offering of CS107e!

CS107 is the third course in Stanford’s introductory programming sequence. CS106 provides students with a solid foundation in programming methodology and abstractions, and CS107 follows on to give you the skills needed to build computer systems.

There are two major learning goals for the course.

First, to understand how computers represent information, execute programs, and control peripherals.

Second, to master command-line programming tools and the C programming language.

The course builds understanding from the ground up using bare metal programming on the Raspberry Pi. Bare metal programming uses no operating system and few external libraries.

Students will receive a Raspberry Pi and a kit of parts, and all assignments will run on the Raspberry Pi. Assignments build upon each other by adding more and more functionality to a core library. They culminate in a simple personal computer shell using a keyboard and display.

Finally, students do a project of their choosing where they build a complete hardware-software system.

For information about the differences between CS107 and CS107e, check out this FAQ.


All class announcements will be posted on Piazza.

Course Info

  • Lectures: Mon & Fri 11:30 AM-12:50 PM, Room 124, Building 160
  • Labs: Tue & Wed 6:30 PM-8:30 PM, Gates B21
  • Lecturers: Julie Zelenski, Pat Hanrahan
  • CAs: Lenny Truong, Mark Miller, Anna Zeng, Michelle Park


In the readings, K&R is The C Programming Language (Kernighan and Ritchie), and EssentialC is a PDF available via Stanford’s CS Library. A digital copy of K&R is available to Stanford students via Safari Books Online.

Please read the assigned readings before attending lecture and lab. You should also read the guides for each week.

Winter 2018 schedule.

Week 1 Jan 8
Lecture 1 (Mon): Introduction (slides) Review electricity, binary and hexadecimal numbers and bitwise operations, and the unix command line.
No Lab (Review this library of unix reference documents and videos from CS107)
Assignment 0: Choose Lab Section, Learn Git
Lecture 2 (Fri): Introduction to ARM processor and memory architecture (slides, code) Start with Baking Pi ( intro, ok01, ok02 ) and then read about ARM ASM. I also recommend you read Steven Wolfram's blog post Untangling the Tale of Ada Lovelace for a nice descption of Charles Babbage's and Lady Ada Lovelace's roles in developing the concept of a general-purpose computer.
Week 2 Jan 15
Lecture 3: ARM Assembly Language and Machine Code (screencast, slides, code) Read/Skim sections 4.1-4.5 from the ARM Instruction Set Architecture manual. Read Danny Cohen's article Holy Wars and a Plea for Peace on the history of littie-endian vs. big-endian.
Lab 1: Setup the Raspberry Pi
Assignment 1: Implement a Larson Scanner
Lecture 4 (Fri): From ASM to C (slides, code) Brush up on C syntax, data types, operators, control structure, and function calls. EssentialC chapters 1 and 2; or K&R 1, 2, and 3. Skip sections involving characters, strings, io, and standard libraries. Read about the history of C
Week 3 Jan 22
Lecture 5 (Mon): C: Pointers and Arrays (slides, code) EssentialC chapters 3 (skip material on structures) and 6 (skip material on the heap and memory management).; or K&R and 5.1-5.4. Make sure to read the sections involving characters and strings.
Lab 2: Below C Level
Assignment 2: Implement a Clock
Lecture 6 (Fri): Functions (slides, code) Read (or read again) about functions in C (Chapter 4 in K&R, Section 4 in Essential C), Read this nice explanation of local data and frame pointers
Week 4 Jan 29
Lecture 7 (Mon): Communication and the Serial Protocol (slides, code) Read about characters and strings, basic IO (getc, putc, puts, printf), and structures (Section 1.5, 1.6, 1.9, 5.5, 6, 7 in K&R; Section 3 in EssentialC). Read about Serial Communication.
Lab 3: Debugging and Testing
Assignment 3: Implement a String Formatting Library
Lecture 8 (Fri): Modules and Libraries: Linking (slides, code), Read David Welch's articles on baremetal programming and bss data.
Week 5 Feb 5
Lecture 9 (Mon): Memory Management (slides, code)
Lab 4: Linked and Loaded
Assignment 4: Backtrace and Malloc
Lecture 10 (Fri): C mastery (slides, code)
Week 6 Feb 12
Lecture 11 (Mon): Keyboards and the PS/2 Protocol (slides, code) Read about the PS/2 protocol for keyboards and mice
Lab 5: Keyboard Surfin
Assignment 5: Keyboard and Simple Shell
Lecture 12 (Fri): Graphics and the framebuffer (slides, code) Read more about the Framebuffer in the Baking Pi lectures (Screen01, Screen02, Screen03, Screen04).
Week 7 Feb 19
President's Day (no class)
Lab 6: Drawing into the Framebuffer
Assignment 6: Graphics Library and Console
Lecture 13 (Fri): Interrupts ( slides, code, minimal timer interrupt example code )
Week 8 Feb 26
Lecture 14 (Mon): Interrupts and Concurrency (slides, code)
Lab 7: Raspberry Pi, Interrupted
Assignment 7: System Monitor with Interrupts Read Project Suggestions and Guides for inspiration
Lecture 15 (Fri): Sensors (slides, code), and Sound (slides, code)
Week 9 Mar 5
Lecture 16 (Mon): Performance (Anna, slides, code), Git Workflow (Lenny, slides) Read Atlassian's guide to the Git Feature Branch Workflow
Project Lab 1
Lecture 17 (Fri): Computer Arithmetic (slides, code)
Week 10 Mar 12
Lecture 18 (Mon): To Linux and Beyond
Project Lab 2
Week 11 Mar 19
Fri Mar 23 9:00-11:30 am: Final project demonstrations


Leave a Reply

Your email address will not be published. Required fields are marked *